Fórum Problemas com campos que não calculam #293726

30/08/2005

0

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

Responder

Posts

30/08/2005

Massuda

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.


Responder

Gostei + 0

30/08/2005

Edibertoalves

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


Responder

Gostei + 0

30/08/2005

Martins

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.


Responder

Gostei + 0

30/08/2005

Rjun

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


Responder

Gostei + 0

30/08/2005

Edibertoalves

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:


Responder

Gostei + 0

30/08/2005

Edibertoalves

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


Responder

Gostei + 0

30/08/2005

Rjun

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


Responder

Gostei + 0

30/08/2005

Edibertoalves

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


Responder

Gostei + 0

30/08/2005

Rjun

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.


Responder

Gostei + 0

30/08/2005

Edibertoalves

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar