Fórum ajuda com Wile #327854
21/08/2006
0
pessoal, tenho um procedure que calcula o total de dinheiro gasto em combustivel... pra isso como os amigos sabem eu fiz um while na tabela combustivel para somar todos os valores e me exibir o somatorio de todos os gastos, porem to com um probleminha que nao estou conseguindo enxergar, como duas ou mais cabeças pensam melhor que uma, vou postar aqui o código pra quem puder me ajudar...
O problema: o while pega duas vezes o valor do ultimo registro no somatório, assim se eu tivesse dois registros na tabela de valor = 10 o somatório ta sendo 30 e nao 20 (o correto)....
alguem pode me ajudar com isso?
abraços!
O problema: o while pega duas vezes o valor do ultimo registro no somatório, assim se eu tivesse dois registros na tabela de valor = 10 o somatório ta sendo 30 e nao 20 (o correto)....
procedure calcula_gastos; var v1,Total : String; begin // Atualiza tabela DM.Tbl_Combustivel.Close; DM.Tbl_Combustivel.SelectSQL.Clear; DM.Tbl_Combustivel.SelectSQL.add(´SELECT * FROM Combustivel order by DATA´); DM.Tbl_Combustivel.open; // zera o label Combustivel.Label_Total.Caption := ´0´; // vai pro primeiro registro DM.Tbl_Combustivel.First; // pega o primeiro valor da tabela pra soma e joga no label Combustivel.Label_Total.Caption := DM.Tbl_CombustivelVALOR.AsString; While not DM.Tbl_Combustivel.Eof do begin V1 := Combustivel.Label_Total.Caption; DM.Tbl_Combustivel.Next; // soma o valor atual com o valor do registro corrente Total := FloatToStr(StrToFloat(V1) + StrToFloat(DM.Tbl_CombustivelVALOR.AsString)); // mostra no label o total da soma Combustivel.Label_Total.Caption := Total; end; end;
alguem pode me ajudar com isso?
abraços!
Mahdak
Curtir tópico
+ 0
Responder
Posts
21/08/2006
Rjun
Seu código tem vários problemas. Mas o que esta causando o erro é que você pos o Next no meio do seu laço. O Next deve ser a última coisa que você faz. Se você quer totalizar sua tabela, acho que bastava você dar um SELECT SUM.
procedure calcula_gastos; var Total : Float; begin // Atualiza o código da query DM.tbl_Combustivel.Close; DM.tbl_Combustivel.SelectSQL.Clear; DM.tbl_Combustivel.SelectSQL.add(´SELECT * FROM Combustivel order by DATA´); DM.tbl_Combustivel.open; try // zera o label Total := 0; Combustivel.Label_Total.Caption := FloatToStr(Total); // vai pro primeiro registro DM.Tbl_Combustivel.First; while not (DM.Tbl_Combustivel.Eof) do begin Total := Total + DM.Tbl_Combustivel.FieldByName(´VALOR´).AsFloat; Combustivel.Label_Total.Caption := FloatToStr(Total); DM.Tbl_Combustivel.Next; end; finally DM.tbl_Combustivel.Close; end; end;
Responder
Gostei + 0
21/08/2006
Mahdak
Rjun, valleu pela força irmão... eu to numa correria tao grande aqui entre desenvover e gerenciar esse sistema que ja to me perdendo todo..
brigadão mesmo!!
abraços!
brigadão mesmo!!
abraços!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)