ajuda calculo

Delphi

19/09/2012

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



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

Gilvanio Gonçalves

Curtidas 0

Respostas

Joel Rodrigues

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)
Edit1.Text := FormatFloat('#,##0.00', t);

GOSTEI 0
Gilvanio Gonçalves

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

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

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


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

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

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


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

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

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


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

Joel Rodrigues

19/09/2012

Que bom que deu certo.
Estou encerrando o tópico.
GOSTEI 0
POSTAR