gpt4 book ai didi

sql-server - ODBC 调用失败 - 错误 3151

转载 作者:行者123 更新时间:2023-12-01 04:16:01 31 4
gpt4 key购买 nike

我们有一个从 Access 97 迁移到 Acces 2007 的 Access 数据库,其中包含一些链接表到 SQL Server 2008 数据库。
我们在 ODBC 管理器中使用文件 DSN。连接测试在那里工作正常。事实上,我们在 Access 2007 应用程序中有一个主窗体,它始终正确显示数据。

当我们执行执行以下调用的任务时会出现问题:
Dim dbs As Database

Dim rstAppend As Recordset

Set dbs = CurrentDb

Set rstAppend = dbs.OpenRecordset(strAccessTable, dbOpenDynaset, dbSeeChanges)

OpenRecordset 抛出错误号 3151 并随机出现,但它出现的频率很高。它是零星的。当我们没有收到错误时,任务工作正常。

  • 它并不总是发生,大多数情况下我们都很好。
  • 当它发生时,它会发生在所有后续尝试的任务中。我们必须关闭并重新打开 Access 数据库,并向上帝祈祷它可以工作。
  • 有时,刷新链接表管理器中的表可以解决问题,但其他人则不能。
  • 刷新链接表管理器时,我们有时会收到错误“ODBC--调用失败”。删除文件 DSN 并创建一个新文件可以解决问题。
  • 我们尝试了两种不同的驱动程序(SQL Server 和 SQL Server Native Client 10),但在这两种情况下问题仍然存在。
  • 我们还尝试将 Access 文件与 SQL Server 放在同一台机器上,但问题仍然存在。
  • 我们将所有查询的 ODBC 超时从 60 秒增加到 180 秒,但问题仍然存在。
  • 我们不必等待看到错误,它在执行任务后不到一秒钟就出现了。

  • 如果有人可以帮助我们找到解决此问题的方法,我们将非常高兴。

    最佳答案

    经过两个月的研究,我们找到了一个解决方案,从 DAO 改为 ADO。这是MS给我的答案:

    我想让您知道,实现变通方法(使用 ADO 而不是 DAO)可能比试图找出 DAO 似乎不起作用的原因耗时更少。
    因此,建议使用变通方法,而不是试图找到此问题的根本原因,尤其是因为它似乎不可重现。

    然而;这是我接下来希望你做的:

  • 请用系统或用户 DSN 替换文件 DSN。
  • 使用 SQL Server 的“普通”ODBC 驱动程序而不是 native 驱动程序。
  • 创建用户 DSN 后重新链接所有表。
  • 在 VBA 代码中,仅使用显式类型声明而不是隐式声明。所以请更换使用 DAO。在任何数据库类型声明之前,以显式创建 DAO 对象。例如替换以下内容:

    Dim dbs 作为数据库
    Dim rstAppend As Recordset
    经过
    Dim dbs As DAO.Database
    Dim rstAppend As DAO.Recordset
  • 关于sql-server - ODBC 调用失败 - 错误 3151,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787484/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com