加载包含链接的 sql server 表的 mdb 时 ms 访问崩溃
Posted
技术标签:
【中文标题】加载包含链接的 sql server 表的 mdb 时 ms 访问崩溃【英文标题】:ms access crashes when loading an mdb containing a linked sql server table 【发布时间】:2010-01-15 17:19:48 【问题描述】:我有一个 mdb,它曾经包含一堆链接表。这些链接指向另一个 Access mdb 中的表。
作为受控迁移的一部分,我将这些链接表更改为指向 SQL 服务器实例,方法是遍历所有链接表并将连接字符串更新为 ODBC 字符串,然后在 tabledef 上调用 RefreshLink。
但是,在使用 ODBC 链接打开我的新数据库时,Access 崩溃。更有趣的是,如果我删除一个特定的链接表(通过 ADO),我就可以打开数据库。更有趣的是,如果我通过 Access GUI 重新添加链接表,它不会崩溃,所以我知道 SQL Server 中的表本身没有问题。
所以,我需要弄清楚导致 Access 崩溃的这个特定链接表的原因。我可以获得有关崩溃的任何信息以提供帮助吗?我什至可以从哪里开始调查呢?
编辑:我尝试了多种刷新链接表的方法,或者通过刷新链接,或者删除并重新创建带有 DSN 或不带 DSN 的表等。每次都是同一个表导致 mdb 崩溃打开时。
编辑 2:可悲的是,崩溃似乎实际上以某种方式归结为源代码控制 - 如果我禁用我的 SCCAPI 提供程序,那么就没有崩溃。我仍然不知道如何调查。
【问题讨论】:
【参考方案1】:删除链接并创建全新的链接。 ODBC 链接即使以 ODBC 链接开始,也无法可靠地刷新。
【讨论】:
我同意。编写代码,在启动时删除并重新创建所有链接,然后再执行任何其他操作。它应该非常快。您可以将本地表与表列表及其所需的链接一起使用,或者仅使用与服务器连接的单行(假设所有链接的表都应重新创建并将连接到同一服务器,并且链接表的存在是触发其删除和重新创建的原因)。 我突然想到,能否成功更新ODBC链接取决于ODBC提供者。例如,会计程序 MYOB 的 ODBC 驱动程序的链接可以很好地更新,而无需删除和重新创建它们,但根据我的经验,不能链接到 SQL Server 和 mysql。 @Emtucifor:实际上,除了在删除和重新创建表名之前将表名存储在自定义集合或数组中之外,您不需要做任何事情——不需要持久存储。 拥有一个应该出现在数据库中的表通常很有用,那么为什么不使用它进行链接呢?我看不出用列表把代码弄乱有什么好处。 恐怕这行不通。同一个数据库在同一张表上崩溃。 VBA 的馅饼在这里pastie.org/783213 看看你是否认为我在做任何迟钝的事情。【参考方案2】:没有链接表的策略会改变结果,我们仍然会因为同一张表在同一个数据库中遇到同样的崩溃。
但是,禁用源代码控制解决了这个问题,没有人提出可能的原因,也没有调查方法,所以我通过接受“禁用 SCC”作为答案来结束这个问题。
【讨论】:
【参考方案3】:我在我的 Access 数据库中经常使用 MySQL 链接表,尽管我使用 ADO 连接而不是 ODBC。
但是最近在一个新项目中,我链接到了一个新数据库 - 一个 Web 后端 MySQL - 链接很好 - 测试连接很好 - 但是 1 个特定的表链接很好,但尝试打开它 - MS Access 立即被删除 - 我的在我的任何数据库中从未见过使用 ODBC 链接。 ODBC 链接的美妙之处在于它使用 DAO 而不是 ADO,并且您可以将表视为本地表 - 甚至不会在此特定表上成为 ADO 出错 - 但没有提供错误代码以提供帮助。
解决了问题 - 此表有 2 个 JSON 类型的字段(实际上只是长文本),但 Access 被杀死了 - 即使使用最新的驱动程序 8.0
幸运的是,我与 Web 开发人员联系,这是一个定制的数据库,但 JSON 字段没有被使用 - 所以他将它们转换为长文本 - 瞧 - MS Access 再次非常高兴。
虽然我没有解决的烦人的事情是链接表将内容显示为#DELETED# - 并且需要 F5 刷新才能填充 - 尽管使用驱动程序 8.0 这不起作用。
但是,ADO 很高兴,并且作为本地表的复制和粘贴链接非常有效。
【讨论】:
以上是关于加载包含链接的 sql server 表的 mdb 时 ms 访问崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在.NET中使用访问(mdb)链接表与sql server时,oledb提供程序的替代方法是啥