ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Query não atualiza. Tenho que fechar e abrir o programa

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
mm_edilson
Novato
Novato


Registrado: Sexta-Feira, 29 de Outubro de 2010
Mensagens: 88

MensagemEnviada: Qua Ago 01, 2018 12:27 pm    Assunto: Query não atualiza. Tenho que fechar e abrir o programa Responder com Citação

Olá amigos. Estou com um problema queimando meus neurônios.
Estou fazendo um programinha de gestão financeira para uma pequena igreja.
Como o movimento é muito pequeno e não exige muito do banco de dados, utilizo Access conectado com ADO.
No formulário tenho um combobox com os seguintes itens: dízimos, ofertas e total.
Logo abaixo tenho um label, que deve me retornar a soma das entradas do mês corrente, do campo selecionado no combobox.
Inseri no próprio formulário uma adoquery para cada item: dízimos, ofertas e total, e um dbtext (não visível) para cada adoquery que recebe o campo Expr1, Expr2 e Expr3, respectivamente.
No evento onchange do combobox, coloquei o seguinte código:

Código:

procedure TFinanceiro.ComboBox1Change(Sender: TObject);
  var
  num1, num2, num3: real;
begin
  Label25.Caption := '';
  AdoQuery1.Close;
  AdoQuery2.Close;
  AdoQuery3.Close;
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add('Select Sum(Valor) as Expr1');
    AdoQuery1.SQL.Add('from entradas');
    AdoQuery1.SQL.Add('where Month(DtLanc) = Month(Date()) and year(DtLanc) = Year(Date()) and IdLancamento IN (1)');
    AdoQuery2.SQL.Clear;
    AdoQuery2.SQL.Add('Select Sum(Valor) as Expr2');
    AdoQuery2.SQL.Add('from entradas');
    AdoQuery2.SQL.Add('where Month(DtLanc) = Month(Date()) and year(DtLanc) = Year(Date()) and IdLancamento IN (2)');
    AdoQuery3.SQL.Clear;
    AdoQuery3.SQL.Add('Select Sum(Valor) as Expr3');
    AdoQuery3.SQL.Add('from entradas');
    AdoQuery3.SQL.Add('where Month(DtLanc) = Month(Date()) and year(DtLanc) = Year(Date()) and IdLancamento IN (3)');
  AdoQuery1.Open;
  AdoQuery2.Open;
  AdoQuery3.Open;
If Combobox1.Text = 'Total Geral de Entradas' Then
  begin
    if Dbtext3.Caption = '' then
    label25.Caption := 'R$0,00' else
    num3 := StrToFloat(DbText14.Caption);
    Label25.Caption := FloatToStrF(num3, ffcurrency, 8,2);
  end;
If Combobox1.Text = 'Dízimos' Then
  begin
    if Dbtext1.Caption = '' then
    label25.caption := 'R$0,00' else
    num1 := StrToFloat(DbText1.Caption);
    Label25.Caption := FloatToStrF(num1, ffcurrency, 8,2);
    end;
If Combobox1.Text = 'Ofertas' Then
  begin
    if Dbtext2.Caption = '' then
    label25.caption := 'R$0,00' else
    num2 := StrToFloat(DbText2.Caption);
    Label25.Caption := FloatToStrF(num2, ffcurrency, 8,2);
    end;
End;


Pois bem, quando seleciono, por exemplo, Dízimos, na combobox, ele retorna no label 25 a soma de todos os dízimos que entraram no mês. Se seleciono, ofertas, o label muda para a soma das ofertas. Funciona tudo perfeito.

O problema é quando eu edito ou adiciono um novo lançamento.

Meu código para isso é:

Código:

procedure TFinanceiro.Button7Click(Sender: TObject);
  var
  data: string;
begin
  data := FormatDateTime('DD/MM/YYYY', DateTimePicker1.Date);
  dbedit2.Text := data;
  dbnavigator1.BtnClick(nbpost);
  Combobox1.Text := 'Selecione a Opção';


Depois de clicar e salvar o lançamento, se eu volto no combobox1 e seleciono qualquer campo, o label sempre aparece zerado. Ou seja, ele não me retorna mais os totais. O mesmo ocorre após excluir um registro. Aí eu preciso sair do programa e entrar de novo, e quando faço isso, lá estão os valores atualizados.

Já tentei inserir um close e um open na tabela após o insert, já tentei o mesmo com a conexão, e nada. Aliás, acredito que não deveria ser necessário algo assim, pois o evento onchange do combobox vai sempre fechar e abrir as adoquery, logo os valores deveriam atualizar. Enfim... não sei o que fazer para ele atualizar sem eu ter que fechar e abrir o programa.

Se alguém puder dar uma força...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Ago 02, 2018 11:24 am    Assunto: Responder com Citação

Bom dia,

Não sei se vai resolver mas experimente fazer uns testes com o código abaixo:

Código:
procedure TFinanceiro.ComboBox1Change(Sender: TObject);
begin
  AdoQuery1.Close;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add('Select Sum(Valor) as Total');
  AdoQuery1.SQL.Add('from entradas');
  AdoQuery1.SQL.Add('where Month(DtLanc) = Month(Date()) and year(DtLanc) = Year(Date()) and IdLancamento = :IdLancamento');
  If Combobox1.Text = 'Dízimos' Then
      ADOQuery1.Parameters.ParamByName('IdLancamento').Value := 1
  else
      If Combobox1.Text = 'Ofertas' Then
          ADOQuery1.Parameters.ParamByName('IdLancamento').Value := 2
      else
          ADOQuery1.Parameters.ParamByName('IdLancamento').Value := 3;
  AdoQuery1.Open;
  Label25.Caption := Format('%m', [ADOQuery1.FieldByName('Total').AsCurrency]);
End;


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-apartamento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB