我正在运行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消息框。
现在有两种方法可以解决这个问题,在任何一种情况下我都认为不是用户友好的。
我创建了一个捕获ODBC错误的函数,这就是:
ODBC错误号:0
错误说明:[Microsoft] [ODBC SQL Server驱动程序]通信链接失败
ODBC错误号:3146
错误说明:ODBC - 调用失败。
因此,如果出于某种原因,我需要在我的SQL服务器上重新启动SQL服务器或终止进程(Active Connection),而Access Application当前通过ODBC连接,通过ODBC创建的对象将无法正常执行,直到我执行如上所述的2种解决方案。
有人可以就解决方案提出一些建议吗?我很欣赏任何见解。
答案 0 :(得分:0)
前一段时间我问了一个类似的问题,从来没有得到满意的答案。我原来的问题是:Force SET IDENTITY_INSERT to take effect faster from MS Access
ACE的注册表设置documented here控制超时行为:
ConnectionTimeout :高速缓存连接在超时前保持空闲的秒数。默认值为600(值为REG_DWORD类型。)
因此,作为第三种解决方法(除了您已经列出的两种)之外,您可以将该注册表设置更改为更短的超时(例如10秒)。这是我在答案中采用的方法。需要注意的是,缩短超时可能会导致性能或其他问题。您的里程可能会有所不同。
有关详细信息,请参阅原始问题full answer。