底线是我想尽可能优雅地处理网络断开连接。检测断开连接的Microsoft Access链接表
我有一个Microsoft Access应用程序使用链接表将数据从使用链接表的数据“分开”。所以,有两个msaccess数据库文件(一个UI和其他数据)。这两个数据库都位于我们的内部网络上,并且UI使用链接表链接到数据。这是一个非常标准的设置。
代码中只有一个位置,我想要这种优雅的断开逻辑(这是SQL UPDATE执行时)。我认为这会像一些错误处理一样简单。但是,Microsoft Access有时会假装成功!
这里有一个窗口,进入我的世界:
On Error GoTo ErrorHandler:
Call CurrentDb.Execute("UPDATE [Thing] SET [Length]=5 WHERE [ID]=1;", dbFailOnError)
On Error GoTo 0
...(continued code)...
ErrorHandler:
fSuccess = False
Resume Next
我启动的应用程序,拔掉我的网线(不,无线网络不上),但有时错误处理不会发生,即使它并没有实际更新!为了澄清,何时断开连接,我希望此更新失败,并且我想检测它!
我一直在试图解决Access这样对我说谎。我试过的越多,越绝望的我已经成为:
- 的第一件事情,我注意到的是,如果我与调试器步将正确可靠失败。虽然这对我没有帮助。
- 我试过检查更新操作的RecordCount,但是当它假装成功时,它确实设置为1!
- 我试着做一个后续的SELECT语句来查看UPDATE是否真的发生了。尽管如此,即使我在UPDATE中放入了一个随机数,访问也会返回正确的结果。
- 我已经通过Access对象(如CurrentDb和TableDefs)寻找任何可靠的指示,表明它正在“脱机模式”或“缓存模式”下工作。我找不到任何指标。这对我很有帮助。
- 无论连接还是断开,链接表的RecordCount始终为-1。
- 我有断开并重新连接关联的TableDef通过修改和修复“连接”连接字符串。访问声称它重新连接好。
我不明白我看到的行为。 MSAccess是否在连接数据的某个缓存下运行?如果是这样,为什么它只能工作有时?如果他们真的有一些复杂的离线缓存模式,为什么没有记录在任何地方?不幸的是,我不允许在工作时喝酒。
+1为您的最后一句话。 (但是,问题的其余部分也值得+1。) – 2013-04-10 17:24:34
您是否使用'dbFailOnError'参数? – Scotch 2013-04-10 19:41:27
是的。对不起,我不清楚,我简化了这个例子,因为完整的代码有点麻烦。 – 2013-04-11 20:15:51