Fórum Digito 8.000,00 e no banco de dados aparece 8,00? #334532
11/12/2006
0
Digito 8.000,00 num edit e grava 8,00 no banco de dados
O banco de dados eh firebird 2.0 e o campo esta assim:
Field Name---------Field Type--------Size-----Scale
VALOR--------------NUMERIC----------15--------2--
Entao estou usando um edit e no evento onexit do edit esta assim
procedure TForm4.JvEdit1Exit(Sender: TObject); begin if jvedit1.text = ´´ then jvedit1.text:=´´ else jvedit1.text := StringReplace(jvedit1.text,´.´,´,´,[rfReplaceAll]); jvedit1.text:= FormatFloat(´,0.00;(,0.00)´,StrToFloat(jvedit1.Text)); end;
Bom parece estar formatado certo, pelo menos nunca tive problemas antes com outros edits.
No fields do dataset mascarei o displayformat assim ,0.00, para mostrar no dbgrid
O problema eh que nao esta gravando certo. esta como citei acima.
Aonde estou errando? :cry:
Gravo assim usando um query e um button
Trexo do codigo:
SQL.clear; dm.qsaida.Close; sql.add(´ Insert Into SAIDAS (valor) ´); sql.add(´ Values (:valor) ´); ParamByName(´valor´).Value:=jvedit1.Text; ExecSQL
Obrigado pela ajuda de todos
Adriano
Adriano_servitec
Curtir tópico
+ 0Posts
12/12/2006
Micheus
Se vc digitasse 8.000 no exit vc estaria modificando(StringReplace) o texto para 8,000 que convertido para Float, resultaria em 8.00;
Na verdade o que vc precisa é remover os pontos que possam existir, de modo que haja, no máximo, uma vírgula que será tratada como separador de decimal pela função StrToFloat.
Utilize apenas: [i:7ef396e3a7]StringReplace(jvedit1.text,´.´, [color=red:7ef396e3a7][b:7ef396e3a7]´´[/b:7ef396e3a7][/color:7ef396e3a7], [rfReplaceAll]);[/i:7ef396e3a7]
Acredito que vc terá que executar o mesmo procedimento ao atribuí-lo ao parâmetro de sua query.
[]s
Gostei + 0
12/12/2006
Adriano_servitec
Bom segui o que vc me disse mais agora se eu digitar 8.000,00 grava como 800.000,00
Ja mudei os pontos e virgulas entre ´ ´,´ ´ e nada. se eu modifico para um lado fica 8,00 se eu modifico para o outro fica 800.000,00 :cry:
Olha como deixei o codigo no onexit
E na parte que grava tambem fir o replace olhe
Gostei + 0
12/12/2006
Emerson Nascimento
altere a linha de código para:
svalor := stringreplace(jvedit1.text, ´.´, ´´, [rfReplaceAll]);
svalor := stringreplace(jvedit1.text, ´,´, DecimalSeparator, [rfReplaceAll]);
ParamByName(´valor´).Value := svalor;
supondo que o valor digitado tenha sido 8.000,00 o que ocorrerá é o seguinte:
svalor := ´8000,00´; e depois
svalor := ´8000.00´, que é um valor de ponto flutuante válido
agora uma pergunta: porque você não usa um componente de edição de valores ao invés desse de edição de textos?
Gostei + 0
12/12/2006
Adriano_servitec
Bom percebi que nao esta facil de fazer isso, pois no exemplo que vc me passou soh da para usar essa variavel como String
ai tive que fazer assim
Ou seja se eu passar o parametro assim
ParamByName(´P_valor´).[b:47fbe0a350]AsString[/b:47fbe0a350]:=sValor; - Funciona mais converte o valor
Agora se eu passar assim
ParamByName(´P_valor´).[b:47fbe0a350]AsFloat[/b:47fbe0a350]:=StrToFloat(sValor); //Da erro
[color=red]Is not a valid floatng point value[/color:47fbe0a350]
Ja mudei o campo valor para decimal 15,2 e nada, tambem resolvi criar um novo campo e chamei-o de basecalculo numeric 15,2 e jogar o parametro pra ele e nada. Continua do mesmo jeito, e o pior que sempre fiz assim e nunca tive problemas, ateh testei outro programa que fiz igualzinho a este e funciona perfeitamente.
Gostei + 0
12/12/2006
Emerson Nascimento
que erro, exatamente?
Gostei + 0
12/12/2006
Adriano_servitec
que erro, exatamente?[/quote:bdf2794fe8]
[b]is not a valid floating point value[b]
Gostei + 0
12/12/2006
Emerson Nascimento
xxxxx is not a valid floating point value
o que é exibido em xxxxx ?
Gostei + 0
12/12/2006
Adriano_servitec
[b:79d3f8de30]Project IPI2006.exe Raised Exception class EConvertError with message ´15.000,00´ is not a valid floating point value. Process stoped. Use Step or Run to Continue[/b:79d3f8de30]
Gostei + 0
12/12/2006
Emerson Nascimento
eu vacilei no código e você nem percebeu...
o correto é:
svalor := stringreplace(jvedit1.text, ´.´, ´´, [rfReplaceAll]);
svalor := stringreplace([b:7f69709b66]svalor[/b:7f69709b66], ´,´, DecimalSeparator, [rfReplaceAll]);
Gostei + 0
12/12/2006
Adriano_servitec
svalor := stringreplace(jvedit1.text, ´.´, ´´, [rfReplaceAll]); svalor := stringreplace(svalor, ´,´, DecimalSeparator, [rfReplaceAll]); ParamByName(´P_valor´).Value:=sValor;
Ai fica pior se eu digitar 1.500,00 no edit grava 1.500.000,00...rsrsrs :D
Mais falando serio. Ta Brabo :cry:
Gostei + 0
12/12/2006
Emerson Nascimento
svalor := stringreplace(jvedit1.text, ´.´, ´´, [rfReplaceAll]);
svalor := stringreplace(svalor, ´,´, ´.´, [rfReplaceAll]);
ParamByName(´P_valor´).Value:=sValor;
Gostei + 0
12/12/2006
Adriano_servitec
Eita que esse pedaço do projeto deu trabalho heim amigo...rsrsrsrs :D
Ufa ateh que enfim, vc matou a charada deste codigo maluco. :idea: :shock:
Tinha mudado tudo, ponto por virgula, virgula por ponto, menos incluido esse novo ´,´ depois do sValor. :oops:
Bom Emerson, mais uma vez, obrigado por ter paciencia e ter me ajudado mais uma vez.
Valeu mesmo amigo, caso resolvido
Abraços
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)