Mensagem
  • Kunena is not installed or the installed Kunena version is not supported. The plug-in has now been disabled. Please install/upgrade Kunena to version 1.7 for the Kunena Discuss Plug-in to function properly.

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

2.7.1. Criando o log de Erros em um banco de dados

A primeira coisa que precisamos fazer é construir a nossa tabela no Access. Adicione uma nova tabela chamada tblErrLogs com os campos a seguir:


Figura 2 6 Estrutura da tabela de log de erros

Caso o leitor queira, modifique a propriedade da tabela para Oculta evitando que ela fique visível na janela do banco de dados. Feito isso nós estamos prontos para escrever o nosso código.

O código a seguir gera três tipos diferentes de erros no Excel, mais uma opção sem erro:

Sub Gerarerros()  
    Dim rs          As New ADODB.Recordset   
    Dim cn          As New ADODB.Connection   
    Dim n           As Long
    Dim Tipo        As Long  
    Dim strErrMsg   As String   

    Randomize    Tipo = Int((4 - 1 + 1) * Rnd + 1)       

    On Error GoTo Err_Handler   
    Select Case Tipo      
      Case 1          
          n = Rnd() * 100 / 0      
      Case 2          
          rs.Close      
      Case 3          
          cn.Open      
      Case Else          
          MsgBox "Nenhum erro ocorreu", vbInformation   
   End Select
Limpar:   
   On Error Resume Next   
   rs.Close   
   cn.Close   
   If Err <> 0 Then Call logErros(Err)     
   Exit Sub
Err_Handler:  
   strErrMsg = vbCr & vbCr & "Este erro será logado para avaliação."  
   MsgBox Err.Description & strErrMsg, vbCritical, Err.Number  
   Call logErros(Err)  
   Err.Clear  
Resume Limpar
End Sub

 

Sub logErros(ByVal Erro As ErrObject)

Dim cnLog       As New ADODB.Connection
Dim rsLog       As New ADODB.Recordset

'   Caso voce efetue qualquer modificacao na estrutura do banco de dados
'   seja ela em um formulário, tabela, consulta ou VBA, o banco de dados
'   será travado e esta rotina gerará um erro. Portanto, é necessário
'   "ON ERROR RESUME NEXT" next rotina ou o fechamento e abertura
'   do banco de dados antes de procedermos com os testes. Em caso de erro
'   nesta rotina as informacoes nao serao logadas.  

cnLog.Open strCn

With rsLog
.Open "tblErrLogs", cnLog, adOpenForwardOnly, adLockPessimistic, adCmdTable
.AddNew
  !ErrDesc = Erro.Description
  !ErrNumber = Erro.Number
  !Data = Now()
  .Update
.Close
End With

cnLog.Close
Set rsLog = Nothing
Set cnLog = Nothing

End Sub


O leitor pode agora executar o código e visualizar como os erros são logados na tabela de erros. No futuro, basta analisar esta tabela e verificar os erros e corrigi-los. Outro ponto que o leitor pode querer considerar é criar um campo para o nome da rotina onde o erro ocorreu originalmente facilitando ainda mais o debug futuro do projeto.