链接到 SQL Server 的访问显示 #Name?在过滤后的字段中

Posted

技术标签:

【中文标题】链接到 SQL Server 的访问显示 #Name?在过滤后的字段中【英文标题】:Access linked to SQL Server shows #Name? in fields after filtering 【发布时间】:2019-05-23 13:18:54 【问题描述】:

关于:

MS Access 2016 SQL Server 2017

我有一个到本地 SQL Server 的 ODBC 连接。奇迹般有效。其中两个链接表被制作为视图。当我在 MS Access 中打开视图时,它显示图 1。当我应用过滤器时,我得到如图 2 所示的结果,所有字段中的错误为#Name?

当我直接在 SQL Server 中查找时,它工作得非常好。

有什么建议吗?

【问题讨论】:

有错误信息,你分析了吗? -- 你可以滚动到未过滤视图的末尾而不会出错吗? 过滤器是什么? 过滤器只是 "Project" = "LS10005" 或类似的。当我在没有过滤器的情况下一直向下滚动时,我得到相同的结果 - 每个单元格都变成#Name? 我认为您需要先修复错误。 尝试使用'LS10005' 而不是LS10005 进行过滤。它不应该有任何区别,但尝试并没有什么坏处。另一个问题可能是可能缺少主键。有很多 Access 表功能根本不适用于链接为表的 MS SQL 视图,如果您在链接时为链接表分配主键,大部分问题都可以解决。 【参考方案1】:

将所谓的“行版本”列添加到表中。 因此,在视图所基于的基表中创建一个时间戳列。现在包括那个新列 - 通常我称之为 TS,但它将属于“时间戳”类型 - 不要与日期/时间列混淆。

该表可能有 1 个或多个浮点列,或者可能有一个时间戳列。因此,将时间戳列添加到基表中。将 TS 列添加到视图中,然后重新链接视图(或刷新 - 不要忘记最后一步)。

当您链接视图(手动与访问 UI)时,您有一次机会选择 PK 列。您应该不需要设置(选择)PK 列,但如果您不这样做,那么该表将是只读的(这很好)。

如果上面的 TS 列不能解决这个问题,那么请在链接时尝试选择一个 PK(因此,刷新是不够的,您必须删除并重新创建链接的视图以获取(强制/触发)所有PK 的重要提示。如前所述,添加 TS 列应该可以解决此问题,但如果没有,则重新开始,并重新创建链接视图,同时选择 PK 以及所有重要的 TS 列。如果您不包括 TS 列,然后 Access(客户端)将逐个字段进行丑陋的比较 - 使用 TS 列将消除这些额外的工作,而且很可能是您的问题。

【讨论】:

感谢您的建议。只有一个问题:我的视图是两个表的连接视图。我应该把 TS 列放在哪里? 注意:现在我使用基表 A 中的“ID”列作为 Access 中的 PK。 “ID”是自动编号。 所有表都需要一个 PK 才能与 Access 一起正常工作。视图不支持 PK 的概念。因此,在链接视图而不是链接表时,系统会提示您选择 PK。如果您需要 View 可以更新,那么您必须在链接过程中选择一个 PK。 (如果你不需要读/写能力,那么跳过这一步没什么大不了的)..因此所有表都需要一个 PK 并且所有表都应该添加一个 TS 列。 20 年来,用于访问 sql server 的升级工具始终包含一个 TS 生成选项。所以所有表都应该有 TS 列 - (时间戳类型)。 所以,在两个表中添加一个 TS 列。

以上是关于链接到 SQL Server 的访问显示 #Name?在过滤后的字段中的主要内容,如果未能解决你的问题,请参考以下文章

使用链接到链接到共享点的访问的 SQL Server 更新表

通过需要很长时间的访问将记录插入到 SQL Server 链接表中[重复]

SQL Server 2008 如何配置链接服务器访问 SQL Server2000?

SQL Server 2008 如何配置链接服务器访问 SQL Server2000?

访问 db 和 sql server 2008 表达我如何链接它们[关闭]

访问链接到 SQL:为新创建的记录显示错误的数据