Problemas com campos que não calculam
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. ;)
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
Curtidas 0
Respostas
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
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
O que tenho de codificar mais ??
Obrigado
[]´s
GOSTEI 0
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
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
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:
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
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
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
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
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
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
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:
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.
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
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:
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