4 Stimmen

VBA-Fehlerbehandlung bei ADODB Connection.Open

Ich habe eine ADODB-Verbindung in VBA zur Verbindung mit einer SQLServer-Datenbank. Ich möchte den Fehler abfangen, der ausgelöst wird, wenn connection.Open aufgerufen wird und die angegebene Datenbank nicht erreichbar ist.

Mein Code sieht folgendermaßen aus:

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

Mein Problem ist, dass wenn ich versuche, diesen Code mit einem falschen connectionString ausführen ein Fehler ausgelöst wird und in einer MsgBox angezeigt und nicht durch die "On Error GoTo DBError" gefangen.

Gibt es etwas falsch in meinem Fehlerbehandlung Code oder muss ich einen anderen Weg, um diesen Fehler zu fangen finden?

Ich danke Ihnen für Ihre Hilfe. Alle Vorschläge sind willkommen.

6voto

tpascale Punkte 2476

Ich bin nicht sicher, ob es daran liegt, aber stellen Sie im VBE-Fenster sicher, dass die Option Tools...Options...General...Error Trapping auf "Break on Unhandled Errors" eingestellt ist. Wenn die Option auf "Break on All Errors" eingestellt ist, werden Ihre Handler möglicherweise umgangen.

0voto

Tiago Cardoso Punkte 2029

Versuchen Sie, das unten stehende zu verwenden, das hier funktioniert:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X