Guest --MXVinícius -- Postado Outubro 31, 2007 Denunciar Share Postado Outubro 31, 2007 Prezados,Gostaria de implementar meu código para tratar a mensagem "is not valid floating point value".O campo é o Quantidade.O código que tenho até o momento é o seguinte:procedure TForm1.DBEdit54Exit(Sender: TObject);varpreço: real;quant: real;beginwith DataModule1 dobeginpreço:= TProdPreco.AsFloat;quant:= StrToFloat(dbedit54.text);DBEdit154.Text := FloatToStr((quant) * (preço));//--Edit51.text:= DBedit51.text;Edit52.text:= DBedit52.text;Edit53.text:= DBedit53.text;end;end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 31, 2007 Denunciar Share Postado Outubro 31, 2007 Melhor forma é você tratar o conteúdo antes de utilizá-los na operação.Por exemplo, você pode no OnExit testar se o valor é válido ou inválido:procedure TForm1.DBEdit1(sender :TObject); begin try StrToFloat((Sender as TDBEdit).Text); // não atribuirá a ninguém o resultado, é apenas para tentar obter o erro except on E:Exception do begin E.Message := 'Valor digitado não é válido'; raise; end; end; end;Com isto você pode atribuir este procedimento de um evento OnExit de um DBEdit para todos os outros envolvidos (que farão a mesma validação) já que está descrito de forma genérica - utilizamos o Sender que é o DBEdtit que gerou o evento.a idéia é semelhante a deste post Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 31, 2007 Denunciar Share Postado Outubro 31, 2007 (editado) a mensagem "is not valid floating point value".a mensagem " não é valor de ponto flutuante válido.preço:= TProdPreco.AsFloat; quant:= StrToFloat(dbedit54.text); // erro de "is not valid floating point value". DBEdit154.Text := FloatToStr(quant * preço); vamos dizer que o valor do seu dbedit54.text seja '2.345,50' que é uma string ... ao tentar converte-lo para float ocorre o erro porque não é possivel converter o ponto ... para melhor entendimento veja: procedure TForm1.Button1Click(Sender: TObject); begin preço := 2345.78; // veja que aqui é ponto e não virgula quant := strtofloat('2.000,78'); // erro de "is not valid floating point value". result := preço * quant; edit3.text := format('%n',[result]); end; Obs: format('%n',[valor extendido]) Ex: valor = 2345,56 fica 2.345,56 Uma solução simploria seria retirar o ponto da string para depois fazer a conversão procedure TForm1.Button2Click(Sender: TObject); var s : string; begin preço := 345.78; S := '2.000,78'; while Pos('.', S) > 0 do delete(s,Pos('.', S),1); quant := strtofloat(trim(s)); result := preço * quant; edit3.text := format('%n',[result]); end; Editado Outubro 31, 2007 por Jhonas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --MXVinícius -- Postado Novembro 2, 2007 Denunciar Share Postado Novembro 2, 2007 Jonas, véi, eu ia perguntar sobre isso aí também e você acabou respondendo antes, obrigado cara.Micheus, espero sinceramente que você esteja ganhando muito bem como desenvolvedor cara, você saca muito, obrigado.Vou testar aqui e assim que conseguir, posto o resultado, obrigadoAbraço, Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --MXVinícius -- Postado Novembro 4, 2007 Denunciar Share Postado Novembro 4, 2007 Prezados, Eu fiz assim:procedure TForm1.DBEdit51Exit(Sender: TObject); begin if dbedit51.Text <> ''then begin DBEdit51.Enabled:= false; end else begin raise Exception.Create('O Campo para o código do pedido está vazio'); DBEdit51.SetFocus; end; end; E deu certo, ficou bom. Mas no outro código: procedure TForm1.DBEdit52Exit(Sender: TObject); begin if DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then begin Label113.Caption := DataModule1.TVnddorNome.asstring; DBEdit52.Enabled:= false; end else begin SHOWMESSAGE('VENDEDOR não ENCONTRADO'); DBEdit52.SetFocus; end; end;Eu não consegui fazer, porque ele faz uma busca e puxa dados da tabela então ele mostra o erro do showmessage quando está vazio e passa pra frente.Infelizmente tenho de pedir mastigado mesmo, juro que tentei e não consegui. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --MXVinícius -- Postado Novembro 5, 2007 Denunciar Share Postado Novembro 5, 2007 Prezados consegui fazer o código.Era questão de lógica simples.Vejam como ficou:procedure TForm1.DBEdit52Exit(Sender: TObject); begin if DBEdit52.text = '' then begin raise Exception.Create('O Campo para o código do vendedor está vazio'); DBEdit52.SetFocus; end; if DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then begin Label113.Caption := DataModule1.TVnddorNome.asstring; end else begin SHOWMESSAGE('VENDEDOR não ENCONTRADO'); DBEdit52.SetFocus; end; end;Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 6, 2007 Denunciar Share Postado Novembro 6, 2007 Micheus, espero sinceramente que você esteja ganhando muito bem como desenvolvedor cara, você saca muito, obrigado.Nem tanto, mas acreditaria se eu disse que é só hobby?!Em meu emprego oficial, sou apenas usuário. ;)Prezados consegui fazer o código.Era questão de lógica simples.Vejam como ficou:procedure TForm1.DBEdit52Exit(Sender: TObject); begin if DBEdit52.text = '' then begin raise Exception.Create('O Campo para o código do vendedor está vazio'); DBEdit52.SetFocus; end; if DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then begin Label113.Caption := DataModule1.TVnddorNome.asstring; end else begin SHOWMESSAGE('VENDEDOR não ENCONTRADO'); DBEdit52.SetFocus; end; end; MXVinícius, a título de observação, vale lembrar que tudo o que estiver após um RAISE não será executado. Então, você deve mover o foco para o componente desejado antes de chamar o raise: ... if DBEdit52.text = '' then begin DBEdit52.SetFocus; // <======== AQUI raise Exception.Create('O Campo para o código do vendedor está vazio'); end; ...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --MXVinícius --
Prezados,
Gostaria de implementar meu código para tratar a mensagem "is not valid floating point value".
O campo é o Quantidade.
O código que tenho até o momento é o seguinte:
procedure TForm1.DBEdit54Exit(Sender: TObject);
var
preço: real;
quant: real;
begin
with DataModule1 do
begin
preço:= TProdPreco.AsFloat;
quant:= StrToFloat(dbedit54.text);
DBEdit154.Text := FloatToStr((quant) * (preço));
//--
Edit51.text:= DBedit51.text;
Edit52.text:= DBedit52.text;
Edit53.text:= DBedit53.text;
end;
end;
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.