Sql server ODBC调用失败-错误3151
我们将Access数据库从Access 97迁移到Acces 2007,并将一些链接表迁移到SQL Server 2008数据库。 我们正在ODBC管理员中使用文件DSN。连接测试在那里运行良好。事实上,Access 2007应用程序中有一个主窗体,它始终正确显示数据 当执行进行以下调用的任务时,会出现问题:Sql server ODBC调用失败-错误3151,sql-server,ms-access,odbc,Sql Server,Ms Access,Odbc,我们将Access数据库从Access 97迁移到Acces 2007,并将一些链接表迁移到SQL Server 2008数据库。 我们正在ODBC管理员中使用文件DSN。连接测试在那里运行良好。事实上,Access 2007应用程序中有一个主窗体,它始终正确显示数据 当执行进行以下调用的任务时,会出现问题: Dim dbs作为数据库 Dim rstAppend为记录集 设置dbs=CurrentDb Set rstAppend=dbs.OpenRecordset(strAccessTable、
Dim dbs作为数据库
Dim rstAppend为记录集
设置dbs=CurrentDb
Set rstAppend=dbs.OpenRecordset(strAccessTable、dbOpenDynaset、dbSeeChanges)
OpenRecordset抛出错误号3151并随机出现,但出现频率相当高。这是零星的。当我们没有得到错误时,任务工作正常
如果有人能帮助我们找到解决此问题的方法,我们将非常高兴。需要注意的一点是工作站网络配置中的DNS设置(DNS而不是DSN!) 几年前,我有一个客户机,他遇到一些用户的ODBC断线,结果发现主DNS设置为指向Internet提供商的DNS。这在互联网上运行良好,但ISP对客户端的SQL Server内部IP地址一无所知。将主DNS更改为指向本地域控制器(充当本地DNS)永久解决了该问题
这可能不是问题的原因,但值得一看。经过两个月的研究,我们找到了一个解决方案,从DAO改为ADO。这是史密斯女士给我的答案: 我想让您知道,实现变通方法(使用ADO而不是DAO)比试图找出DAO似乎不起作用的原因花费的时间要少。 因此,建议使用变通方法,而不是试图找到此问题的根本原因,尤其是因为它似乎不可复制 但是,;下面是我希望你接下来做的事情:
Dim rstAppend为记录集
通过
Dim dbs作为DAO.Database
Dim rstAppend为DAO.Recordset
在SQL Server ODBC驱动程序的客户端配置中,从TCP/IP切换到命名管道为我做到了这一点。我也遇到了这个问题。我所做的是在用户选项卡中将DSN添加到SQL数据库中。我注意到它在我的开发系统上工作,这是我能找到的唯一区别。在用户PC上创建DSN后,它工作了 以下内容是否提供了更多错误详细信息?ACC2000:如何捕获特定的ODBC错误消息您可以使用Errors集合捕获特定的开放数据库连接(ODBC)错误。但是,必须遍历集合中的所有元素才能访问ODBC错误信息。不要只引用错误号——请给出错误描述,因为其中包含的信息仅通过查找一般错误描述(“AccessError(3151):“ODBC--连接到“|”失败。”)是无法获得的。错误描述是“ODBC--连接到“DataseProduction1DSN”失败”。DataseProduction1DSN是我们在ODBC管理员中使用的文件DSN的描述。这里是屏幕截图:文件DSN不是有问题吗?为什么不使用无DSN连接?