Erro is not a valid floating point value

Delphi

25/02/2012

Tenho um formulario de controle de estoque e preciso usar numeros quebrados, porem ao tentar dar entrada ou saida no estoque ele mostra o erro is not a valid floating point value, mas o engraçado é que ao tentar dar saida (ou entrada) na primeira vez ele aceita, porem se tento de novo ele mostra o erro independente de ser numero inteiro ou quebrado (ex: 23,4). O erro acontece ao sair da edit e os codigos utilizados sao estes:
if edit2.text = emptystr then 
  begin 
    edit2.Text := 0; 
  end; 
if radiobutton1.Checked = true then 
  begin 
    estoque1 := strtofloat(ADOQuery1.FieldByName(E1).DisplayText) + strtofloat(edit2.Text); 
    DBEdit1.Text := FloatToStr(estoque1); 
    Edit10.Text := edit2.Text; 
    DBEdit9.Text := DBEdit1.Text; 
  end; 
if radiobutton2.Checked = true then 
  begin 
    estoque1 := strtofloat(ADOQuery1.FieldByName(E1).DisplayText) - strtofloat(edit2.Text); 
    DBEdit1.Text := FloatToStr(estoque1); 
    Edit10.Text := edit2.Text; 
    DBEdit9.Text := DBEdit1.Text; 
  end; 
  Edit10.Text := floattostr(strtofloat(edit2.Text) + strtofloat(edit3.Text) + strtofloat(edit4.Text) + strtofloat(edit5.Text) + strtofloat(edit6.Text) + strtofloat(edit7.Text) + strtofloat(edit8.Text) + strtofloat(edit9.Text)); 
  DBEdit9.Text := floattostr( strtofloat(DBEdit1.Text) + strtofloat(DBEdit2.Text) + strtofloat(DBEdit3.Text) + strtofloat(DBEdit4.Text) + strtofloat(DBEdit5.Text) + strtofloat(DBEdit6.Text) + strtofloat(DBEdit7.Text) + strtofloat(DBEdit8.Text)); 
  Total := (strtofloat(DBEdit9.Text) * (ADOQuery1.FieldByName(valor).AsCurrency)); 
  DBEdit10.Text := FormatFloat(##,###,##0.00,total);
Daniel

Daniel

Curtidas 0

Respostas

Christian Giuliani

Christian Giuliani

25/02/2012

Poderia postar o código mais claro? Esta um pouco confuso pra quem olha pela primeira vez. Mas já de saída poderia tentar usar o currtostr() ou strtocurr() no lugar do floattostr() e strtofloat().
Outra coisa, notei que usa o DBEdit, então pergunto se você esta editando ele pra inserir o novo conteúdo? Não costumo usar estes componentes, uso sempre os Edits normais e passo os dados via programação pra saída ou entrada, demora mais com certeza mas consigo um maior controle.
Bem, se puder explicar melhor o que pensou em cada sequência de comando posso ajudar a resolver o problema.
:)
GOSTEI 0
Gustavo Bretas

Gustavo Bretas

25/02/2012

E ae Daniel, tudo certo?

Quando estava iniciando na vida de desenvolvimento, trabalhei em uma empresa que usava componentes DB, e me traumatizei, fiquei com aversão a componentes DB e quando saí de la passei a usar Edit normal, e com a ajuda da Orientação a Objeto, Herança e muito Type Cast desenvolvi um frameword que considerava produtivo, até que me mostraram como trabalhar com componente DB sem sofrimento... rsrs!

Daniel, eu não sei se vc é novato no assunto ou não, mas já que vc esta usando DB, evite usar os dados direto no componente, use sempre pelo field do dataset, assim vc poderá trabalhar com os tipos dos dados que esta tratrando sem ficar convertendo aqui e ali.

Então a dica é: ao invés de fazer DBEdit1.Text, faça DBEdit1.Field.<AsString, AsInteger, AsFloat, ...>, e se puder trate direto no field do Dataset (Query, Client).

O código esta bem embaralhado (bug do fórum, eu acho) e não encontrei o erro, mas tente a dica pra ver o que acontece!

Abraço!
GOSTEI 0
POSTAR