2011-03-22 73 views
3

我在VBA中有一个用于连接到SQLServer数据库的ADODB连接。我想捕获连接时引发的错误.Open被调用并且给定的数据库无法访问。在ADODB连接上的VBA错误处理。打开

我的代码如下所示:

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显示,而不是由“对错误转到抓DBError”。

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

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

回答

5

不确定是否是这样,但在VBE窗口中确保工具...选项...常规...错误陷印选项设置为“断开未处理的错误”。如果它被设置为“突破所有错误”,这可能绕过你的处理程序。

+0

谢谢这个解决我的问题。你知道我是否可以强制用户以某种方式使用此设置?否则,当我“释放”我的应用程序时,我会遇到问题。也许检查什么设置设置?再次感谢你的帮助。 – PKeno 2011-03-24 07:01:00

+0

并不知道,但我想你会在这里找到它:http://msdn.microsoft.com/en-us/library/aa221603(v=office.11​​).aspx – tpascale 2011-03-24 18:09:00

0

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

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