ajuda calculo
Pessoal me Dê uma força neste codigo?
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
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
Curtidas 0
Respostas
Joel Rodrigues
19/09/2012
Pelo jeito os 40,00 não são do primeiro registro e sim do último. A linha onde você exibe o valor no edit está dentro do laço, ou seja, exibe um valor a cada iteração, quando deveria ficar após o laço para exibir o total.
Resumindo, experimente botar essa linha um nível abaixo (após o END que vem logo em seguida)
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
Gilvanio Gonçalves
19/09/2012
Pelo jeito os 40,00 não são do primeiro registro e sim do último. A linha onde você exibe o valor no edit está dentro do laço, ou seja, exibe um valor a cada iteração, quando deveria ficar após o laço para exibir o total.
Resumindo, experimente botar essa linha um nível abaixo (após o END que vem logo em seguida)
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
Pjrm1470
19/09/2012
boa tarde.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
Em vez de:
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:
Abraço.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/10/2010 40,00
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
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 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
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
Gilvanio Gonçalves
19/09/2012
boa tarde.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
Em vez de:
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:
Abraço.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/10/2010 40,00
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
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 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
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
Gilvanio Gonçalves
19/09/2012
boa tarde.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
Em vez de:
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:
Abraço.
Pelo que li, seu codigo não tem erros.
A sua tabela, se ordenarmos ela pela data ficaria assim:
10/10/2010 40,00
10/09/2012 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
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 20,00
10/09/2012 30,00
25/09/2012 20,00
12/12/2012 30,00
10/10/2010 40,00
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
Joel Rodrigues
19/09/2012
Que bom que deu certo.
Estou encerrando o tópico.
Estou encerrando o tópico.
GOSTEI 0