mm_edilson Novato

Registrado: Sexta-Feira, 29 de Outubro de 2010 Mensagens: 88
|
Enviada: Qua Ago 01, 2018 12:27 pm Assunto: Query não atualiza. Tenho que fechar e abrir o programa |
|
|
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... |
|
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Ago 02, 2018 11:24 am Assunto: |
|
|
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 |
|