【发布时间】:2014-10-07 05:35:03
【问题描述】:
在使用 MS Access 表单作为某些 SQL 数据库前端的应用程序中,我使用 DBEngine.CreateWorkspace 获取工作区,然后使用 workspace.OpenDatabase 通过定义的 ODBC 系统 DSN 连接到我的远程 SQL 服务器。这一切都很好,直到有人断开远程 SQL 机器与网络的连接,或者关闭它,或者其他类似荒谬的事情。 (注意:我知道这个设置有很多可笑之处,但不幸的是,在这一点上这是不可避免的)
我的问题是: 有没有办法优雅地处理 VBA 代码中出现的超时和随后出现的“SQL Server 不存在或访问被拒绝”错误消息? workspace.OpenDatabase 会抛出一个我可以捕捉和处理的错误,但不会在两个弹出窗口出现并停止我的 VBA 代码之前,直到操作员单击 OK。
DoCmd.SetWarnings False 不会影响它,因为错误弹出窗口实际上并非来自 Access 本身 - 我认为它们来自底层 ODBC 进程或驱动它的 Jet Engine。
有什么想法吗?
【问题讨论】:
-
在您尝试连接之前,您是否重新启动了 SQL Server 并且它当前是否正在运行?
-
不,我知道它没有运行 - 这就是我试图在代码中捕获的内容。这不是“确保 SQL 服务器正在运行”的问题,而是“如果 SQL 服务器没有运行,我该如何优雅地从中恢复?”
-
错误应该来自连接字符串,因为服务器没有运行。我想你把它放在 try and catch 块上。
-
我在那里有 vba 错误处理,我可以捕获由 workspace.OpenDatabase 引发的错误 - 我的问题是在捕获该错误之前,会弹出两个弹出窗口并要求在代码之前单击可以继续。我想抑制这些特定的弹出窗口,以便我的错误处理可以继续工作。
标签: sql vba ms-access odbc jet