Compartilhar via


Erros do provedor

Aplica-se ao: Access 2013, Office 2013

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

A coleção de erros do ADO

Como uma determinada operação do ADO pode produzir vários erros de provedor, o ADO expõe uma coleção de objetos de erro através do objeto Connection. Essa coleção não conterá nenhum objeto se uma operação for concluída com êxito e conterá um ou mais objetos Error se algo der errado e o provedor tiver gerado um ou mais erros. Examine cada objeto de erro individual para determinar a cauxa exata do erro.

Quando terminar o tratamento dos 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 os métodos 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. Limpando a coleção explicitamente, você terá certeza de que todos os objetos Error na coleção não foram deixados por uma operação anterior.

Algumas operações podem gerar avisos e erros. Os avisos também são representados por objetos Error na coleção Errors. 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 produzido por uma determinada operação. Se a contagem for um ou maior, um objeto Error terá sido adicionado à coleção. Depois de ter determinado que a coleção Errors contém erros ou avisos, você poderá percorrer a coleção e recuperar informações sobre cada objeto Error que ela contém. O breve exemplo em Visual Basic a seguir 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. Nesse exemplo, ele simplesmente acumula uma mensagem para exibição. Em um programa em funcionamento, você escreveria o código para executar uma tarefa apropriada para cada erro, como fechar todos os arquivos abertos e encerrar o programa de maneira ordenada.

O objeto Error

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

Nome da propriedade

Descrição

Descrição

Um texto de descrição do erro que ocorreu.

HelpContext, HelpFile

Referem-se ao tópico da Ajuda e ao arquivo da Ajuda que contêm uma descrição do erro que ocorreu.

NativeError

O número do erro específico do provedor.

Número

Um Long Integer que representa o número (listado no ErrorValueEnum) do erro que ocorreu.

Fonte

Indica o nome do objeto ou aplicativo que gerou um erro.

Sqlstate

Um código de erro com cinco caracteres que o provedor retorna durante o processo de uma instrução SQL.

O objeto Error do ADO é bastante semelhante ao objeto 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 do provedor que você está usando. No exemplo anterior, o provedor era o Microsoft OLE DB Provider for SQL Server, então NativeError conterá erros específicos do SQL Server. A propriedade SQLState tem um código com 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 um erro ocorreu no processo que gerou um evento do ADO verificando o objeto Error passado como um parâmetro do evento.

Se a operação que causa um evento é 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 teve êxito, o parâmetro adStatus é definido como adStatusErrorsOccurred. Nesse caso, o parâmetro pError conterá um objeto Error que descreve o erro.