正在捕获到SQL Server链接表的Microsoft Access ODBC连接错误



我有一个小的Access应用程序,它带有到SQL Server的链接表,我在几个不同的站点使用,因此SQL服务器名称,有时SQL数据库和odbc连接名称因站点而异。然而,他们使用Access Runtime来使用它,因此在没有完整版本的情况下无法重新链接表。我正在努力寻找一种方法来捕捉任何ODBC连接错误,然后通过键入ODBC连接名称等来为他们提供重新链接表的选项,然后通过VBA代码重新链接,我认为这是可能的。(http://www.access-programmers.co.uk/forums/showthread.php?t=143180例如)

数据库会立即加载到链接表上具有记录源的表单上,因此如果可能的话,它需要捕获该表单上的错误。我想我可以添加一个带有按钮的主菜单来重新链接那里的表格,但我更喜欢避免引入需要用户额外点击的菜单形式。

我已经找到了这些文章,但我无法在表单的On Error事件中捕捉到最初的odbc连接失败,我也尝试了Activate事件。如有任何建议,我们将不胜感激!

http://support.microsoft.com/kb/209855

http://www.access-programmers.co.uk/forums/showthread.php?t=198039

从其中一个链接表中提取连接信息,并尝试用它打开ADO连接。您可以根据需要调整ConnectionTimeout属性。

链接的ODBC连接信息可从TableDef.Connect属性获得。

CurrentDb.TableDef("link name").Connect

理想情况下,您可以从该字符串的开头丢弃"ODBC;",并将其余部分用于ADO连接字符串。但如果你的方法不能简单地工作,你可以Split()";"上的字符串,并使用你需要的片段。

我包含了一个打开ADO连接的代码大纲;你需要完善它。然后你可以从启动表单调用它。如果连接成功,请打开主表单。如果连接失败,请打开请求重新链接所需信息的表单。

Dim cn As Object
Dim strConnect As String
On Error GoTo ErrorHandler
    strConnect = Mid(CurrentDb.TableDefs("link name").Connect, 6)
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = strConnect
    cn.ConnectionTimeout = 5 ' in seconds
    cn.Open
    Debug.Print "success"
    cn.Close
    Set cn = Nothing
ExitHere:
    Set cn = Nothing
    On Error GoTo 0
    Exit Sub
ErrorHandler:
    Debug.Print "failed"
    GoTo ExitHere

最新更新