Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou com um pequeno problema. Tenho vários TDBEdit(s), organizados em colunas.
Uma para os valores (em reais) a outra para a porcentagem.
Para melhor entendimento, tirei uma screen do mesmo:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.goldner.com.br/imagem_prog.jpg&key=bb0e4699a25c5b6938f867780645e2bf14ce42256805f62e39b40d866b0ae951" alt="Imagem Postada" />
Vamos começar...
os cálculos para se obter a porcentagem são feitos da seguinte forma:
procedure TFrelat.BtporcentagemClick(Sender: TObject);varsoma : double;begin soma := Dbbebidas.Field.Value + Dbfrios.Field.Value + Dbcongelados.Field.Value + Dbacougue.Field.Value + Dbmassas.Field.Value + Dbhortifruti.Field.Value + Dbpadaria.Field.Value + Dbcereais.Field.Value + Dblimpeza.Field.Value + Dbfrente.Field.Value + Dbpetshop.Field.Value + Dboleos.Field.Value + Dbmatinais.Field.Value + Dbdoces.Field.Value + Dbconservas.Field.Value + Dbperfumaria.Field.Value + Dbbiscoito.Field.Value + Dbutilidades.Field.Value + Dbdieteticos.Field.Value + Dbleite.Field.Value; Pbebidas.Text := Dbbebidas.Field.Value 100 / soma; Pfrios.Text := Dbfrios.Field.Value 100 / soma; Pcongelados.Text := Dbcongelados.Field.Value 100 / soma; Pacougue.Text := Dbacougue.Field.Value 100 / soma; Pmassas.Text := Dbmassas.Field.Value 100 / soma; Phortifruti.Text := Dbhortifruti.Field.Value 100 / soma; Ppadaria.Text := Dbpadaria.Field.Value 100 / soma; Pcereais.Text := Dbcereais.Field.Value 100 / soma; Plimpeza.Text := Dblimpeza.Field.Value 100 / soma; Pfrente.Text := Dbfrente.Field.Value 100 / soma; Ppetshop.Text := Dbpetshop.Field.Value 100 / soma; Poleos.Text := Dboleos.Field.Value 100 / soma; Pmatinais.Text := Dbmatinais.Field.Value 100 / soma; Pdoces.Text := Dbdoces.Field.Value 100 / soma; Pconservas.Text := Dbconservas.Field.Value 100 / soma; Pperfumaria.Text := Dbperfumaria.Field.Value 100 / soma; Pbiscoito.Text := Dbbiscoito.Field.Value 100 / soma; Putilidades.Text := Dbutilidades.Field.Value 100 / soma; Pdieteticos.Text := Dbdieteticos.Field.Value 100 / soma; Pleite.Text := Dbleite.Field.Value 100 / soma;end;
E o do Valor Total assim:
procedure TFrelat.BtvalorClick(Sender: TObject);varsoma : double;begin soma := Dbbebidas.Field.Value + Dbfrios.Field.Value + Dbcongelados.Field.Value + Dbacougue.Field.Value + Dbmassas.Field.Value + Dbhortifruti.Field.Value + Dbpadaria.Field.Value + Dbcereais.Field.Value + Dblimpeza.Field.Value + Dbfrente.Field.Value + Dbpetshop.Field.Value + Dboleos.Field.Value + Dbmatinais.Field.Value + Dbdoces.Field.Value + Dbconservas.Field.Value + Dbperfumaria.Field.Value + Dbbiscoito.Field.Value + Dbutilidades.Field.Value + Dbdieteticos.Field.Value + Dbleite.Field.Value; Dbvalortotal.Text := FloattoStr(soma);end;o problema é que caso eu LIMPE qualquer um dos campos dos VALORES (R$) e clique em Porcentagem ou em Valor Total aparece esse erro:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.goldner.com.br/imagem_prog2.jpg&key=821a500e334d4465ac2b7988982b74a4c766343a2c1b983e0d6f98994e9d1946" alt="Imagem Postada" />
pelo que está me parecendo, ele avisa que porque eu deletei o campo, então ele virou NULL e não Double como está descrito no código.
O que eu poderia fazer para sanar esse problema ?
Desde já agradeço,
Thiago.
>
O que poderia fazer é sempre verificar antes se tem valor o campo, algo do tipo:
if not Pbebidas.Field.IsNull then Pbebidas.Text := Dbbebidas.Field.Value * 100 / soma;
Então eu teria que fazer esse procedimento para cada campo ? o.O
Sim.
Márcio, agora quando deixo algum campos de valor (R$) sem nada aparece o seguinte:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img.photobucket.com/albums/v479/ZueRa/img_prog.jpg&key=7a545b78267d03fd218cc3b94be6172e7aab0128c12f6b3997858505dafa7943" alt="Imagem Postada" />
isso acontece quando clico no botão porcentagem!
o que poderá ser ?
obs.: o código que você me passou não resolveu o meu problema o.O
Divisão por zero não é possível, no caso somente pode efetuar o cálculo se o campo a ser dividido for maior que zero:
if ((not Pbebidas.Field.IsNull) and (soma > 0)) then Pbebidas.Text := Dbbebidas.Field.Value * 100 / soma;
>
Márcio, agora quando deixo algum campos de valor (R$) sem nada aparece o seguinte:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img.photobucket.com/albums/v479/ZueRa/img_prog.jpg&key=7a545b78267d03fd218cc3b94be6172e7aab0128c12f6b3997858505dafa7943" alt="Imagem Postada" />
isso acontece quando clico no botão porcentagem!
o que poderá ser ?
obs.: o código que você me passou não resolveu o meu problema o.O
Márcio, acho que você não entendeu.Ele continua com o mesmo erro, já tentei de várias maneiras modificar o teu código, porque quero que ele dê um tipo de Mensagem: "coloque algum valor..." algo do tipo.
Já tenti, porém não consegui.
Abraços.
Entendi perfeitamente o que você disse, apenas mostrei o que podia ser feito. Se quer obrigar o usuário informar algo, basta validar os edits antes, caso não esteja preenchido faz com que ele preencha, uma simples validação antes.
O que poderia fazer é sempre verificar antes se tem valor o campo, algo do tipo:
if not Pbebidas.Field.IsNull then Pbebidas.Text := Dbbebidas.Field.Value * 100 / soma;