【问题标题】:Catching Microsoft Access ODBC connection errors to SQL Server linked tables捕获与 SQL Server 链接表的 Microsoft Access ODBC 连接错误
【发布时间】:2013-08-20 13:02:53
【问题描述】:

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

【问题讨论】:

    标签: sql-server vba ms-access odbc ms-access-2010


    【解决方案1】:

    从其中一个链接表中提取连接信息,并尝试打开与它的 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
    

    【讨论】:

    • 听起来可以,谢谢,会去报告的
    • 非常有魅力,非常感谢!对于未来的读者,这是我提取连接字符串和剥离 ODBC 的最终代码:从前面:strConnect = CurrentDb.TableDefs("tablename").Connect strConnect = Right(strConnect, Len(strConnect) - 5)
    • @eboyens 很高兴听到这个消息,谢谢。我更新了使用Mid 从TableDef.Connect 属性中提取所需部分的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多