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.
Erros Relacionados ao Evento
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.