Compartilhar via


Erros de Runtime do ADO

Os erros de ADO são relatados ao programa como erros de tempo de execução. Você pode usar o mecanismo de captura de erros da linguagem de programação para aprisioná-los e lidar com eles. Por exemplo, no Visual Basic, use a instrução On Error. No Visual C++, depende do método que você está usando para acessar as bibliotecas do ADO. Com #import, use um bloco try-catch. Caso contrário, os programadores C++ precisam recuperar explicitamente o objeto de erro chamando GetErrorInfo. O subprocedimento do Visual Basic abaixo demonstra a captura de um erro do ADO:

' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError

'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider=sqloledb;" & _
    "Data Source=a-iresmi2000;" & _
    "Initial Catalog=Northwind;Integrated Security=SSPI"

' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn

' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn

' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn

Exit Sub

' Error handler
FormLoadError:
    Dim strErr As String
    Select Case Err
        Case adErrObjectOpen
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
            strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
            strErr = strErr & "Topic ID: " & Err.HelpContext
            MsgBox strErr
            Debug.Print strErr
            Err.Clear
            Resume Next
        ' If some other error occurs that
        ' has nothing to do with ADO, show
        ' the number and description and exit.
        Case Else
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            MsgBox strErr
            Debug.Print strErr
            Unload Me
    End Select
End Sub
' EndErrorHandlingVB01

Esse procedimento de evento Form_Load cria intencionalmente um erro tentando abrir o mesmo objeto Connection duas vezes. Na segunda vez em que o método Open é chamado, o manipulador de erros é ativado. Nesse caso, o erro é do tipo adErrObjectOpen, ou seja, o manipulador de erros exibe a seguinte mensagem antes de retomar a execução do programa:

Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705

A mensagem de erro inclui cada informação fornecida pelo objeto Err do Visual Basic, exceto pelo valor LastDLLError, que não se aplica aqui. O número do erro informa qual erro ocorreu. A descrição é útil em casos em que você não deseja lidar com o erro por conta própria. Você pode simplesmente repassá-lo ao usuário. Embora geralmente seja melhor usar mensagens personalizadas para seu aplicativo, não é possível antecipar todos os erros; a descrição dá alguma pista sobre o que deu errado. No código de exemplo, o erro foi relatado pelo objeto Connection. Você verá o tipo do objeto ou a ID programática aqui, não um nome de variável.

Observação

O objeto Err do Visual Basic contém apenas informações sobre o erro mais recente. A coleção Erros do ADO do objeto Connection contém um objeto Error para cada erro gerado pela operação ADO mais recente. Use a coleção Errors em vez do objeto Err para lidar com vários erros. Para saber mais sobre a coleção Errors, confira Erros do Provedor. No entanto, se não houver nenhum objeto Connection válido, o objeto Err será a única fonte de informações sobre erros do ADO.

Quais tipos de operações provavelmente causarão erros do ADO? Erros comuns do ADO podem envolver a abertura de um objeto, como Connection ou Recordset, a tentativa de atualizar dados ou a chamada de um método ou propriedade que não tem suporte do provedor.

Os erros do OLE DB também podem ser transmitidos ao seu aplicativo como erros de tempo de execução na coleção Errors.

O tópico a seguir fornece mais informações sobre erros do ADO.