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

4 participantes

    [Resolvido]Select case funcionando intermitentemente

    avatar
    Luiz antônio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 53
    Registrado : 06/02/2020

    [Resolvido]Select case funcionando intermitentemente Empty [Resolvido]Select case funcionando intermitentemente

    Mensagem  Luiz antônio 2/1/2023, 19:43

    Boa tarde, pessoal.

    Será que poderiam me ajudar?

    Para desenvolver o código abaixo, eu me baseei em dois códigos SELECT CASE sugeridos como solução pelo Alexandre, um dos quais em https://www.maximoaccess.com/t17183-resolvidousar-select-case-para-buscar-informacao-em-uma-tabela.
    Entretanto, às vezes o código roda direitinho, outras vezes não. Percebo que ele dá problema quando eu abro antes o subformulário no qual essas alterações serão realizadas. Talvez precise de alguma linha no código que atualize os registros.

    Código:

        Select Case Financeiro
       
            Case Is = 1
               
                Select Case (nCap)
                   
                    Case 211
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                   
                    End Select
                   
                Select Case (nCap)
                   
                    Case 221
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
                    End Select
       
            Case Is = 2
               
                Select Case (nCap)
               
                    Case 211
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                   
                    End Select
                   
                Select Case (nCap)
                   
                    Case 221
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
                    End Select
       
            Case Is = 3
               
                Select Case (nCap)
               
                    Case 211
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                   
                    End Select
                   
                Select Case (nCap)
                   
                    Case 221
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
                    End Select
       
            Case Is = 4
               
                Select Case (nCap)
                   
                    Case 211
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
               
                    End Select
                   
                Select Case (nCap)
                   
                    Case 221
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
                    End Select
       
            Case Is = 5
           
                Select Case (nCap)
               
                    Case 211
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
               
                    End Select
                   
                Select Case (nCap)
                   
                    Case 221
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
                    End Select
       
            Case Else

                Select Case (nCap)
               
                    Case 111
                        Me.ValorDaParcelaRecebida.Value = 0
                   
                    Case 112
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                       
                    Case 121
                        Me.ValorDaParcelaRecebida.Value = 0
                   
                    Case 122
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                   
                    Case 212
                        Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value

                    Case 222
                        Me.SaídasReais.Value = Me.ValorDaParcela.Value * -1

                    End Select
            End Select
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2759
    Registrado : 13/12/2016

    [Resolvido]Select case funcionando intermitentemente Empty Re: [Resolvido]Select case funcionando intermitentemente

    Mensagem  Alexandre Fim 2/1/2023, 21:53

    Olá Luiz,

    Para ficar mais fácil e rapido de resolver, compartilhe aqui uma cópia do seu banco de dados, somente objetos (tabela/formulários/consultas e etc.) envolvidos no problema, para análise e solução.

    Att,

    Alexandre Fim


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    [Resolvido]Select case funcionando intermitentemente Setinf11
    Sistemas e Tecnologia Ltda
    Silvio
    Silvio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5022
    Registrado : 20/04/2011

    [Resolvido]Select case funcionando intermitentemente Empty Re: [Resolvido]Select case funcionando intermitentemente

    Mensagem  Silvio 3/1/2023, 10:33

    Boas....

    Percebo que ele dá problema quando eu abro antes o subformulário no qual essas alterações serão realizadas.

    Fica a pergunta: para que vai abrir o sub antes do formulário principal ? Se o sub depende do principal para executar qualquer rotina ?

    Fica a pergunta !!!


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
    avatar
    Luiz antônio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 53
    Registrado : 06/02/2020

    [Resolvido]Select case funcionando intermitentemente Empty Select case funcionando intermitentemente

    Mensagem  Luiz antônio 3/1/2023, 14:17

    Alexandre Fim e Silvio, obrigado por se interessarem pelo problema.

    Vou começar a responder pelo Silvio. Eu tenho aberto o subformulário por pura insegurança, para verificar se as rotinas criadas têm gerado as alterações que gostaria nos registros. Tenho conhecimento básico de Access: onde me agarro peço socorro aqui e sempre tenho recebido a atenção de vocês.

    Só para explicar o que tenho feito para chegar no problema que relatei:
    1 - No formulário, zero o valor diretamente no campo do subformulário.
    2 - Há um botão dentro do formulário pelo qual abro o subformulário em pop-up somente na linha do registro atual, e isso me ajuda a certificar de que os dados foram corretamente apagados. Normalmente esse procedimento está sempre corretamente concluído.
    3 - Fecho o pop-up do subformulário.
    4 - Entro no campo do subformulário novamente e digito o valor correto usando um código select case para corrigir todos os campos do subformulário do registro atual.
    5 - No botão abro o subformulário em pop-up novamente para mais uma vez conferir se a linha foi corrigida satisfatoriamente. É aí que verifico que não foi.
    Quando não executo o procedimento 2 dá tudo certo.

    Tentei fazer agora o seguinte:
    1 - Mesma coisa que faço normalmente dentro do formulário, pagando o valor do campo do subformulário.
    2 - Fecho o formulário e abro o subformulário completo indo até a linha do registro atual para conferir: campo do valor foi apagado corretamente.
    3 - Fecho o subformulário e entro novamente no formulário.
    4 - Vou ao campo de valor do subformulário e lanço o valor correto e rodo o select case.
    5 - Fecho o formulário e abro o subformulário e vou à linha do registro para conferir. Também não atualizou corretamente.

    Eu preciso ter certeza de que os registros estão corretamente apagados e corrigidos. O código que tenho usado neste caso não me garante isso e temo que algum registro não seja corrigido corretamente e isso interfira nos relatórios que gero a partir daí.

    Estou enviando o arquivo. Talvez tenha que ter alguma rotina adicional que atualize o registro do Sistema. A que faço por macro no formulário não funciona.

    Mais uma vez obrigado pela atenção de vocês e pelo carinho que sempre tenho tido do Fórum.
    Anexos
    [Resolvido]Select case funcionando intermitentemente AttachmentSelect case.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (193 Kb) Baixado 8 vez(es)


    Última edição por Luiz antônio em 3/1/2023, 20:25, editado 1 vez(es)
    avatar
    Luiz antônio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 53
    Registrado : 06/02/2020

    [Resolvido]Select case funcionando intermitentemente Empty (Resolvido) Select case funcionando intermitentemente

    Mensagem  Luiz antônio 3/1/2023, 14:24

    Completando, fiz agora vários registros, apaguei e corrigir valores, sem abrir o formulário entre os procedimentos de apagar e corrigir valores. Alguns dos registros estavam corretos, mas alguns deles não. Percebo então que a rotina de apagar está perfeita, mas a do select case que visa ao preenchimento dos valores corretos não.


    Última edição por Luiz antônio em 16/1/2023, 21:59, editado 2 vez(es)
    avatar
    elmanojr
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 26
    Registrado : 20/07/2017

    [Resolvido]Select case funcionando intermitentemente Empty Select case funcionando intermitentemente

    Mensagem  elmanojr 11/1/2023, 19:07

    Boas,

    Pergunta:
    Se voce for cadastrar 500 registros vai ter que entrar e sair do subfrm 500 vezes para ver se esta certo?
    Se precisa de verificação,
    Voce deve fazer um código em VBA que verifique se as condições foram atendidas ao final de cada operação e que mande uma msg tipo: Esta tudo OK, ou deu erro aqui ou ali.
    O Código fará a verificação , não voce.

    Não vejo lógica o usuário ter que verificar , inclusive através de um subfrm, somente para ver se esta tudo "Certo".

    No código select:
    Select Case Financeiro
              Case Is = 1
                     Select Case (nCap)
                          Case 211
                       Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
                     End Select         
               Select Case (nCap)
                       Case 221
                       Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
               End Select

    Tente fazer sem repetir o Select (nCap):
    ========================================================
    Select Case Financeiro
       
           Case Is = 1
               
               Select Case (nCap)
                   
                   Case 211
                       Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value                                      
             
                   Case 221
                       Me.ValorDaParcelaRecebida.Value = Me.ValorDaParcela.Value
       
               End Select
    ======================================================
    O erro esta em abrir o subfrm depois para confirmar, de alguma maneira o DB esta executando o código novamente.

    Espero ter ajudado.
    Abraço
    avatar
    Luiz antônio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 53
    Registrado : 06/02/2020

    [Resolvido]Select case funcionando intermitentemente Empty Select case funcionando intermitentemente

    Mensagem  Luiz antônio 12/1/2023, 18:08

    elmanojr, valeu pelo interesse.

    Se voce for cadastrar 500 registros vai ter que entrar e sair do subfrm 500 vezes para ver se esta certo?
    Não preciso. Você tem toda razão sobre a conferência. Porém, faço no desenvolvimento apenas para verificar a robustez do código. Foi aí que percebi que funcionava intermitentemente.

    Percebi outra coisa nos testes que estou fazendo visando à busca de uma rotina que solucione esse problema: depois de zerar, volto ao registro anterior e de novo volto ao registro atual que estou editando. Parece que isso descarrega a "memória" do DB. Com isso o select case tem funcionado sem erro. Se há mais de uma linha do subformulário do registro atual para editar, eu repito essa saída e reentrada mais de uma vez. Não é uma saída bacana, né?


    Tente fazer sem repetir o Select (nCap):
    Já tinha limpado isso.

    Voce deve fazer um código em VBA que verifique se as condições foram atendidas ao final de cada operação e que mande uma msg tipo: Esta tudo OK, ou deu erro aqui ou ali.
    Vou estudar aqui sobre isso. Acho que pode ser uma solução até para descarregar a "memória" do DB.

    Obrigado mais uma vez.
    avatar
    elmanojr
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 26
    Registrado : 20/07/2017

    [Resolvido]Select case funcionando intermitentemente Empty Select case funcionando intermitentemente

    Mensagem  elmanojr 12/1/2023, 22:20

    Valeu....

    As vezes quando escrevemos nosso problema esquecemos dos detalhes. e deixamos de falar de coisas importantes.

    Por isso que normalmente o pessoal pede para postar um arquivo do código para poder entender melhor sobre a necessidade.

    Nos meus códigos, até quando salvo um cadastro, ou faço uma alteração, mando msg para o usuário.
    Assim ele fica sabendo o que esta acontecendo.
    Tipo: "Cadastro "nomeDoCadastro" foi Salvo com sucesso!" ou " O registro "nomeDoRegistro" foi alterado com sucesso!"

    Gastei também um bom tempo fazendo um tratamento de erros. Então se houver algum erro, o usuário receberá uma msg indicando onde e qual erro aconteceu ou
    pede para chamar o Administrador do sistema.
    ===============================
    Exemplo:

    ' Mando mensagem para usuario.
       Call fncMensagemInfo("Ok! Conta Salva com Sucesso!" & vbCrLf & vbCrLf & [strConta_nome], "INFORMAÇÃO - EDIÇÃO CONSULTA CONTA SALVA !")

    ' Regarrego o frm.
       Me.Refresh

    Exit_Here:        ' Porta de Saída.
       Exit Sub

    Err_Handler:     ' Tratando o Erro.
       Call fncMensagemCri("Erro # " & Str(Err.Number) & vbCrLf & "gerado na " & Err.Source & vbCrLf & vbCrLf & "Descrição: " & Err.Description, "Por favor contate o Administrador de Sistema - Msg Erro")
       Resume Exit_Here
    End Sub

    ==============================

    Abraço
    avatar
    Luiz antônio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 53
    Registrado : 06/02/2020

    [Resolvido]Select case funcionando intermitentemente Empty Select case funcionando intermitentemente

    Mensagem  Luiz antônio 14/1/2023, 01:26

    elmanojr, boa noite

    Consegui desenvolver uma mensagem de confirmação dos registros. Se havia alguma coisa carregando a memória do DB que me impedia completar a edição com sucesso, a mensagem de confirmação da alteração parece descarregá-lo. Fiz os testes que tenho feito Wink para me certificar da robustez do código e não me deparei mais com o erro.

    Valeu muito, mestre, por sua paciência e por sua atenção. Acho que está solucionado o problema. Tenho aprendido muito assim, na base da curiosidade.

    elmanojr gosta desta mensagem


      Data/hora atual: 26/1/2023, 21:45