Partilhar via


Erros do provedor

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

A coleção de erros do ADO

Como uma operação ADO específica pode produzir vários erros de provedor, o ADO expõe uma coleção de objetos de erro por meio do objeto Conexão. Esta coleção não contém objetos se uma operação for concluída com êxito e conterá um ou mais objetos Error se algo der errado e o provedor gerar 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, UpdateBatchou 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 objetos de erro na coleção não foram deixados 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 Erros. Quando um provedor adiciona um aviso à coleção, ele não gera um erro em tempo de execução. Verifique a propriedade Count da coleção Errors para determinar se um aviso foi gerado por uma operação específica. Se a contagem for uma ou maior, um objeto Error será adicionado à coleção. Assim que você determinar que a coleção Erros contém erros ou avisos, você pode percorrer a coleção e recuperar informações sobre cada objeto Erro que ela contém. 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 Erros. Neste exemplo, ele acumula uma mensagem para exibição. Em um programa de trabalho, você escreveria código para executar uma tarefa apropriada para cada erro, como fechar todos os arquivos abertos e desligar o programa de maneira ordenada.

O objeto Error

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

Nome da propriedade Descrição
descrição Uma descrição de texto do erro que ocorreu.
ContextoDeAjuda, ArquivoDeAjuda Refere-se ao tópico da Ajuda e ao arquivo de Ajuda que contém uma descrição do erro que ocorreu.
ErroNativo O número de erro específico do provedor.
Número Um Inteiro Longo que representa o número (listado no ErrorValueEnum) do erro que ocorreu.
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 de Erro do ADO é muito semelhante ao objeto de Err do Visual Basic padrão. Suas propriedades descrevem o erro que ocorreu. 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 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 Erro também é usado quando ocorrem erros relacionados a eventos. Você pode determinar se ocorreu um erro no processo que gerou um evento do ADO verificando o objeto Error passado como um 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 tiver sido bem-sucedida, o parâmetro adStatus será definido como adStatusErrorsOccurred. Nesse caso, o parâmetro pError conterá um objeto Error que descreve o erro.