【问题标题】:VBA Error handling on ADODB Connection.OpenADODB Connection.Open 上的 VBA 错误处理
【发布时间】:2011-03-22 22:42:13
【问题描述】:

我在 VBA 中有一个用于连接 SQLServer 数据库的 ADODB 连接。我想捕捉在 connection.Open 被调用时引发的错误,并且给定的数据库无法访问。

我的代码如下所示:

Public Function Connect() As Boolean

On Error GoTo DBError

    Dim dbServer As String
    Dim dbName As String
    Dim dbUser As String
    Dim dbPwd As String

    dbServer = DatabaseSettings.dbServer
    dbName = DatabaseSettings.dbName
    dbUser = DatabaseSettings.dbUser
    dbPwd = DatabaseSettings.dbPwd

    Dim connectionString As String
    connectionString = "Server=" & dbServer & ";Database=" & dbName & ";User Id=" & dbUser & ";Password=" & dbPwd

    Set conn = New ADODB.Connection
    conn.Provider = "sqloledb"
    With conn
        .ConnectionTimeout = 2
        .CursorLocation = adUseClient
        .Open connectionString
        .CommandTimeout = 0
    End With

Connect = True
Exit Function

DBError:
    Connect = False
End Function

我的问题是,当我尝试使用不正确的 connectionString 运行此代码时,会引发错误并显示在 MsgBox 中,并且不会被“On Error GoTo DBError”捕获。

我的错误处理代码是否有问题,或者我是否需要找到另一种方法来捕获此错误?

感谢您的帮助。欢迎提出任何建议。

【问题讨论】:

    标签: vba adodb


    【解决方案1】:

    不确定是不是这样,但在 VBE 窗口中确保工具...选项...常规...错误捕获选项设置为“在未处理的错误时中断”。如果它设置为“Break on All Errors”,这可能会绕过您的处理程序。

    【讨论】:

    • 谢谢这解决了我的问题。你知道我是否可以强制用户以某种方式进行此设置吗?否则,当我“发布”我的应用程序时,我会遇到问题。也许检查设置是什么?再次感谢您的帮助。
    • 暂时不知道,但我想你会在这里找到它:msdn.microsoft.com/en-us/library/aa221603(v=office.11).aspx
    【解决方案2】:

    尝试使用以下,在这里工作:

    With conn
        .ConnectionTimeout = 2
        .CursorLocation = adUseClient
        .ConnectionString = connectionString
        .Open 
        .CommandTimeout = 0
    End With
    

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多