Calcular total de Pedidos
Galera boa Noite,
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..
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
Curtidas 0
Respostas
Gustavo Bretas
23/02/2012
Abel, como vc esta fazendo a consulta?
GOSTEI 0
Joel Rodrigues
23/02/2012
Cara, é melhor você detalhar um pouco mais a situação, mas acho que uma consulta como a seguinte te ajudaria:
SELECT SUM(TOTAL) AS TOTAL_PEDIDOS FROM TbPEDIDOS WHERE (...)
Boa sorte.
SELECT SUM(TOTAL) AS TOTAL_PEDIDOS FROM TbPEDIDOS WHERE (...)
Boa sorte.
GOSTEI 0
Abel Santos
23/02/2012
Abel, como vc esta fazendo a consulta?
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
Abel Santos
23/02/2012
Abel, como vc esta fazendo a consulta?
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
Joel Rodrigues
23/02/2012
SELECT SUM(VALOR) FROM cdsPagar ?
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.
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
Joel Rodrigues
23/02/2012
onde se lê cdsPagar, eia-se cdsSaidas conforme está no seu código. Me confundi.
GOSTEI 0
Abel Santos
23/02/2012
SELECT SUM(VALOR) FROM cdsPagar ?
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.
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
Abel Santos
23/02/2012
bom dia galera,
como ontem nao estava com a maquina com o delphi,
vou postar o codigo que estou usando baseado nas dicas que recebi.
Agora não ta dando nenhum erro quando rodo o programa, porem não visualiso o calculo no editTotalDevedor,
por que será?
Mais Uma vez Obrigado...
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
Abel Santos
23/02/2012
bom dia galera,
como ontem nao estava com a maquina com o delphi,
vou postar o codigo que estou usando baseado nas dicas que recebi.
Agora não ta dando nenhum erro quando rodo o programa, porem não visualiso o calculo no editTotalDevedor,
por que será?
Mais Uma vez Obrigado...
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
Abel Santos
23/02/2012
Esse problema citado acima consegui resolver(em parte), mas agora esta dando este erro:
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
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
Joel Rodrigues
23/02/2012
Pelo que pude ver, o que está ocorrendo é o seguinte: como você fez toda essa rotina no evento onChange de um edit, em algum momento o texto desse edit é nulo/branco e por isso ocorre erro de conversão quando você tenta passar o texto para float. Um prática melhor seria você colocar isso no onExit, por exemplo. Não creio que isso vá atrapalhar o funcionamento/desempenho de sua aplicação.
Boa sorte.
Boa sorte.
GOSTEI 0
Abel Santos
23/02/2012
Pelo que pude ver, o que está ocorrendo é o seguinte: como você fez toda essa rotina no evento onChange de um edit, em algum momento o texto desse edit é nulo/branco e por isso ocorre erro de conversão quando você tenta passar o texto para float. Um prática melhor seria você colocar isso no onExit, por exemplo. Não creio que isso vá atrapalhar o funcionamento/desempenho de sua aplicação.
Boa sorte.
Boa sorte.
valew fera era esse o problema, declarei o codigo no OnExit e funcionou legal.
Obrigado a todos que cooperaram comigo.
GOSTEI 0
Joel Rodrigues
23/02/2012
Fico feliz em ter ajudado. Precisando, estamos aqui.
Até a próxima.
Até a próxima.
GOSTEI 0