USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  TRATAMENTO DE ERROS
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
Postada em 28/09/2012 12:37 hs            
No VB, devemos efetuar o tratamento de erro em cada evento, claro, que se torna impossível.
Tenho tido algumas dores de cabeça com isto, e cheguei a efetuar este tratamento para pelo menos aliviar isto. Evitamos em cada evento, trazer o MsGbox, etc.
Mas coloco aqui, e peço a alguma colega que tenha algo melhor que compartilhe, ou então vamos melhorar isto ai.

No evento coloque
Private Sub EVENTO()  ' QUALQUER EVENTO
    On Error GoTo erro
       ' aqui vai o código do evento    
       Exit Sub

erro:
       Call pegaERRO(Err.Number, Err.Description, Err.Source)
End Sub

Agora a Função:

Public Function pegaERRO(Numero As Long, Descricao As String, Gerado As String) As String
    pegaERRO = "Erro Número: " & Str(Numero) & vbNewLine & _
    "Descrição do erro: " & Descricao & vbNewLine & _
    "Gerado por: " & Gerado
    Screen.MousePointer = 0
    Beep
    smeN = MsgBox(pegaERRO, vbCritical + vbOKOnly, "Mensagem")
    Exit Function
End Function

Agora amigos, vamos melhorar isto.

vlu//

     
Treze
não registrado
ENUNCIADA !
Postada em 28/09/2012 13:40 hs   
Ramos não tem muito o que se melhorar, eu faço praticamente da mesma maneira, mas gero um arquivo .txt com o código tipo e a linha em que ocooreu, logico tem também data hora, nome do form, etc.

a diferença é que numero as linhas para identificar onde o erro ocorreu em tempo de execução.

   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
Postada em 28/09/2012 18:24 hs            
Treze é isto ai, já melhorou pra mim a sua dica.

vlu//
     
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
Postada em 01/10/2012 20:38 hs            
Treze, beleza amigo, coloquei a linha (Erl), e estou gerado um log, com tudo, ficou ótimo, obrigado.
vlu//
     
Tekki
Pontos: 2843 Pontos: 2843 Pontos: 2843
UBERLÂNDIA
MG - BRASIL
ENUNCIADA !
Postada em 07/10/2012 00:39 hs            
LCRamos, veja mais um exemplo.


Private Sub cmdLocalizar_Click()
On Error GoTo TrataErro 'Para gerenciar o erro, se ocorrer erro ele vai para o TrataErro
...
Exit Sub
TrataErro:
    If fcMensagemErro(Err.Number, Err.Description, Err.Source, Me.Caption, Screen.ActiveControl.Name) = True Then
        Unload Me
    Else
     Resume Next
    End If
End Sub



Option Explicit
Function fcMensagemErro(lErr As Long, sDescricao As String, sFunction As String) As Boolean

   ' 0 Zero é o valor padrão deo Err.Number
   ' De 0001 a 1000 Pre-Definidos pelo BasicScript -- 3129, 3146, 3148, 3276 também são erros padrões
   ' De 4000 a 4999 VBCritical    -  VBOkOnly
   ' De 5000 a 5999 VBQuetion     -  VBYesNo
   ' De 6000 a 6999 VBExclamation -  VBOkOnly
   ' De 7000 a 7999 VBInformation -  VBOkOnly (menos 7001)
   ' 9998 para não gerar mensagem de erro, Retorna True
   ' 9999 para não gerar mensagem de erro, Retorna False
   ' 7001 VBInformation -  VBOkOnly Trata casos duplicados
On Error GoTo TrataErro

If lErr <> 0 Then
   Select Case lErr
      Case Is < 4000 'BasicScript
         MsgBox "ERRO" & vbCrLf & vbCrLf & _
                "Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Número...: " & lErr & vbCrLf & _
                "Function/Sub.: " & sFunction, vbCritical + vbOKOnly

      Case Is = 4000 'Critical
         MsgBox "ERRO" & vbCrLf & vbCrLf & _
                "Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Número...: " & lErr & vbCrLf & _
                "Function/Sub.: " & sFunction, vbCritical + vbOKOnly

      Case Is = 5000 'Question
        If MsgBox("Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Function/Sub.: " & sFunction, vbQuestion + vbYesNo) = vbYes Then
           fcMensagemErro = True
        End If

      Case Is = 6000 'Exclamation
         MsgBox "INFORMATIVO" & vbCrLf & vbCrLf & _
                "Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Número...: " & lErr & vbCrLf & _
                "Function/Sub.: " & sFunction, vbExclamation + vbOKOnly

      Case Is = 7000, 7001 'Information
         MsgBox "INFORMATIVO" & vbCrLf & vbCrLf & _
                "Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Número...: " & lErr & vbCrLf & _
                "Function/Sub.: " & sFunction, vbInformation + vbOKOnly

      Case Is = 9998
        'Não gerar mensagem de erro e retrona True
         fcMensagemErro = True

      Case Is = 9999
        'Não gerar mensagem de erro e retrona False

      Case Else  'OTHES
         MsgBox "ERRO" & vbCrLf & vbCrLf & _
                "Descrição: " & sDescricao & vbCrLf & vbCrLf & _
                "Número...: " & lErr & vbCrLf & _
                "Function/Sub.: " & sFunction, vbCritical + vbOKOnly

   End Select
   Err.Clear
End If

Exit Function
TrataErro:
   MsgBox "ERRO" & vbCrLf & vbCrLf & _
          "Número...: " & Err.Number & vbCrLf & _
          "Descrição: " & Err.Description & vbCrLf & _
          "Function/Sub.: " & "fcMensagemErro", vbCritical + vbOKOnly
End Function

   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 08/10/2012 09:24 hs            
Tekki, muito bom, peguei o exemplo, este é completo, agora vou acrescentar os números de erros gerados pelo PostgreSQL.
Obrigado.

vlu//
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página