我在SQL Server 2000上创建了一个视图,并通过ODBC将视图链接到我的Access 2007数据库。从Access打开视图显示看起来像重复的值。我更新了我的观点,以包含有问题的数据的ID,并且它是重复的。
看起来访问正在为该类型的每一行显示每种类型的第一条记录。这个question提到了Order By或Top子句,但我并没有在我看来使用它们中的任何一个。视图将8个表链接在一起,我唯一能想到的是我在视图中的一些表,我没有在Access中链接。我将链接这些表也只是为了尝试它,但我认为我在Access中不需要它们。
我已经厌倦了在谷歌寻找答案,但除了我提到的问题之外,我没有太多运气。对于像这样的链接视图,这种行为是否正常?
这是我的sql manager结果集:
id Type Dim1
---- ------------ ------
3111 Pipe 480
3112 Fittings 0
3113 Pipe 1080
3114 Fittings 0
3115 Fittings 0
3116 Fittings 0
3117 Pipe 216
在访问中我看到了:
id Type Dim1
---- ------------ ------
3111 Pipe 480
3112 Fittings 0
3111 Pipe 480
3112 Fittings 0
3112 Fittings 0
3112 Fittings 0
3111 Pipe 480
答案 0 :(得分:5)
您不需要在Access中链接的所有8个表...视图就足够了,Access不需要知道基础表。
我认为你有一个不同的问题,我也遇到过与你类似的问题 当我通过ODBC链接Access中的SQL Server视图时,会弹出一个窗口,要求我从视图中的列中选择唯一标识符(读取:主键):
如果我没有选择任何内容(或某些错误的列,不识别唯一记录),Access会像您的示例一样屏蔽显示的数据。
显然,如果没有唯一标识符,Access无法正确显示视图。
解决您的问题:
据我了解您的看法,id
是唯一的,对吧?
如果是,只需删除视图,通过ODBC重新链接,当弹出“选择唯一标识符”窗口时,您需要选择id
列。
答案 1 :(得分:1)
在Access to SQL Server表或视图中创建ODBC链接时,Access存储有关该SQL Server数据源的元信息。如果稍后更改SQL Server表结构或视图定义,则即使您“刷新”链接,Access的缓存信息也不会可靠地更新以匹配...删除链接并重新创建它以确保Access的缓存信息与修订的数据源一致更安全。
似乎你在Cristian的帮助下发现了这个事实。我强调这一点是为了其他读者的利益。这似乎是一个相当普遍的问题,但是当您了解幕后发生的事情时,很容易避免。