Erro de formatação .. inteiro??
Colegas,
Pesquisei mas não consegui implementar no meu fonte, nao tenho muita experiencia em programacao. Estou fazendo INSERT em uma tabela, no qual estou inserindo valores (R$ de uma TCurrencyEdit). Quando coloco valores do tipo 99,99 .. 87,88 .. etc.. meus valores sao armazenados corretamente com duas casas após a virgula.. mas quando coloco um valor inteiro, por exemplo ´10´ esse valor não é salvo na minha tabela como 10,00 ficando o valor de inteiro de ´10´ na Grid. Como posso gravar esse ,00 do valor inteiro ??? Utilizo Mysql 4.1.21 e meu campo é do tipo Float 10,2
Eis o código:
If LblOP.Caption = ´NOVO´ then
Begin
decimalseparator:=´.´; //DEFINE O SEPARADOR COMO . FICA 33.33 E NAO 33,33
with QueryProdutos do
Begin
SQL.Clear;
Sql.Add(´insert into produtos (DESCRICAO, PREÇO_COMPRA, PREÇO_VENDA, SALDO) values (´+´´´´+EdDescricao.text+´´´´+´,´+QuotedStr(FLOATTOSTR(EdValorCompra.VALUE))+´,´+QuotedStr(FLOATTOSTR(EdValorVenda.VALUE))+´,´+´´´´+EdSaldo.text+´´´)´);
ExecSql;
MessageDLG(´Produto inserido com sucesso!´,mtinformation, [mbok],0);
End;
decimalseparator:=´,´;
Grato pela ajuda.
Abraço
Pesquisei mas não consegui implementar no meu fonte, nao tenho muita experiencia em programacao. Estou fazendo INSERT em uma tabela, no qual estou inserindo valores (R$ de uma TCurrencyEdit). Quando coloco valores do tipo 99,99 .. 87,88 .. etc.. meus valores sao armazenados corretamente com duas casas após a virgula.. mas quando coloco um valor inteiro, por exemplo ´10´ esse valor não é salvo na minha tabela como 10,00 ficando o valor de inteiro de ´10´ na Grid. Como posso gravar esse ,00 do valor inteiro ??? Utilizo Mysql 4.1.21 e meu campo é do tipo Float 10,2
Eis o código:
If LblOP.Caption = ´NOVO´ then
Begin
decimalseparator:=´.´; //DEFINE O SEPARADOR COMO . FICA 33.33 E NAO 33,33
with QueryProdutos do
Begin
SQL.Clear;
Sql.Add(´insert into produtos (DESCRICAO, PREÇO_COMPRA, PREÇO_VENDA, SALDO) values (´+´´´´+EdDescricao.text+´´´´+´,´+QuotedStr(FLOATTOSTR(EdValorCompra.VALUE))+´,´+QuotedStr(FLOATTOSTR(EdValorVenda.VALUE))+´,´+´´´´+EdSaldo.text+´´´)´);
ExecSql;
MessageDLG(´Produto inserido com sucesso!´,mtinformation, [mbok],0);
End;
decimalseparator:=´,´;
Grato pela ajuda.
Abraço
Ce
Curtidas 0
Respostas
Kenio_c
14/02/2007
Amigo ce,
O q parece e que qdo vc coloca numeros com casas decimais o seu decimal separator funciona assim: 23,45 transforma em 23.45, desta forma o sql consegue interpretar. Mas qdo um valor sem fraçao o seu decimalseparator naum interpreta. Entao tente assim antes de passar por este decimalseparator transforme o seu valor no seguinte: formatFloat(´#,0.00´,SEU_VALOR.AsFloat); isto lhe retorna uma string com no minimo de 2 casa decimais.
O q parece e que qdo vc coloca numeros com casas decimais o seu decimal separator funciona assim: 23,45 transforma em 23.45, desta forma o sql consegue interpretar. Mas qdo um valor sem fraçao o seu decimalseparator naum interpreta. Entao tente assim antes de passar por este decimalseparator transforme o seu valor no seguinte: formatFloat(´#,0.00´,SEU_VALOR.AsFloat); isto lhe retorna uma string com no minimo de 2 casa decimais.
GOSTEI 0
Emerson Nascimento
14/02/2007
para evitar problemas de conversão, utilize parâmetros:
If LblOP.Caption = ´NOVO´ then with QueryProdutos do Begin Close; SQL.Clear; Sql.Add(´insert into produtos (DESCRICAO, PRECO_COMPRA, PRECO_VENDA, SALDO) ´); Sql.Add(´values (:DESCRICAO, :PRECO_COMPRA, :PRECO_VENDA, :SALDO)´); ParamByName(´DESCRICAO´).AsString := EdDescricao.text; ParamByName(´PRECO_COMPRA´).AsFloat := EdValorCompra.VALUE; ParamByName(´PRECO_VENDA´).AsFloat := EdValorVenda.VALUE; ParamByName(´SALDO´).AsFloat := EdSaldo.VALUE; ExecSql; MessageDLG(´Produto inserido com sucesso!´,mtinformation, [mbok],0); End;
GOSTEI 0
Ce
14/02/2007
para evitar problemas de conversão, utilize parâmetros:
If LblOP.Caption = ´NOVO´ then with QueryProdutos do Begin Close; SQL.Clear; Sql.Add(´insert into produtos (DESCRICAO, PRECO_COMPRA, PRECO_VENDA, SALDO) ´); Sql.Add(´values (:DESCRICAO, :PRECO_COMPRA, :PRECO_VENDA, :SALDO)´); ParamByName(´DESCRICAO´).AsString := EdDescricao.text; ParamByName(´PRECO_COMPRA´).AsFloat := EdValorCompra.VALUE; ParamByName(´PRECO_VENDA´).AsFloat := EdValorVenda.VALUE; ParamByName(´SALDO´).AsFloat := EdSaldo.VALUE; ExecSql; MessageDLG(´Produto inserido com sucesso!´,mtinformation, [mbok],0); End;
Amigo, modifiquei o fonte de acordo com sua sugestão. Não conteve erros mas continua salvando valores ´inteiros´ sem as casas decimais. Ex.: Inserir ´5´ no campo PREÇO_VENDA .. meu valor vai para a tabela com 5 no qual gostaria que fosse com 5,00 . Quando utilizo casas decimais, exemplo 5,55 nao tem problemas ! :oops:
GOSTEI 0
Emerson Nascimento
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
GOSTEI 0
Ce
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
Pois é, mesmo aqui pelo front.. coloco 5,00 e ele salva apenas ´5´ .. ja mudei o formato para Double, Decimal .. sempre quando inteiro ele nao poe o ,00
Utilizo o MysqlFront 2,5 .. onde q configuro ?? :?:
GOSTEI 0
Ce
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
Pois é, mesmo aqui pelo front.. coloco 5,00 e ele salva apenas ´5´ .. ja mudei o formato para Double, Decimal .. sempre quando inteiro ele nao poe o ,00
Utilizo o MysqlFront 2,5 .. onde q configuro ?? :?:
GOSTEI 0
Ce
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
Pois é, mesmo aqui pelo front.. coloco 5,00 e ele salva apenas ´5´ .. ja mudei o formato para Double, Decimal .. sempre quando inteiro ele nao poe o ,00
Utilizo o MysqlFront 2,5 .. onde q configuro ?? :?:
GOSTEI 0
Ce
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
Pois é, mesmo aqui pelo front.. coloco 5,00 e ele salva apenas ´5´ .. ja mudei o formato para Double, Decimal .. sempre quando inteiro ele nao poe o ,00
Utilizo o MysqlFront 2,5 .. onde q configuro ?? :?:
GOSTEI 0
Ce
14/02/2007
altere a exibição dos dados no seu front-end.
veja como estão configuradas os resultados do MySQL. no Firebird, mesmo que eu grave 5, se o campo for numeric(10,2) o valor exibido será 5,00
Pois é, mesmo aqui pelo front.. coloco 5,00 e ele salva apenas ´5´ .. ja mudei o formato para Double, Decimal .. sempre quando inteiro ele nao poe o ,00
Utilizo o MysqlFront 2,5 .. onde q configuro ?? :?:
GOSTEI 0