Selecao DevMedia QUERO SER PRIME

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

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

Mahdak

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!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar