如何防止 MS Access 连接模式和表名,从而使它们超过 64 个字符的限制?

Posted

技术标签:

【中文标题】如何防止 MS Access 连接模式和表名,从而使它们超过 64 个字符的限制?【英文标题】:How does one prevent MS Access from concatenating the schema and table names thereby taking them over the 64 character limit? 【发布时间】:2016-08-17 14:23:28 【问题描述】:

我已经尝试解决这个问题好几天了,但没有运气。我加载了 Libre Office 来看看它是如何处理它的,它对 PostgeSQL 的原生支持非常好,我可以看到真正的数据结构。这就是我发现我正在处理不止一张桌子的方式。我在 MS Access 中看到的是连接在一起的两个名称。串联使它们超过了 ODBC 驱动程序中似乎内置的 64 个字符限制。我已经看到很多关于在服务器端修改namedatalen 的参考,但我的问题出在 ODBC 端。大多数表格都在 64 个字符的限制下,即使连接起来也能正常工作。因此,我知道其他一切都在工作。我得到的具体错误是

'your_extra_long_schema_name_your_table_name_that_you_want_to_get_data_from' 不是有效的名称。确保它不包含无效字符 或标点符号,并且不会太长。

【问题讨论】:

我刚刚尝试使用嵌套(分区)PostgreSQL 表进行测试,而 Access 没有连接(子)表名。但是,当 schema 名称 + master_table_name 超过 64 个字符时,我确实重现了该错误消息。这可能是您错误的实际来源吗? 是的,可能就是这样。我不熟悉 PosgreSQL,也不熟悉事物的命名方式。 我添加了一个屏幕截图,显示了表格在 Libre 中的外观以进行清除。我假设它们是嵌​​套的,但可能是模式名称 + master_table_name 我使用了 Marshal SQL Utility,它也使用了 ODBC 驱动程序,它工作正常......所以,看起来它不是 ODBC,它是 Access。在 Marshal 中,它们以句号分隔。 【参考方案1】:

Access 数据库中的对象名称限制为 64 个字符(参考:here)。在 Access UI 中创建 ODBC 链接表时,默认行为是使用下划线连接架构名称和表名称,并将其用作链接表名称,例如,架构 public 中的远程表 table1将在 Access 中生成一个名为 public_table1 的链接表。如果这样的名称超过 64 个字符,则 Access 将引发错误。

但是,我们可以使用 VBA 来创建具有较短名称的表链接,如下所示:

Option Compare Database
Option Explicit

Sub so38999346()
    DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DSN=PostgreSQL35W", acTable, _
            "public.hodor_hodor_hodor_hodor_hodor_hodor_hodor_hodor_hodor_hodor", _
            "hodor_linked_table"
End Sub

(使用 Access 2010 测试。)

【讨论】:

以上是关于如何防止 MS Access 连接模式和表名,从而使它们超过 64 个字符的限制?的主要内容,如果未能解决你的问题,请参考以下文章

Ms Access SQL:如何防止 Select 查询重复

如何在 Oracle 中动态分析给定模式名和表名的元数据?

如何在 MS Access 中使用 C# 获取所有表名和列名?

防止向下箭头或向上箭头更新 MS Access 中的组合框

Java 中获得Access 数据库中的表名和表中的列名 及每个列的数据类型

MS Access中绑定/未绑定形式的问题