Fórum Calcular total de Pedidos #413176
23/02/2012
0
preciso efeutar calculo de totais de pedidos e não consigo.
funciona assim:
pedido 1 valor total => 200
pedido 2 valor total => 200
pedido 3 valor total => 200
total de pedidos =====>600 (é o que preciso)
já tentei via bd e no proprio delphi e nada
uso delphi 2005, firebird 2,5 e conecto ao bd via clientdataset
desde já agradeço..
Abel Santos
Curtir tópico
+ 0Posts
24/02/2012
Gustavo Bretas
Gostei + 0
24/02/2012
Joel Rodrigues
SELECT SUM(TOTAL) AS TOTAL_PEDIDOS FROM TbPEDIDOS WHERE (...)
Boa sorte.
Gostei + 0
24/02/2012
Abel Santos
cara to usando esse codigo:
With (dm.cdsSaidasValorTotal as ClientDataSet) do
begin
If Active Then Close;
CommandText := select sum(valor) from cdspagar;
Open;
labelTotalPedidos.Caption := formatfloat(#,##0.00, Fields[0].Value);
Close;
end;
Gostei + 0
24/02/2012
Abel Santos
cara to usando esse codigo:
With (dm.cdsSaidasValorTotal as ClientDataSet) do
begin
If Active Then Close;
CommandText := select sum(valor) from cdspagar;
Open;
labelTotalPedidos.Caption := formatfloat(#,##0.00, Fields[0].Value);
Close;
end;
Corrigindo:
With (dm.cdsSaidasValorTotal as TClientDataSet) do
begin
If Active Then Close;
CommandText := select sum(valor) from cdsSaidas;
Open;
labelTotalPedidos.Caption := formatfloat(#,##0.00, Fields[0].Value);
Close;
end;
ps. quando rodo o programa mostra erro no TClientDataSet
Gostei + 0
24/02/2012
Joel Rodrigues
cdsPagar é o nome da tabela no banco ou o nome do ClientDataSet? Na instrução SQL você deve fazer referência às tabelas do banco.
Para fazer a operação direto no ClientDataSet, você precisará fazer um loop lendo todos os registro do dataset, por exemplo:
(considerando que o ClientDataSet cdsPedidos já contém todos os pedidos que você quer somar)
var
total:double;
begin
total := 0;
cdsPedidos.First();
while not cdsPedidos.Eof do
begin
total = total+cdsPedidos.FieldByName(TOTAL).AsFloat;
cdsPedidos.Next();
end;
Boa sorte.
Gostei + 0
24/02/2012
Joel Rodrigues
Gostei + 0
24/02/2012
Abel Santos
cdsPagar é o nome da tabela no banco ou o nome do ClientDataSet? Na instrução SQL você deve fazer referência às tabelas do banco.
Para fazer a operação direto no ClientDataSet, você precisará fazer um loop lendo todos os registro do dataset, por exemplo:
(considerando que o ClientDataSet cdsPedidos já contém todos os pedidos que você quer somar)
var
total:double;
begin
total := 0;
cdsPedidos.First();
while not cdsPedidos.Eof do
begin
total = total+cdsPedidos.FieldByName(TOTAL).AsFloat;
cdsPedidos.Next();
end;
Boa sorte.
no caso cdsSaidas e clientDataSet mesmo. vou fazer como disse e posto aqui.
vlw pela ajuda.
obg
Gostei + 0
25/02/2012
Abel Santos
como ontem nao estava com a maquina com o delphi,
vou postar o codigo que estou usando baseado nas dicas que recebi.
procedure TformSisControleSaidas.EditTotalDevedorChange(Sender: TObject); var total:double; begin editTotalDevedor.TEXT:= FormatFloat(R$ ###,##0.00, StrToFloat(EditTotalDevedor.Text)); total:=0; DMSaidasSisControle.cdsSaidas.First(); while not DMSaidasSisControle.sdsSaidas.Eof do begin total := total + DMSaidasSisControle.sdsSaidas.FieldByName(TotalDevedor).AsFloat; DMSaidasSisControle.sdsSaidas.Next(); editTotalDevedor.Text := (Total); end; end;
por que será?
Mais Uma vez Obrigado...
Gostei + 0
25/02/2012
Abel Santos
como ontem nao estava com a maquina com o delphi,
vou postar o codigo que estou usando baseado nas dicas que recebi.
procedure TformSisControleSaidas.EditTotalDevedorChange(Sender: TObject); var total:double; begin editTotalDevedor.TEXT:= FormatFloat(R$ ###,##0.00, StrToFloat(EditTotalDevedor.Text)); total:=0; DMSaidasSisControle.cdsSaidas.First(); while not DMSaidasSisControle.sdsSaidas.Eof do begin total := total + DMSaidasSisControle.sdsSaidas.FieldByName(TotalDevedor).AsFloat; DMSaidasSisControle.sdsSaidas.Next(); editTotalDevedor.Text := (Total); end; end;
por que será?
Mais Uma vez Obrigado...
Amigos consegui resolver de uma forma mais simples usando a função TAggregateField no ClientDataSet,
so que agora ta dando esse erro:
could not convert variant of type (string) into type (boolean).
Alguem sabe porque? e como resolver?
Grato
Gostei + 0
26/02/2012
Abel Santos
project siscontrole.exe raised exception class EConvertError with message is not a valid float point value.
Executei com debug deu erro nessa primeira linha(QT := strtofloat(dbeditQuantidade.Text);
segue codigo total do dbeditValor
procedure TformSisControlePedidos.DBEditValorChange(Sender: TObject);
var
QT,Total: Real;
begin
try
QT := strtofloat(dbeditQuantidade.Text);
except
end;
try
Valor := strtofloat(dbeditValor.Text);
except
end;
try
Total := ( Valor * QT );
except
end;
dbeditTotal.text := floattostr(Total);
end;
mas esse problema so acontece quando clico no botao inserir, e quando clico nos dbedits em questão, testei alterar no dbgrid e nao deu erro algum imagino que tenha algo relacionado a codificação nos dbedits, porém quando rodo o programa sem debug , ou se abrir fora do Delphi a aplicação funciona legal.
de novo obrigado
Gostei + 0
27/02/2012
Joel Rodrigues
Boa sorte.
Gostei + 0
27/02/2012
Abel Santos
Boa sorte.
valew fera era esse o problema, declarei o codigo no OnExit e funcionou legal.
Obrigado a todos que cooperaram comigo.
Gostei + 0
28/02/2012
Joel Rodrigues
Até a próxima.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)