1

我有一个小的 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

4

1 回答 1

2

从其中一个链接表中提取连接信息,并尝试打开与它的 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
于 2013-08-20T20:50:11.063 回答