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


2 participantes

    Repasse de Erro Entre Funções

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    Repasse de Erro Entre Funções Empty Repasse de Erro Entre Funções

    Mensagem  DamascenoJr. 18/1/2022, 04:33

    Depois de um tempo programando você começa a criar e fragmentar funções e procedimento para reaproveitá-los. Naturalmente, uma função (nível 1) pode chamar outra (nível 2) que pode chamar outra (nível 3) que pode chamar outra (nível 4)... e por aí vai. Todavia, quando um erro ocorre nesse emaranhado de funções como o código deve proceder?

    Quando um erro ocorre, o VBA perdoa fácil. Isto é, o VBA procura o primeiro tratamento de erro existente e faz o que tem que fazer, e após isso é "vida que se segue". Em outras palavras: um erro ocorrido no nível 3 (que pode não ter tratamento), usará o tratamento de erro do nível 2, e o nível 1 nunca ficará sabendo das faltas que ocorreram. Tudo poderia ser resolvido tratando todo o erro no nível 3, certo? Errado! E se eu precisar além de tratar o erro no nível 3, relatar o erro ao nível 2 para que ele prossiga com sua rotina ciente que algo não correu como esperado?

    O que quero dizer é que e eu posso precisar que cada função individual primeiro finalize suas pendências e relate o erro ao nível imediatamente superior para que um tratamento adequado seja dado àquela falha que ocorreu.

    Bom... essa é a finalidade deste exemplo.

    Código:
    Public Sub fncCliqueiEmUmBotao()
    On Error GoTo trataErro

        'verifica campos obrigatórios
       
        Call fncSalvaUmCadastro
       
    sair:
        On Error Resume Next
        Exit Sub
       
    trataErro:
        'erros dentro desta função ou de funções de nível inferiores farão com esta parte da tratativa seja executada
        Select Case Err.Number
            Case Else
                Call MsgBox("Erro nº: " & Err.Number & String(2, vbNewLine) & "Origem: " & Err.Source & String(2, vbNewLine) & "Descrição: " & Err.Description, vbCritical, "Erro")
        End Select
       
    End Sub

    Private Sub fncSalvaUmCadastro()
    On Error GoTo trataErro

       
        Dim objErro(1 To 3) As String
       
        'abre a conexão
        'inicia um procedimento de salvamento
        'um erro acontece, indo para o ponto trataErro
        MsgBox 1 / 0
       
    sair:
        On Error Resume Next
        'fecha a conexão quando tudo corre bem
        Exit Sub
       
    trataErro:
        'salva informações do erro
        objErro(1) = Err.Number
        objErro(2) = Err.Source
        objErro(3) = Err.Description
       
       
        On Error Resume Next
        'executa procedimentos necessários de fechamento de conexão
        'fecha a conexão
       
        'retira tratamento de erros
        On Error GoTo 0
        'causa o erro novamente, só que agora fechou o que tinha que fechar
        'e erros causados serão repassados para a função que chamou
        Call Err.Raise(objErro(1), objErro(2), objErro(3))

    End Sub


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    pcnet e thiagonsilvaa gostam desta mensagem

    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7920
    Registrado : 15/03/2013

    Repasse de Erro Entre Funções Empty Re: Repasse de Erro Entre Funções

    Mensagem  Alvaro Teixeira 10/4/2022, 18:25

    Olá Ivan Damasceno,

    Sempre a partilhar novo conhecimento.
    Obrigado, o fórum agradece.

    Abraço

    DamascenoJr. gosta desta mensagem

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    Repasse de Erro Entre Funções Empty Re: Repasse de Erro Entre Funções

    Mensagem  DamascenoJr. 10/4/2022, 20:19

    Very Happy


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado


    Repasse de Erro Entre Funções Empty Re: Repasse de Erro Entre Funções

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 11/5/2024, 05:40