另一个ODBC调用失败主题

时间:2011-10-31 15:47:42

标签: sql-server ms-access odbc pass-through

我正在运行Access 2010 FE和SQL Server 2005 BE。 我可以通过使用DSNless连接成功执行对SQL Server的查询传递。

在我的测试阶段,有时我需要恢复我的数据库以恢复原始记录,这样我就可以重新运行查询传递。我发现当我运行遍历查询时,它会在我的SQL Server上创建一个活动连接。我在MANAGEMENT |下通过SQL Server管理控制台看到了连接SQL Server日志| Activity Monitor,选择查看进程。在那里,我可以看到正在使用哪个进程ID以及在我运行查询时谁在使用它。

现在我恢复数据库的唯一方法是杀死进程,例如有效连接

现在当我恢复数据库并重新运行传递查询时,我收到一个ODBC - Call Failed消息框。我试图运行一个程序来刷新我的querydef但是没有用,当我点击这些对象时,我仍然会得到ODBC-- Call Failed消息框。

现在有两种方法可以解决这个问题,在任何一种情况下我都认为不是用户友好的。

  • 重新启动我的访问应用程序
  • 等待约5-10分钟重新运行“通过查询”

我创建了一个捕获ODBC错误的函数,这就是:

ODBC错误号:0
错误说明:[Microsoft] [ODBC SQL Server驱动程序]通信链接失败

ODBC错误号:3146
错误说明:ODBC - 调用失败。

因此,如果出于某种原因,我需要在我的SQL服务器上重新启动SQL服务器或终止进程(Active Connection),而Access Application当前通过ODBC连接,通过ODBC创建的对象将无法正常执行,直到我执行如上所述的2种解决方案。

有人可以就解决方案提出一些建议吗?我很欣赏任何见解。

1 个答案:

答案 0 :(得分:0)

前一段时间我问了一个类似的问题,从来没有得到满意的答案。我原来的问题是:Force SET IDENTITY_INSERT to take effect faster from MS Access

ACE的注册表设置documented here控制超时行为:

  

ConnectionTimeout :高速缓存连接在超时前保持空闲的秒数。默认值为600(值为REG_DWORD类型。)

因此,作为第三种解决方法(除了您已经列出的两种)之外,您可以将该注册表设置更改为更短的超时(例如10秒)。这是我在答案中采用的方法。需要注意的是,缩短超时可能会导致性能或其他问题。您的里程可能会有所不同。

有关详细信息,请参阅原始问题full answer