DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 23/2/2012 10:30:20 PM

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

 


País: Brasil
Estado: MT
Cidade: Cuiabá
Mensagens: 226
 Postado em: 24/2/2012 10:58:54 AM

Abel, como vc esta fazendo a consulta?
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3148
 Postado em: 24/2/2012 11:02:26 AM

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.
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 24/2/2012 11:05:02 AM


Citação:
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;

Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 24/2/2012 11:15:43 AM


Citação:

Citação:
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
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3148
 Postado em: 24/2/2012 11:18:02 AM

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.
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3148
 Postado em: 24/2/2012 11:18:47 AM

onde se lê cdsPagar, eia-se cdsSaidas conforme está no seu código. Me confundi.
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 24/2/2012 11:33:50 AM


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.


no caso cdsSaidas e clientDataSet mesmo. vou fazer como disse e posto aqui.
vlw pela ajuda.
obg
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 25/2/2012 11:22:18 AM

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,
por que será?
Mais Uma vez Obrigado...
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 25/2/2012 10:14:10 PM


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.
#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,
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
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 26/2/2012 08:06:49 PM

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
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3148
 Postado em: 27/2/2012 08:20:08 AM

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.
Abel de Castilhos dos Santos
 


País: Brasil
Estado: GO
Cidade: GOIANIA
Mensagens: 8
 Postado em: 27/2/2012 07:56:26 PM


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.


valew fera era esse o problema, declarei o codigo no OnExit e funcionou legal.
Obrigado a todos que cooperaram comigo.
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3148
 Postado em: 28/2/2012 01:36:21 PM

Fico feliz em ter ajudado. Precisando, estamos aqui.
Até a próxima.
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03