MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    Nome do procedimento

    Macedo
    Macedo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 76
    Registrado : 22/09/2010

    Nome do procedimento Empty Nome do procedimento

    Mensagem  Macedo 9/5/2012, 16:01

    Ola pessoal, estou montando um tratamento de erro personalizado no meu sistema e queria saber como descobrir o nome do precedimento o qual ocorreu o erro ex:

    Private Sub Btn_Editar_Click()
    On Error GoTo Err_Btn_Editar

    tem como descobrir o nome "Sub Btn_Editar_Click"

    agradeço a todos.
    avatar
    Convidad
    Convidado


    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Convidad 9/5/2012, 16:08


    Olá

    Já queimei muito neurônio com isso, e inclusive postei esta questão aqui, mas concluí que não tem jeito.

    Aqui um tratamento de erro bem completo, mas sem retorno do nome do procedimento:

    http://maximoaccess.forumeiros.com/t6985-mensagem-para-tratamento-de-erros

    Macedo
    Macedo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 76
    Registrado : 22/09/2010

    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Macedo 9/5/2012, 16:25

    Ola Norberto muito bom seu tratamento de erros, mas eu queria justamente não envolver o usário nessa questão então desenvolvi um tratamento que grava tudo em um txt na rede:

    ' ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    ' LOG DE ERROS
    ' by M@cSys Mai, 2012 assismacedo@hotmail.com
    ' ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    Function GravaErro(intErroNumero As Integer, strDescricao As String, strFonte As String, StrForm As String, strObs As String)
    Dim F As Integer
    Dim file As String
    Dim fso
    Dim folder As String
    '
    folder = "Z:\Logs" ' caminho da pasta de log de erros
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(folder) Then
    MsgBox "Pasta de Log de Erros " & folder & "\ não encontrada." & vbCrLf & "Favor comunicar o Desenvolvedor", vbInformation, "Erro"
    Exit Function
    End If
    F = FreeFile
    file = folder & "\LogError" & Format(Date, "yyyymmdd") & ".log"
    Open file For Append As #F
    Print #F, "Data : " & Now
    Print #F, "Fonte : " & strFonte
    Print #F, "Origem : " & StrForm
    Print #F, "Maquina : " & Environ("Computername")
    Print #F, "Usuario : " & CurrentUser()
    Print #F, ""
    Print #F, "Erro número : " & intErroNumero
    Print #F, "Descrição : " & strDescricao
    Print #F, "Retorno : " & strObs ' aqui eu queria colocar o nome do procedimento porque na chamada da função eu não precisaria editar um por um
    Print #F, "-------------------------------------------------------"
    Print #F, ""
    Close #F
    MsgBox "Erro de processamento," _
    & vbCrLf & "Gravado no arquivo de Log" _
    & vbCrLf & "Comunicar com o desenvolvedor." _
    & vbCrLf & "Click em Ok e bom trabalho."
    End Function


    para chamar a função troque em: msgbox err.description por essa:

    Call GravaErro(err.Number, err.Description, err.Source, Me.Name, "Comando Nome do Procedimento onde ocorreu o erro")
    avatar
    Convidad
    Convidado


    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Convidad 9/5/2012, 16:38


    Certo. Muito legal seu código.
    Como disse no final do meu exemplo, dá pra personalizar...
    É só evitar a msgbox e jogar num txt.

    Até tenho este código que faz isso, mas não tive tempo ainda de adaptar:

    Código:
    ''Public function to write the error to the log. Returns 1 if successful
    Public Function fWriteErrorLog(ProcName As String, ModName As String, Optional BespokeErrorDesc As String) As FunctionOutcome
    'by:    pootle_flump

        Dim i As Integer
        Dim ErrNo As Long
        Dim ErrDesc As String
        Dim ErrSource As String
     
        ErrNo = Err.Number
        ErrDesc = Err.Description
        ErrSource = Err.Source
     
    On Error GoTo fWriteErrorLog_Error
    'fGetNextLogNo - private function that returns the next sequential log number
        i = fGetNextLogNo

    'Check that the fGetNextLogNo did not error
        If Not i = -1 Then
    'Open the error log for adding an error record. fGetLogPath is a private function returning
    'the error log file path
            Open fGetLogPath For Append Shared As #1
    'The error details and procedure\ module names and bespoke error description are added
            Write #1, i, Now(), ErrNo, ErrDesc, ErrSource, ProcName, ModName, BespokeErrorDesc
    'File is closed
            Close #1
    'Success returned
            fWriteErrorLog = Success
    '... it errored
        Else
    'Return failure
            fWriteErrorLog = Failure
        End If
       
    'Clean up
        Err.Clear
        Exit Function
     
    fWriteErrorLog_Error:
     
    'Return failure. Nothing more returned regarding errors as nothing more can be done.
        fWriteErrorLog = Failure
        Err.Clear
     
    End Function
     
    'fGetNextLogNo - private function that returns the next sequential log number
    Private Function fGetNextLogNo() As Integer
    On Error GoTo fGetNextLogNo_Error
     
        Dim i As Integer
        Dim strField As String
        Dim datField As Date
        Dim lngErrNo As Long
     
    'Open the log file for reading.fGetLogPath is a private function returning the error log file path
        Open fGetLogPath For Input Shared As #1
     
    'Loop through the entries to the end
        Do While Not EOF(1)
     
    'Attribute the sequential log number to i. All other variables are there just to hold the read values
            Input #1, i, strField, lngErrNo, strField, strField, strField, strField, strField
     
        Loop
     
    'Once the loop has completed, i = the last log number. So, the return is i+1
        fGetNextLogNo = i + 1
     
    'Clean up
        Close #1
     
        Exit Function
     
    fGetNextLogNo_Error:

    'File not found - the calling proc will create the file - the first record number should therefore be 1
        If Err.Number = 53 Then
           
            fGetNextLogNo = 1
       
        Else 'the error is unhandled - make the number return -1 (error) & clean up
           
            fGetNextLogNo = -1
     
        End If
       
        Close #1
     
    End Function
     
    'fGetLogPath is a private function returning the error log file path
    Private Function fGetLogPath() As String
     
    'Derive the log path from the data path
        fGetLogPath = Mid(Application.CurrentDb.Name, 1, InStrRev(Application.CurrentDb.Name, "\")) & "error_log.log"
     
    End Function
    '########################### END Writing errors to error log ###########################

    'Esta é a função chamada no tratamento de erros
    Sub RaiseTheError()
    On Error GoTo RaiseTheError_Error
       
    'Simulate an error
        Err.Raise 9999, "Error_Raising_DB", "An unlikely but devestating error"
       
    RaiseTheError_Exit:
       
        Exit Sub
       
    RaiseTheError_Error:

    'Attempt to handle error... but we can't
        If 1 = 0 Then
       
        Else
           
            Dim TheErr As String
           
            TheErr = Err.Description
           
    'So we call the error logging function.
            If fWriteErrorLog("RaiseTheError", "ErrorRaising") = Success Then
                   
                MsgBox "There has been an unhandled error: " & vbCrLf & vbCrLf & TheErr, vbInformation, "Unhandled Error"
               
            Else
               
                MsgBox "There has been an unhandled error: " & vbCrLf & vbCrLf & TheErr & vbCrLf & vbCrLf & _
                "THIS ERROR COULD NOT BE LOGGED PLEASE MAKE A " & vbCrLf & _
                " NOTE OF WHAT OCCURED PRIOR TO THE ERROR " & vbCrLf & _
                " AND CONTACT pootle_flump WITH THE DETAILS", vbInformation + vbCritical, "Unhandled Error"
               
            End If
       
        End If
           
        Resume RaiseTheError_Exit
       
    End Sub

    Entretanto, nos falta ainda o nome do procedimento. Sad
    Macedo
    Macedo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 76
    Registrado : 22/09/2010

    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Macedo 9/5/2012, 16:48

    Realmente Norberto "seria uma mão na roda", já imaginou pegar o nome do precedimento do erro fazer uma busca no projeto todo vc cai em cima do erro. e muitas vezes tendo o nome do precedimento que gerou o erro ja sabemos antecipadamente como corrigir.
    mas vamos garimpar na net se encontrar posto aqui pra vc. um abraço.
    avatar
    Convidad
    Convidado


    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Convidad 9/5/2012, 17:04


    Este é o tópico que postei a respeito.
    http://maximoaccess.forumeiros.com/t7031-resolvidoretornar-nomes-do-controle-e-do-evento-que-gerou-erro

    Se eu descobrir, também informo.

    Abraço!

    Conteúdo patrocinado


    Nome do procedimento Empty Re: Nome do procedimento

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 17:28