web 2.0


Curso Excel 2003 sobre ADO e ADOX (ActiveX Data Objects) - Parte 5

CURSO ADO e ADOX COMPLETO

 

Caso você ainda não tenha lido a quarta parte, você pode acessá-la em ADO ADOX (ActiveX Data Objects).


2.7.     Tratamento de Erros

Dada a natureza estrita de um banco de dados será impossível ter um código infalível, portanto, é importante que o leitor saiba tratar os erros que possam aparecer para que possíveis problemas sejam resolvidos.

No código anterior possuo um tratamento de erro, embora não o use em todos os exemplos deste curso para não ser pedante com cada código escrito.

Geralmente utilizamos as seguintes instruções para lidar com os erros:

·         On Error GoTo “Rótulo”

·         On Error Resume Next

No primeiro caso, quando o erro ocorre o código é remitido para um rótulo dentro da rotina, por exemplo:

Sub RecordsetLike(ByVal strBusca As String, ByVal Tipo As String)

   

    On Error GoTo Err_Handler

'   Código a ser executado entra aqui

 

    Exit Sub

 

Err_Handler:

    MsgBox Err.Description, vbCritical, Err.Number

    Resume Limpar

End Sub

Note que antes do rótulo há a instrução Exit Sub. Esta instrução se faz necessária para evitar a execução do código logo abaixo do rótulo. Esta parte somente é executada quando há um erro.

O leitor pode ou não definir uma mensagem personalizada, mas se o erro é imprevisível o melhor e deixar em aberto a questão e passar a descrição do erro e o número do erro como é feito no exemplo acima.

Uma outra forma de tratar o erro é utilizar a segunda instrução conforme abaixo:

Sub RecordsetLike(ByVal strBusca As String, ByVal Tipo As String)

   

    On Error GoTo Err_Handler

   

'   Código a ser executado entra aqui

   

Limpar:

    On Error Resume Next

    rs.Close

    Set rs = Nothing

    Exit Sub

 

Err_Handler:

    MsgBox Err.Description, vbCritical, Err.Number

    Err.Clear

    Resume Limpar

End Sub

On Error Resume Next instrui o VBA a continuar a operação em caso de erro. O leitor precisa notar duas coisas aqui:

1.Adição da linha Err.Clear à Adiciono esta linha para limpar o erro causado antes do rótulo Limpar. O motivo para isso é que acima nós resumiremos o código neste ponto após o primeiro erro porém...

2.... Ao resumir no rótulo Limpar caso o primeiro erro tenha sido na abertura do recordset nós não teremos nenhum recordset para fechar o que causaria novo erro (conforme figura abaixo). Então, nós limpamos o erro antes de seguirmos para o rótulo Limpar e ali instruímos o código a continuar em caso de novo erro. Se não fizermos isso, entramos em um loop eterno na primeira instrução On Error GoTo:

Figura 25 Erro retornado ao tentar fechar recordset que ainda não foi aberto

Obviamente que apenas passar a mensagem ao usuário não resolve o seu caso, pois você deseja saber o que está ocorrendo e caso o problema seja no código, você quererá corrigi-lo para evitar recorrência dos problemas.

Como estamos lidando com um banco de dados, talvez a melhor forma de fazermos isso seja através de uma tabela onde “logamos” os erros os quais são futuramente analisados e caso sejam problemas no código os mesmos sejam retificados.



CURSO ADO e ADOX COMPLETO

 

Tags: , , , , ,

Microsoft Office | VBA

Os comentários estão fechados