2011-09-08 17 views
5

我在SQL Server 2000上创建了一个视图,并通过ODBC将视图链接到我的Access 2007数据库。从Access打开视图显示看起来像重复的值。我更新了我的视图,以包括有问题的数据的ID,并且它被复制。为什么链接的视图会给出与MS Access和SQL Manager不同的结果?

它看起来像访问显示每种类型的每个类型的第一个记录。这question提到查看Order By或Top子句,但在我看来,我没有使用它们中的任何一个。该视图将8个表链接在一起,唯一我能想到的就是我在我看来的一些表格,我没有在Access中链接。我将链接这些表也只是为了尝试它,但我不认为我需要它们在Access中。

我已经厌倦搜索Google的答案,但除了我提到的问题之外,我没有多少运气。这种行为对于像这样的链接视图是否正常?

这是我的结果从SQL管理器设置:

id Type   Dim1 
---- ------------ ------ 
3111 Pipe   480 
3112 Fittings  0 
3113 Pipe   1080 
3114 Fittings  0 
3115 Fittings  0 
3116 Fittings  0 
3117 Pipe   216 

,并在Access我看到这一点:

id Type   Dim1 
---- ------------ ------ 
3111 Pipe   480 
3112 Fittings  0 
3111 Pipe   480 
3112 Fittings  0 
3112 Fittings  0 
3112 Fittings  0 
3111 Pipe   480 

回答

5

你不需要在访问链接的所有8个表...的视图就足够了,Access不需要了解底层表。

我觉得你有一个不同的问题,我也遇到过类似的问题。
当我通过ODBC访问链接SQL Server视图,会弹出一个窗口说要我选择的唯一标识符(读:主键)从列视图:

"select unique identifier" window

如果我不要选择任何东西(或者某些错误的列,而不是确定一个唯一的记录),访问将显示的数据拧紧,如示例中所示。
显然,如果没有唯一标识符,Access无法正确显示视图。

解决你的问题:
正如我理解你的观点,id是独一无二的,对不对?
如果是,只需删除视图,通过ODBC重新链接,当弹出“选择唯一标识符”窗口时,需要选择id列。

+0

我知道这会很简单。我刚添加ID时刷新了表格。不删除它不会给出唯一记录对话框。谢谢。 – xecaps12

1

当您在访问SQL Server表或视图时创建ODBC链接时,Access会存储有关该SQL Server数据源的元信息。如果以后更改SQL Server表结构或视图定义,则即使您“刷新”链接,Access的缓存信息也不会可靠地更新以匹配...。删除链接并重新创建它会更安全,以确保Access的缓存信息与修改后的数据源保持一致。

似乎你在克里斯蒂安的帮助下发现了这个事实。我强调这一点是为了其他读者的利益。这似乎是一个相当常见的问题,但是当你了解封面上发生了什么时很容易避免。

+0

它还有助于了解访问如何处理数据,如果您没有选择唯一的标识符,或没有足够的一个。我第一次选择类型字段时,不知道访问权限会将结果向上滚动选定的值。我只是假定它会通过不选择真正独特的值来减慢查询视图的速度,而不会改变结果。 – xecaps12

+0

是的,这让我感到惊讶。没有一个唯一的键,我期望Access将数据源视为只读,但*不*返回不同的行集。我不明白为什么会发生。仍然有趣的是,在您重新创建链接而不是刷新链接后,问题就消失了。 – HansUp

+1

如果没有密钥,Access一般将其视为只读...但另外,如果没有密钥或错误密钥,它会将显示的视图行集合(只有视图,没有我知道的表的问题)选择。我也不理解它,但是我经常在工作中遇到它,因为我们有几个高级用户(主要是控制器),他们拥有带有链接SQL Server视图和表的MDB,以便他们可以创建和运行自定义查询。几乎每次他们将新视图链接到他们的MDB时...... –

相关问题