Ir ao conteúdo
  • Cadastre-se
mm_edilson

Delphi Tabela não atualiza. Tenho que fechar e abrir o programa

Recommended Posts

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:

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 é:

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×