Fórum ajuda calculo #424035
19/09/2012
0
ele só me dá o resultado do primeiro registro da tabela porem dobrando valor.
registros na tabela.
data de filtro valor dos campos
10/09/2012 20,00 // primeiro registro me da o resultado de 40,00 e não soma o de 30,00 que é na mesma data
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
procedure TFormCaixa.BitBtn1Click(Sender: TObject);
var i, t: integer;
Begin
If final.Date < inicial.Date then
begin
Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
inicial.SetFocus end else
begin
Dados.QueryMensalidade.Filter:='DataAte >='+QuotedStr(datetostr(Inicial.Date))+' and DataAte <='+QuotedStr(datetostr(Final.Date));
Dados.QueryMensalidade.Filtered := True;
if Dados.QueryMensalidade.RecordCount = 0 then
begin
Showmessage ('Não Existe Dados no Período Solicitado !');
Inicial.SetFocus;
end else
Dados.QueryMensalidade.First;
t:=Dados.QueryMensalidadeSomaTotal.AsInteger;
for i := 1 to Dados.QueryMensalidade.RecordCount -1 do
begin
t:= t+Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;
Edit1.Text := FormatFloat('#,##0.00', t);
end;
end;
end;
Gilvanio Gonçalves
Curtir tópico
+ 0Posts
19/09/2012
Joel Rodrigues
Resumindo, experimente botar essa linha um nível abaixo (após o END que vem logo em seguida)
Edit1.Text := FormatFloat('#,##0.00', t);Gostei + 0
19/09/2012
Gilvanio Gonçalves
Resumindo, experimente botar essa linha um nível abaixo (após o END que vem logo em seguida)
Edit1.Text := FormatFloat('#,##0.00', t);Já fiz este teste como disse e no primeiro codigo que postei.
mesmo eu tendo a tabela assim:
registros na tabela.
data de filtro valor dos campos
10/09/2012 20,00 // primeiro registro me da o resultado de 40,00 e não soma o de 30,00 que é na mesma data
10/09/2012 0,00
25/09/2012 0,00
12/12/2012 0,00
10/10/2010 0,00
o rsultado é 40,00 por isto digo que lendo só o primeiro registro e adicionando 20 = 20 = 40,00
procedure TFormCaixa.BitBtn1Click(Sender: TObject);
var i, t: integer;
Begin
If final.Date < inicial.Date then
begin
Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
inicial.SetFocus end else
begin
Dados.QueryMensalidade.Filter:='DataAte >='+QuotedStr(datetostr(Inicial.Date))+' and DataAte <='+QuotedStr(datetostr(Final.Date));
Dados.QueryMensalidade.Filtered := True;
if Dados.QueryMensalidade.RecordCount = 0 then
begin
Showmessage ('Não Existe Dados no Período Solicitado !');
Inicial.SetFocus;
end else
Dados.QueryMensalidade.First;
t:=Dados.QueryMensalidadeSomaTotal.AsInteger;
for i := 1 to Dados.QueryMensalidade.RecordCount -1 do
begin
t:= t+Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;
end;
Edit1.Text := FormatFloat('#,##0.00', t); mudei pra cá como disse e o resiltado é o mesmo
end;
mesmo se eu colocar o edit aqui a resultado é o mesmo. é como se nõ tivesse varrendo os registro e dar o resultado,
e sim lendo só o primeiro registro e dobrando
end;tem um erro de logica enào consigo reparar, ou função de codigo errada?
me ajudem.
Gostei + 0
19/09/2012
Pjrm1470
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
Em vez de:
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
A menos que tenha mais campos influenciando no resultado de sua operação, eu lhe digo que preciso de mais informação sobre o que está acontecendo, além do click desse botão.
Fora isso, o que o Joel disse, provavelmente está certo e aconselho a seguinte alteração:
...
Dados.QueryMensalidade.First;
t := 0; { <-- inicialização sendo zero! }
for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
begin
t := t + Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;
end;
...Abraço.
Gostei + 0
19/09/2012
Gilvanio Gonçalves
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
Em vez de:
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
A menos que tenha mais campos influenciando no resultado de sua operação, eu lhe digo que preciso de mais informação sobre o que está acontecendo, além do click desse botão.
Fora isso, o que o Joel disse, provavelmente está certo e aconselho a seguinte alteração:
...
Dados.QueryMensalidade.First;
t := 0; { <-- inicialização sendo zero! }
for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
begin
t := t + Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;
end;
...Abraço.
Valeu amigos;
meu erro estava aqui:
Dados.QueryMensalidade.First; t:=Dados.QueryMensalidadeSomaTotal.AsInteger;//aqui ele acumulva o valor do campo das vezes dentro do laço. for i := 1 to Dados.QueryMensalidade.RecordCount -1 do begin t:= t+Dados.QueryMensalidadeSomaTotal.AsInteger; Dados.QueryMensalidade.Next;
aqui como vc fez.
Dados.QueryMensalidade.First;
t := 0; { <-- inicialização sendo zero! }t é igual zero, registro 1 = 20 t a variavel gurdava 20, no neste outro registro
dentro do periodo t = 20 + o valor do novo registro.
for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
begin
t := t + Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;obrigado pela força amigos.
Gostei + 0
19/09/2012
Gilvanio Gonçalves
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
Em vez de:
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
A menos que tenha mais campos influenciando no resultado de sua operação, eu lhe digo que preciso de mais informação sobre o que está acontecendo, além do click desse botão.
Fora isso, o que o Joel disse, provavelmente está certo e aconselho a seguinte alteração:
...
Dados.QueryMensalidade.First;
t := 0; { <-- inicialização sendo zero! }
for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
begin
t := t + Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;
end;
...Abraço.
Valeu amigos;
meu erro estava aqui:
Dados.QueryMensalidade.First; t:=Dados.QueryMensalidadeSomaTotal.AsInteger;//aqui ele acumulva o valor do campo das vezes dentro do laço. for i := 1 to Dados.QueryMensalidade.RecordCount -1 do begin t:= t+Dados.QueryMensalidadeSomaTotal.AsInteger; Dados.QueryMensalidade.Next;
aqui como vc fez e que deu certo.
Dados.QueryMensalidade.First;
t := 0; { <-- inicialização sendo zero! }t é igual zero, registro 1 = 20 t a variavel gurdava 20, no neste outro registro
dentro do periodo t = 20 + o valor do novo registro.
for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
begin
t := t + Dados.QueryMensalidadeSomaTotal.AsInteger;
Dados.QueryMensalidade.Next;obrigado pela força amigos.
Gostei + 0
20/09/2012
Joel Rodrigues
Estou encerrando o tópico.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)