【问题标题】:Why does linked view give different results from MS Access vs SQL Manager?为什么链接视图会给出与 MS Access 和 SQL Manager 不同的结果?
【发布时间】:2011-09-08 15:51:42
【问题描述】:

我在 SQL Server 2000 上创建了一个视图,并通过 ODBC 将该视图链接到我的 Access 2007 数据库。从 Access 打开视图显示了看起来像重复值的内容。我更新了我的视图以包含有问题的数据的 ID,并且它被复制了。

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

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

这是我从 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

【问题讨论】:

    标签: sql-server ms-access


    【解决方案1】:

    您不需要Access中链接的所有8个表......视图就足够了,Access不需要了解基础表。

    我认为您遇到了不同的问题,我也遇到了与您类似的问题。
    当我通过 ODBC 在 Access 中链接 SQL Server 视图时,会弹出一个窗口,让我从视图中的列中选择一个唯一标识符(读取:主键):

    如果我没有选择任何内容(或一些错误的列,它们识别唯一记录),Access 会像您的示例一样搞砸显示的数据。
    显然 Access 无法在没有唯一标识符的情况下正确显示视图。

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

    【讨论】:

    • 我就知道会这么简单。添加ID时,我刚刚刷新了表格。不删除它不会给出唯一记录对话框。谢谢。
    • Christian,您写道:“..如果我不选择任何内容...Access 会破坏显示的数据...显然,如果没有唯一标识符,Access 将无法正确显示视图。”我发现恰恰相反;如果我选择一列作为唯一标识符,我会得到该标识符的正确记录数,但具有该标识符的其余列的值与第一行相同。如果我重新链接到我的视图并且不指定唯一标识符,我会在其他列中看到所有正确的值。这很麻烦,我在任何地方都找不到这种行为的正式记录。
    【解决方案2】:

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

    看来你是在 Cristian 的帮助下发现了这个事实。为了其他读者的利益,我强调这一点。这似乎是一个相当普遍的问题,但是当您了解幕后发生的事情时很容易避免。

    【讨论】:

    • 如果您没有选择唯一标识符,或者一个标识符不够,它还有助于了解访问如何处理数据。我刚刚选择了类型字段,第一次不知道访问会按所选值汇总结果。我只是假设通过不选择真正唯一的值而不是更改结果会使查询视图变慢。
    • 是的,这让我很惊讶。如果没有唯一键,我希望 Access 将数据源视为只读,但 not 返回不同的行集。我不明白为什么会这样。有趣的是,在您重新创建而不是刷新链接后问题就消失了。
    • 如果没有键,Access 通常会将所有内容视为只读...但此外,如果没有键或选择了错误的键。我也不明白,但我在工作中经常遇到它,因为我们有一些高级用户(主要是控制器)拥有带有链接 SQL Server 视图和表的 MDB,以便他们可以创建和运行自定义查询。几乎每次当他们将新视图链接到他们的 MDB 时......
    猜你喜欢
    • 2018-12-01
    • 2012-06-09
    • 2012-02-17
    • 2014-02-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多