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.
Erros de Event-Related
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.