ADODB连接上的VBA错误处理。打开

ADODB连接上的VBA错误处理。打开,vba,adodb,Vba,Adodb,我在VBA中有一个ADODB连接,用于连接SQLServer数据库。我想捕获调用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 d

我在VBA中有一个ADODB连接,用于连接SQLServer数据库。我想捕获调用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”捕获

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


谢谢你的帮助。欢迎提供任何建议。

不确定是否是这样,但在VBE窗口中,确保“工具…”选项…”常规…”错误捕获选项设置为“在未处理错误时中断”。如果将其设置为“在所有错误时中断”,则可能会绕过处理程序。

尝试使用以下方法,在此处工作:

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

谢谢,这解决了我的问题。您知道我是否可以通过某种方式强制用户使用此设置吗?否则,当我“发布”我的应用程序时,我将遇到问题。也许可以检查设置是什么?再次感谢您的帮助。我不知道,但我想您可以在这里找到: