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


    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    avatar
    Convidado
    Convidado


    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento Empty [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    Mensagem  Convidado 16/8/2013, 17:14

    Amigos.. tenho um código que possui tratamento de erro para o Erro 3021

    Este erro diz respeito ao filtrar um Recordset e após o filtro o mesmo não conter registro. (Recordset_2)

    Ao ocorrer o erro >> 3021 <<
    Vai para o case do erro, e retorna ao proximo registro do recordset_1

    Só que ao ocorrer o mesmo erro novamente.. não o trata... O que fazer:

    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    On Error GoTo TrataErro
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            StrSQL = "SELECT * FROM  tblRetorno"
            Set rsBaixa = CurrentDb.OpenRecordset(StrSQL)
            rsBaixa.MoveLast: rsBaixa.MoveFirst
            Do While Not rsBaixa.EOF
                StrSQLMov = "SELECT * FROM [movim geral] WHERE NossoNumero = " & rsBaixa!NossoNumero & ""
    Aqui acontece o erro que vai para o case 3021... Após o primeiro tratamento volta pra
    Do While.. se acontecer o erro novamente não o trata

                Set RsMovim = CurrentDb.OpenRecordset(StrSQLMov)
                    RsMovim.Edit
                        RsMovim!statuscr = 1
                        RsMovim!valor11 = rsBaixa!valor11
                        RsMovim!VrBaixaCr = rsBaixa!VrBaixaCr
                        RsMovim!databaixa = rsBaixa!databaixa
                    RsMovim.Update
                   x = x + 1
                '--------------------------------------------------------------------
                'Atualiza a tabela BancoBrasilArquivoRetorno para marcar como baixado
                '--------------------------------------------------------------------
                rsBaixa.Edit
                    rsBaixa!Baixado = 1
                rsBaixa.Update
                '--------------------------------------------------------------------
    Continuar:
                rsBaixa.MoveNext
                nCount = nCount + 1
            Loop
        Case vbNo
            Exit Sub
        End Select
    Exit Sub
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'Tratamento de Erros
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Exit_TrataErro:
        DoCmd.Hourglass False
        DoCmd.Echo True
    Exit Sub
    TrataErro:
        Select Case Err.Number
            '----------------------------------------------------------------
            'Erro gerado caso não seja encontrado registro correspondente na
            'tabela movim geral ao baixar o tíulo, significa que na tabela
            'movim geral não existe o registro correspondente contido na
            'tabela tblRetorno
            '----------------------------------------------------------------
            Case 3021
                Dim RsLogErro1   As DAO.Recordset
                Dim StrSQLErro1      As String
                'Carrego a variável com a SQL da tabela
                StrSQLErro1 = "SELECT * FROM tblLogErroBaixa"
                'Carrego o recordset com a SQL
                Set RsLogErro1 = CurrentDb.OpenRecordset(StrSQLErro1)
                    'Abre o recordset para novo registro
                    RsLogErro.AddNew
                        'Atualizo os campos
                        RsLogErro!CpBanco = rsBaixa!CpBanco
                        RsLogErro!NossoNumero = rsBaixa!NossoNumero
                        RsLogErro!VrBaixaCr = rsBaixa!VrBaixaCr
                        RsLogErro!databaixa = rsBaixa!databaixa
                    'Atualizo o recordset e consequentemente a tabela
                    RsLogErro.Update
                'Emito mensagem com o erro ocorrido
                MsgBox "Não existe registro correspondente em Boletos Emitidos" _
                        & vbNewLine & "para o Título >>>>" _
                        & vbNewLine & "Nosso Número     :  " & rsBaixa!NossoNumero & "" _
                        & vbNewLine & "Banco                     : " & rsBaixa!CpBanco & "" _
                        & vbNewLine & "Data Baixa              : " & rsBaixa!databaixa & "" _
                        & vbNewLine & "Valor                       : " & rsBaixa!VrBaixaCr & "", vbCritical, "SEM TITULO CORRESPONDENTE"
                'Passo a execução ao rótulo cnontinuar,
                'continuando a percorrer os registros da tblRetorno
                GoTo Continuar
            Case Else
              DoCmd.Hourglass False
              DoCmd.Echo True
             'Chama a função global de tratamento de erros
             GlobalErrHandler (Me.Name)
      End Select
    End Sub



    Grato pela ajuda.
    avatar
    Convidado
    Convidado


    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento Empty Re: [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    Mensagem  Convidado 16/8/2013, 17:34

    Resolvi este utilizando uma checagem com o recordSet.Recordcount.
    Mas caso alguem saiba o porque deste não tratamento na segunda ocorrêencia do erro.. fique a vontade


    Private Sub btnBaixa_Click()
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    On Error GoTo TrataErro
    Dim NomeProcedimento As String
        NomeProcedimento = "btnBaixa_Click"
        'Adiciona o nome do procedimento à função
        PegaProcedimento (NomeProcedimento)
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Dim RsMovim     As DAO.Recordset
    Dim rsBaixa     As DAO.Recordset
    Dim StrSQL      As String
    Dim Msg         As String
    Dim nCount      As Integer
    Dim StrSQLMov   As String
    '---------------------------------------------------------------------
    'Verifica se existem registros em aberto para o banco
    '---------------------------------------------------------------------
    If DCount("*", "[movim geral]", "statuscr = 0") = 0 Then
        MsgBox "Não existem títulos em Aberto para serem baixados!", vbInformation, "ATENÇÃO"
        Exit Sub
    End If
    '-----------------------------------------------------------------------------
    'Verifica se existem registros em Baixados na tabela tblRetorno
    '-----------------------------------------------------------------------------
    If DCount("*", "TblRetorno", "Baixado = 0") = 0 Then
        MsgBox "Não existem títulos de Retorno em Aberto!", vbInformation, "ATENÇÃO"
        Exit Sub
    End If
    '-----------------------
    'Mensagem de confirmação
    '-----------------------
    Msg = MsgBox("Deseja Baixar os Títulos importados?", vbYesNo + vbQuestion, "BAIXA DE TÍTULOS")
    '--------------------------------------
    'Carega a variável com a SQL da tabela
    '--------------------------------------
    StrSQL = "SELECT * FROM  tblRetorno"
    '----------------
    'Seleção do case
    '----------------
    Select Case Msg
        Case vbYes
            '--------------------------
            'Seta o recordset com a SQL
            '--------------------------
            Set rsBaixa = CurrentDb.OpenRecordset(StrSQL)
            rsBaixa.MoveLast: rsBaixa.MoveFirst
            '--------------------------------------------------------------------------------------
            'Executa loop pelo recordset atualizando o respectivo lançamento na tabela movim geral
            '--------------------------------------------------------------------------------------
            Do While Not rsBaixa.EOF
                '----------------------------------------------------------------------------------------
                'Carrega na variável a SQL da tabela movim geral filtrado pelo NossoNumero
                '----------------------------------------------------------------------------------------
                StrSQLMov = "SELECT * FROM [movim geral] WHERE NossoNumero = " & rsBaixa!NossoNumero & ""
                '--------------------------
                'Seta o recordset com a SQL
                '--------------------------
                Set RsMovim = CurrentDb.OpenRecordset(StrSQLMov)
                If RsMovim.RecordCount > 0 Then
                    RsMovim.Edit
                        RsMovim!statuscr = 1
                        RsMovim!valor11 = rsBaixa!valor11
                        RsMovim!VrBaixaCr = rsBaixa!VrBaixaCr
                        RsMovim!databaixa = rsBaixa!databaixa
                    RsMovim.Update
                    '--------------------------------------------------------------------
                    'Atualiza a tabela BancoBrasilArquivoRetorno para marcar como baixado
                    '--------------------------------------------------------------------
                    rsBaixa.Edit
                        rsBaixa!Baixado = 1
                    rsBaixa.Update
                    '--------------------------------------------------------------------
                    rsBaixa.MoveNext
                    nCount = nCount + 1
                Else
                    '----------------------------------------------------------------
                    'Erro gerado caso não seja encontrado registro correspondente na
                    'tabela movim geral ao baixar o tíulo, significa que na tabela
                    'movim geral não existe o registro correspondente contido na
                    'tabela tblRetorno
                    '----------------------------------------------------------------
                    Dim RsLogErro   As DAO.Recordset
                    Dim StrSQLErro      As String
                    'Carrego a variável com a SQL da tabela
                    StrSQLErro = "SELECT * FROM tblLogErroBaixa"
                    'Carrego o recordset com a SQL
                    Set RsLogErro = CurrentDb.OpenRecordset(StrSQLErro)
                        'Abre o recordset para novo registro
                        RsLogErro.AddNew
                            'Atualizo os campos
                            RsLogErro!CpBanco = rsBaixa!CpBanco
                            RsLogErro!NossoNumero = rsBaixa!NossoNumero
                            RsLogErro!VrBaixaCr = rsBaixa!VrBaixaCr
                            RsLogErro!databaixa = rsBaixa!databaixa
                        'Atualizo o recordset e consequentemente a tabela
                        RsLogErro.Update
                    'Emito mensagem com o erro ocorrido
                    MsgBox "Não existe registro correspondente em Boletos Emitidos" _
                            & vbNewLine & "para o Título >>>>" _
                            & vbNewLine & "Nosso Número     :  " & rsBaixa!NossoNumero & "" _
                            & vbNewLine & "Banco                     : " & rsBaixa!CpBanco & "" _
                            & vbNewLine & "Data Baixa              : " & rsBaixa!databaixa & "" _
                            & vbNewLine & "Valor                       : " & rsBaixa!VrBaixaCr & "", vbCritical, "SEM TITULO CORRESPONDENTE"
                    'Passo a execução ao rótulo cnontinuar,
                    'continuando a percorrer os registros da tblRetorno
                    rsBaixa.MoveNext
                    nCount = nCount + 1
                End If
            Loop
        Case vbNo
            Exit Sub
        End Select
        '------------------
        'Atualiza a ListBox
        '------------------
        Me.LstBol.Requery
        Me.lstRetorno.Requery
        MsgBox "Foram baixado(s) " & nCount & " Títulos!", vbInformation, "BAIXA EFETUADA"
    Exit Sub
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'Tratamento de Erros
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Exit_TrataErro:
        DoCmd.Hourglass False
        DoCmd.Echo True
    Exit Sub
    TrataErro:
        Select Case Err.Number
            Case 0
                'Não é um erro
            Case Else
              DoCmd.Hourglass False
              DoCmd.Echo True
             'Chama a função global de tratamento de erros
             GlobalErrHandler (Me.Name)
      End Select
    End Sub



    Cumprimentos.


    Última edição por PILOTO em 16/8/2013, 17:52, editado 1 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento Empty Re: [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    Mensagem  Alexandre Neves 16/8/2013, 17:38

    Olá, Piloto
    Julgo que é inato do Access. Ele assume que o erro já foi depurado ou dada indicação para o ignorar
    Abraço,
    Alexandre


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Convidado
    Convidado


    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento Empty Re: [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    Mensagem  Convidado 16/8/2013, 17:54

    Creio que você têm razão grande Alexandre... No entanto.. seria bom se fosse diferente.

    Abraços.

    Conteúdo patrocinado


    [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento Empty Re: [Resolvido]Tratamento de Erros perde a funcionalidade após o primeiro tratamento

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 22:55