MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Atualizar campo de um formulário com base em informação lançada em outro formulário

    Compartilhe

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Dom 11 Jun 2017, 23:04

    Olá pessoal, gostaria de mais uma ajuda de vocês.

    Como faço para atualizar um dado de um formulário com base em informações lançadas em outro formulário.
    Exemplo:
    Um tanque de combustível com capacidade de 10.000 litros.
    Eu realizo um abatecimento neste tanque com sua capacidade total, 100%. O sistema irá mostrar capacidade restante 10.000

    Em outro formulário, utilizo este tanque para abastecer.
    Realizo a retirada dele de 1.000 litros, por exemplo.

    Ao clicar no cadastro deste tanque, queria que ele mostrasse, capacidade restante 9.000 litros e capacidade atual 90%.

    Qual seria a técnica para fazer este procedimento?
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Seg 12 Jun 2017, 18:13

    Boa tarde,
    descreva tudo, onde guarda a informação abastecimento? onde guarda a informação da retirada?


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Ter 13 Jun 2017, 00:55

    Olá Alexandre,

    As tabelas que serão utilizadas seriam: TB_Cad_Bomba, TB_ReabastecimentoBomba e TB_Cad_Abastecimento, bem como seus formulários, Frm_Cad_Bomba, Frm_ReabastecimentoBomba e Frm_Cad_Abastecimento.

    Em Frm_Cad_Bomba tem os campos de nome "txt_nivelatual", "txt_porcutilizacao" e "txt_caprestante" que contem as quantidades cadastradas da Bomba.
    Em Frm_Reabastecimento tem os campos de nome "txt_qtdelitros" que abastece a bomba cadastrada no formulário Frm_Cad_Bomba.
    Em Frm_Cad_Abastecimento tem o campo "txt_qtdelitros" que contem as retiradas do abastecimento da bomba em Frm_Cad_Bomba.

    A ideia seria que o sistema atualizasse em Frm_Cad_Bomba abatendo as retiradas e mostrasse a quantidade atual.

    Não sei se ficou claro ou se fiz confusão, mas acredito que você irá entender ou até dar uma sugestão melhor.
    Anexos
    Controle de Infrações2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (2.2 Mb) Baixado 3 vez(es)
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Ter 13 Jun 2017, 10:12

    Bom dia,
    Coloque este código, ao abrir o frm_cad_bomba
    Código:
    Option Compare Database
    Option Explicit

    Private Sub Form_Open(Cancel As Integer)
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'actualiza quantidades
        Dim Rst As DAO.Recordset
        Set Rst = CurrentDb.OpenRecordset("SELECT DISTINCT Bomba FROM TB_Cad_Bomba")
        Do While Not Rst.EOF
            CurrentDb.Execute "UPDATE TB_Cad_Bomba SET NivelAtual=DSum('QutdeLitros','TB_ReabastecimentoBomba','Bomba=" & Rst("Bomba") & "')-DSum('QtdeLitros','TB_Cad_Abastecimento','FornecedorBomba=" & Rst("Bomba") & "') WHERE Bomba=" & Rst("Bomba")
            Rst.MoveNext
        Loop
        CurrentDb.Execute "UPDATE TB_Cad_Bomba SET CapRestante=CapacidadeTotal-NivelAtual,Porcdetilizacao=Format(NivelAtual/CapacidadeTotal,'0.00%')"
        Set Rst = Nothing
    End Sub

    Normalize nomes de controlos, de forma aos nomes dos controlos não ficarem iguais aos nomes dos campos
    nomeie correctamente facilitando leitura (QutdeLitros?)


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qua 14 Jun 2017, 02:16

    Caro Alexandre, você é muito bom no que faz. Ficou perfeito!
    Por mim até deixaria do jeito que está, mas certamente você já consiga identificar o motivo do que vou dizer abaixo:
    Fiz o cadastro de 2 bombas com os códigos 1 e 2 (não é a chave primária de numeração automática). 1 e 2 seriam as filiais.
    Quando eu seleciono a 1 aparece O nível atual, porcentagem de utilização e a capacidade restante,
    porém quando percorro para a 2, estes campos ficam em branco.

    Penso que deve ser algum detalhe. Podes ver pra mim.
    Mais uma vez obrigado!
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Qua 14 Jun 2017, 08:24

    Bom dia
    Código:
    Private Sub Form_Open(Cancel As Integer)
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'actualiza quantidades
        Dim Rst As DAO.Recordset
        Set Rst = CurrentDb.OpenRecordset("SELECT DISTINCT Bomba FROM TB_Cad_Bomba")
        Do While Not Rst.EOF
            CurrentDb.Execute "UPDATE TB_Cad_Bomba SET NivelAtual=DSum('QutdeLitros','TB_ReabastecimentoBomba','Bomba=" & Rst("Bomba") & "')-DSum('QtdeLitros','TB_Cad_Abastecimento','FornecedorBomba=" & Rst("Bomba") & "') WHERE Bomba=" & Rst("Bomba")
            Rst.MoveNext
        Loop
        CurrentDb.Execute "UPDATE TB_Cad_Bomba SET NivelAtual=0 WHERE IsNull(NivelAtual)"
        CurrentDb.Execute "UPDATE TB_Cad_Bomba SET CapRestante=CapacidadeTotal-NivelAtual,Porcdetilizacao=Format(NivelAtual/CapacidadeTotal,'0.00%')"
        Set Rst = Nothing
    End Sub


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qui 15 Jun 2017, 01:45

    Amigo Alexandre,

    Percebi uma ligeira mudança ao abrir o formulário Frm_Cad_Bomba. Percebi que os campos (Nível Atual, Porc de Utilização e Cap Restante) que ficavam em branco antes, agora mostram informações coerentes de um tanque vazio. Mas quando faço o reabastecimento no formulário Frm_ReabasteimentoBomba, ele não sofre alteração, continua igual.
    Outra coisa que percebi também Alexandre e que não tinha mencionado antes... Observe que no formulário Frm_Cad_Bomba contém os tipos de combustíveis (gasolina, Arla, S10...). Esta informação está sendo levada em consideração, ou seja, se eu fizer outro cadastro de bomba, como filial 3, por exemplo, e mudar o combustível para S500, vai dar certo na fórmula?

    Desculpe te encher com isso, mas depois de pronto vai ficar perfeito.

    Outra coisa que queria também mencionar... não sei se teria que abrir outro tópico para isso (se não for possível, me fale que abro outro tópico, valeu). Mas, gostaria de saber após finalizar este ponto acima, se é possível colocar mensagem quando o combustível estiver finalizado, no momento do abastecimento no formulário Frm_Cad_Abastecimento. "Exemplo, tanque vazio, impossível abastecer"

    Obrigado mais uma vez por seu tempo.

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qui 15 Jun 2017, 03:22

    Alexandre,

    Depois que passei a mensagem anterior, continuei testando e percebi que está funcionando Very Happy A questão é que funcionou depois que realizei um abastecimento Very Happy (é normal?)
    Quanto ao que eu falei sobre o tipo do combustível, pode ignorar porque não pensei direito. Com certeza é levado em consideração sim, porque o abatimento é feito na Bomba cadastrada, que consequentemente já tem um tipo de combustível nele vinculado Wink
    Mas, quanto ao que te pedir da mensagem de tanque vazio, se puder me ajudar, agradeço. Facilitaria pra mim não ter que explicar novamente, já que você já está familiarizado com meu projeto.
    Obrigado!
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Qui 15 Jun 2017, 09:56

    Bom dia,
    Apenas dirigi o código para a abastecimento porque foi isso que pediu Ao clicar no cadastro deste tanque, queria que ele mostrasse, capacidade restante 9.000 litros e capacidade atual 90%.

    Num módulo, coloque o procedimento
    Código:
    Sub ActualizaBombas()
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'actualiza quantidades
        Dim Rst As DAO.Recordset
        Set Rst = CurrentDb.OpenRecordset("SELECT DISTINCT Bomba FROM TB_Cad_Bomba")
        Do While Not Rst.EOF
            CurrentDb.Execute "UPDATE TB_Cad_Bomba SET NivelAtual=DSum('QutdeLitros','TB_ReabastecimentoBomba','Bomba=" & Rst("Bomba") & "')-DSum('QtdeLitros','TB_Cad_Abastecimento','FornecedorBomba=" & Rst("Bomba") & "') WHERE Bomba=" & Rst("Bomba")
            Rst.MoveNext
        Loop
        CurrentDb.Execute "UPDATE TB_Cad_Bomba SET NivelAtual=0 WHERE IsNull(NivelAtual)"
        CurrentDb.Execute "UPDATE TB_Cad_Bomba SET CapRestante=CapacidadeTotal-NivelAtual,Porcdetilizacao=Format(NivelAtual/CapacidadeTotal,'0.00%')"
        Set Rst = Nothing
    End Sub

    Para o executar, chame-o AoAbrir o form Frm_Cad_Bomba e DepoisDeActualizar o form Frm_ReabasteimentoBomba


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qui 15 Jun 2017, 15:31

    Amigo Alexandre,

    Desculpe minha falta de conhecimento, mas acredito ter feito como me pediu e não funcionou. Continua só atualizando quando realizo um abastecimento.

    Para fazer o teste, apaguei todos os registros de reabastecimento de bomba e todos os abastecimentos de veículo. Fiz um Reabastecimento de Bomba de 5000 na Bomba 1, depois abri o Frm_Cad_Bomba e continuava "0", sem seguida, fiz um abastecimento de veículo de 1000 e depois que abri novamente o Frm_Cad_Bomba, mostrava 4000. Ou seja, funciona, mas só quando abasteço veículo. O que deveria ter acontecido, seria quando eu Reabastecer a bomba, já mostrar os 5000 antes de abastecer um veículo.
    Desculpe esta sendo redundante na explicação, mas é pra deixar claro o que estou tentando te dizer.

    Eu coloquei o código "Ao abrir" o Frm_Cad_Bomba e coloquei o mesmo código "Após atualizar" o Frm_ReabastecimentoBomba. Era isso mesmo?

    Houve alguma mudança no código desta última mensagem que me passou para a mensagem anterior? Acho que não né?

    Abraço.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Qui 15 Jun 2017, 15:55

    Indique o que preenche e selecciona e o que era esperado mas não acontece


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qui 15 Jun 2017, 16:37

    Alexandre,

    Está funcionando, você realizou o que eu pretendia, mas só falta este detalhe. Não sei se entendi bem sua pergunta, mas o que eu preencho são os campos quantidades.
    No formulário Frm_ReabastecimentoBomba, preencho o campo "txt_qtdelitros", que atualiza os campos "txt_nivelatual", "txt_porcutilizacao" e "txt_caprestante" no formulário Frm_Cad_Bomba.

    Quanto ao que era esperado, foi o que disse na mensagem anterior...
    Quando preencher o campo "txt_qtdelitros" em Frm_ReabastecimentoBomba, deveria já mostrar a quantidade informada no Frm_Cad_Bomba.
    Ele até mostra, porém se eu preencher um abastecimento no campo "txt_qtdelitros" do formulário Frm_Cad_Abastecimento.
    Na prática seria
    Faço um reabastecimento na bomba (Frm_ReabastecimentoBomba) de 5000 por exemplo na bomba seleciona, quando eu abrir o formulário que contém as bombas cadatrsdas (Frm_Cad_Bomba), deveria mostrar que existe 5000, certo? Mas não está acontecendo na prática. Porém se eu fizer uma retirada, ou seja, preencher o campo "txt_qtdelitros" do formulário Frm_Cad_Abastecimento com 1 litros na bomba selecionada, por exemplo, quando eu abro o formulário novamente que contém as bombas cadatrsdas (Frm_Cad_Bomba) irá aparecer corretamente 4999.
    Mas, como disse, só funciona se eu realizar uma retirada. Queria que aparecer, sem que tivesse que retirar.  

    Segue meu banco.
    Anexos
    Controle de Infrações2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (2.2 Mb) Baixado 8 vez(es)
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  Alexandre Neves em Qui 15 Jun 2017, 16:41

    Só quero que me leve até ao problema
    abrir frm..., premir botão..., preencher ... no controlo...
    Não sei o que é fazer um reabastecimento. premir botão novo? já fiz e nada acontece. É preencher algum controlo? não sei


    .................................................................................
    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

    jefersonsouza33
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 22/03/2017

    Re: Atualizar campo de um formulário com base em informação lançada em outro formulário

    Mensagem  jefersonsouza33 em Qui 15 Jun 2017, 16:47

    Amigo Alexandre,

    Não sei como explicar. Penso que do jeito que está já me ajuda.
    Mas você entendeu a ideia principal?
    Imagine um como com água, onde ele cheio teria 100 ml de agua.
    Ao encher este copo completamente, o sistema ainda me mostra que ele está vazio após consulta.
    Porém após beber 50 ml, ele mostre que contém 50 ml na consulta seguinte.
    É isso que está axontecendo. O copo seria o tanque, no exemplo. Quando abasteço o tanque (encho o copo) e consulto este abastecimento, o sistema não mostra este abastecimento, ou seja está zero. Porém depois que retiro (bebo a água), ele mostra o que ficou. Queria que ele mostrasse a quantidade antes de consumir.
    Mas sem problemas, o jeito que está, já me atende.

    Abraço.

      Data/hora atual: Sab 18 Nov 2017, 08:11