Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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...

Editado por mm_edilson
erro de ditigação

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






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

×