Autor
Mensagem
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..
Citação:
Abel, como vc esta fazendo a consulta?
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;
Citação:
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;
Citação:
Abel, como vc esta fazendo a consulta?
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
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.
Citação:
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.
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.
no caso cdsSaidas e clientDataSet mesmo. vou fazer como disse e posto aqui.
vlw pela ajuda.
obg
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.
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.
#Código
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;
Agora não ta dando nenhum erro quando rodo o programa, porem não visualiso o calculo no editTotalDevedor,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...
Citação:
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.
por que será?
Mais Uma vez Obrigado...
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.
#Código
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;
Agora não ta dando nenhum erro quando rodo o programa, porem não visualiso o calculo no editTotalDevedor,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
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
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.
Citação:
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.
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.
valew fera era esse o problema, declarei o codigo no OnExit e funcionou legal.
Obrigado a todos que cooperaram comigo.








