Problemas com campos que não calculam

Delphi

30/08/2005

Olá pessoal tudo bem?

Estou com um problema com dbedits que não fazem os cálculos; resumidamente explicando é assim:

quantidade x valor unitário = valor total

Implementei esse código logo abaixo, compila de boa, mas na hora que insiro os valores o dbedit de Valor Total não apresenta o resultado. Logo abaixo o código que inseri no evento OnCalcFields no ClientDataSet:

procedure TdtmEstoque.cdsProdPedidosCalcFields(DataSet: TDataSet);
var
iQtde: integer;
iValorUni : real;
begin
iQtde := strtoint(frmpedidos.dbeQtde.Text);
iValorUni := strtofloat(frmpedidos.dbeValorUnit.Text);
//
frmpedidos.dbeValorTotalProd.Text := FormatFloat(´#,0.00´, (iQtde * iValorUni));
end;

O que será que estou fazendo de errado?

Agradeço antecipadamente. ;)


Edibertoalves

Edibertoalves

Curtidas 0

Respostas

Massuda

Massuda

30/08/2005

Você devia usar o OnCalcFields para calcular os valores dos campos calculados do dataset... assim, ao invés de atualizar o DBEdit, você devia atualizar o [b:686dd0806a]campo calculado[/b:686dd0806a] que está ligado ao DBEdit.


GOSTEI 0
Edibertoalves

Edibertoalves

30/08/2005

Eu joguei todo esse código no evento OnCalcFields do ClientDataSet dos Pedidos. E mesmo assim não estou conseguindo!!!
O que tenho de codificar mais ??

Obrigado

[]´s


GOSTEI 0
Martins

Martins

30/08/2005

Você devia usar o OnCalcFields para calcular os valores dos campos calculados do dataset... assim, ao invés de atualizar o DBEdit, você devia atualizar o [b:13ff53a5c9]campo calculado[/b:13ff53a5c9] que está ligado ao DBEdit.


A pratica correta é a descrita aqui pelo amigo [b:13ff53a5c9]Massuda[/b:13ff53a5c9], uma vez q vc já está utilizando os DBEdit´s e eles estão linkados a seu DataSet, utilize um campo calculado, assim vc evitará dor de cabeça no futuro.


GOSTEI 0
Rjun

Rjun

30/08/2005

Acho que para o evento OnCalcFields seja disparado é necessário você ter campos calculados no seu dataset. Você tem?


GOSTEI 0
Edibertoalves

Edibertoalves

30/08/2005

Usei a seguinte implementação:

DataSet[´PPED_VLRTOTAL´] := DataSet[´PPED_QTDE´] * DataSet[´PPED_VLRUNI´];
frmpedidos.dbeValorTotalProd.Text := FormatFloat(´#,0.00´, DataSet[´pped_vlrtotal´]);

e essa aqui tb:

frmpedidos.dbeValorTotalProd.Text := formatfloat(´,0.00´, (cdsProdPedidosPPED_QTDE.Value * cdsProdPedidosPPED_VLRUNI.Value));


E não deu certo nas ambas
O que estou fazendo de errado?

Abraços! : :wink:


GOSTEI 0
Edibertoalves

Edibertoalves

30/08/2005

Rjun,

E aonde eu vejo isso ?
Quando eu clico duas vezes no ClientDatSet dos Pedidos e aparece os campos e quando clico em cada um do campo e tem uma propriedade chamada ´FieldKind´ no Object Inspector.
É essa opção que vc está falando??????

Obrigado

[]´s


GOSTEI 0
Rjun

Rjun

30/08/2005

Clique com o botão direito no seu dataset. Clique em New Field e crie o seu campo calculado(Calculate).


GOSTEI 0
Edibertoalves

Edibertoalves

30/08/2005

Rjun,

Está acontecendo o seguinte erro:

Project PEDIDOS.exe raised exception class EConvertError with message ´´´is not a valid integer value. Process stopped. Use Step or Run to continue.

Fiz conforme vc disse, criei um novo field através do Fields Editor. Compila de boa mas na hora que seleciono o produto para aparecer as informações dele juntamente com o preço é que está dando erro.

No New Field, em Field Type já deixei como Calculated e em Type em coloco qual tipo????

Obrigado

[]´s


GOSTEI 0
Rjun

Rjun

30/08/2005

Você pode usar esse campo que você criou(vou chama-lo de total) para calcular a informação que você quer exibir no seu edit. Crie ele como Float. No evento OnCalcFields, substitua a linha do seu DbEdit para o seguinte:

total := cdsProdPedidos.FieldByName(´Quantidade´).Value * cdsProdPedidos.FieldByName(´Valor´).Value * 


Depois, basta ligar esse campo ao seu dbedit. Eu não sei se os nomes dos campos no seu dataset são esses, mas acho que dá pra você entender o que eu quis fazer.


GOSTEI 0
Edibertoalves

Edibertoalves

30/08/2005

Rjun, Martins e Massuda.

Gostaria de agradecer a vcs pela ajuda.
Consegui implementar o código e os cálculos estão indo blz. Aí embaixo está o procedimento:

procedure TdtmEstoque.cdsProdPedidosCalcFields(DataSet: TDataSet);
begin
cdsProdPedidos.FieldByName(´PPED_VlRTOTAL´).AsFloat :=
cdsProdPedidos.FieldByName(´PPED_QTDE´).AsInteger *
cdsProdPedidos.Fieldbyname(´PPED_VLRUNI´).AsFloat;
end;

Valew mesmo. Obrigado

Agraços :lol:


GOSTEI 0
POSTAR