Compartilhar via


Erros do provedor

Quando ocorre um erro de provedor, um erro em tempo de execução de -2147467259 é retornado. Ao receber esse erro, verifique a coleção Errors do objeto ativo Connection, que conterá um ou mais erros que descrevem o que ocorreu.

A coleção Errors da ADO

Como uma operação ADO específica pode produzir vários erros de provedor, a ADO expõe uma coleção de objetos de erro por meio do objeto Connection. Essa coleção não contém objetos, se uma operação for concluída com êxito e contiver um ou mais objetos Error, caso algo dê errado e o provedor gere um ou mais erros. Examine cada objeto de erro para determinar a causa exata do erro.

Assim que terminar de lidar com os erros que ocorreram, você poderá limpar a coleção chamando o método Clear. É especialmente importante limpar explicitamente a coleção Errors, antes de chamar o método Resync, UpdateBatch ou CancelBatch em um objeto Recordset, o método Open em um objeto Connection ou definir a propriedade Filter em um objeto Recordset. Ao limpar a coleção explicitamente, você pode ter certeza de que os objetos Error na coleção não sobraram de uma operação anterior.

Algumas operações podem gerar avisos, além de erros. Os avisos também são representados por objetos Error na coleção Errors. Quando um provedor adiciona um aviso à coleção, não gera um erro em tempo de execução. Verifique a propriedade Count da coleção Errors, para determinar se um aviso foi produzido por uma operação específica. Se a contagem for um ou mais, um objeto Error será adicionado à coleção. Assim que você determinar que a coleção Errors contém erros ou avisos, pode iterar por meio da coleção e recuperar informações sobre cada objeto Error correspondente. O seguinte exemplo curto do Visual Basic demonstra isso:

' BeginErrorHandlingVB02  
Private Function DeleteCustomer(ByVal CompanyName As String) As Long  
    On Error GoTo DeleteCustomerError  
  
    rst.Find "CompanyName='" & CompanyName & "'"  
DeleteCustomerError:  
Dim objError As ADODB.Error  
Dim strError As String  
  
    If cnn.Errors.Count > 0 Then  
        For Each objError In cnn.Errors  
            strError = strError & "Error #" & objError.Number & _  
                " " & objError.Description & vbCrLf & _  
                "NativeError: " & objError.NativeError & vbCrLf & _  
                "SQLState: " & objError.SQLState & vbCrLf & _  
                "Reported by: " & objError.Source & vbCrLf & _  
                "Help file: " & objError.HelpFile & vbCrLf & _  
                "Help Context ID: " & objError.HelpContext  
        Next  
        MsgBox strError  
    End If  
End Function  
' EndErrorHandlingVB02  

A rotina de tratamento de erros inclui um loop For Each, que examina cada objeto na coleção Errors. Neste exemplo, ela acumula uma mensagem para exibição. Em um programa de trabalho, você gravaria o código para executar uma tarefa apropriada para cada erro, como fechar todos os arquivos abertos e desligar o programa regularmente.

O Objeto Error

Examinando um objeto Error, você pode determinar qual erro ocorreu e, o mais importante, qual aplicativo ou qual objeto causou o erro. O objeto Error tem as seguintes propriedades:

Nome da propriedade Descrição
Descrição Uma descrição de texto do erro ocorrido.
HelpContext, HelpFile Refere-se ao tópico de Ajuda e ao arquivo de Ajuda que contêm uma descrição do erro ocorrido.
NativeError O número do erro específico de provedor.
Número Um Inteiro Longo que representa o número (listado no ErrorValueEnum) do erro ocorrido.
Origem Indica o nome do objeto ou aplicativo que gerou um erro.
SQLState Um código de erro de cinco caracteres que o provedor retorna durante o processo de uma instrução SQL.

O objeto Error da ADO é muito semelhante ao objeto Err do Visual Basic padrão. Suas propriedades descrevem o erro ocorrido. Além do número do erro, você também recebe duas informações relacionadas. A propriedade NativeError contém um número de erro específico para o provedor que você está usando. No exemplo anterior, o provedor é o Provedor do Microsoft OLE DB para SQL Server. Portanto, NativeError conterá erros específicos do SQL Server. A propriedade SQLState tem um código de cinco letras que descreve um erro em uma instrução SQL.

O objeto Error também é usado quando ocorrem erros relacionados a eventos. Você pode determinar se ocorreu um erro no processo que gerou um evento da ADO, verificando o objeto Error passado como parâmetro de evento.

Se a operação que causa um evento for concluída com êxito, o parâmetro adStatus do manipulador de eventos será definido como adStatusOK. Por outro lado, se a operação que gerou o evento não for realizada com êxito, o parâmetro adStatus será definido como adStatusErrorsOccurred. Nesse caso, o parâmetro pError conterá um objeto Error que descreve o erro.