CAMPO COM SEPARADOR DE MILHARES NO FB

SURI 03/08/2009 12:51:56
#318679
Ai malta xto cm um probleminha

Alterei um campo de double precision para numeric afim de aceitar valor como 900.000,05. Porém há um choque porque a text box que despeja esse valor ao campo na BD formata o valor digitado: [Ô]##,###.#0[Ô] acontece que ao enviar o numero a BD da erro!! so aceita caso o numero digitado seja por ex 900000.05 . So que neste caso é complicado porque tem usuarios que digitam ja o numero com a divisão de milhares e isso está a criar um erro grave!! Alguem tem uma solução para isto??
F001E 03/08/2009 13:16:51
#318687
Resposta escolhida
faz o seguinte....dexa o usuario digitar o Milhar normal...quando voce for salvar faz um tratamento nesse campo....exemplo...

Valor = Replace(Replace(txtValor.text,[Ô].[Ô],[Ô][Ô]),[Ô],[Ô],[Ô][Ô])
Valor = Format(Valor,[Ô]0.00[Ô])
Valor = Raplace(Valor,[Ô],[Ô],[Ô][Ô])

isso deve resolver seu problema.....e claro...no banco de Dados vai ficar assim 90000.05..dai quando vc for mostrar os Dados..voce
formatade novo......Valor = format(Valor,[Ô]###,##0.00[Ô]) = 90.000,05
SURI 03/08/2009 13:59:37
#318695
Ok Fernando vou tentar isso ainda hoje, caso funcione eu encerrarei o tópico


obrigado!
FUTURA 03/08/2009 15:06:18
#318708
da uma melhorada nisto:

Valor = Replace(Replace(txtValor.text,[Ô].[Ô],[Ô][Ô]),[Ô],[Ô],[Ô][Ô])
Valor = Format(Valor,[Ô]0.00[Ô])
Valor = Raplace(Valor,[Ô],[Ô],[Ô][Ô])

valor=replace(cdbl(txtvalor.text),[Ô],[Ô],[Ô].[Ô]) <----o cdbl() tira o milhar e o replace troca virgula por ponto; eu uso direto na instrução sql:

insert into tabela (codigo,valor) values ([Ô] & txtcodigo & [Ô],[Ô] & replace(cdbl(txtvalor.text),[Ô],[Ô],[Ô].[Ô]) & [Ô] )

fica mais limpo e funcional.......

F001E 03/08/2009 17:47:14
#318744
eu sei que fica limpo e funcional....mas dica é dica....depois é por conta dele.....
RICART 03/08/2009 18:07:05
#318746
Só para complementar o Fernando e o Futura:
Os valores são gravados sem os separadores de milhar e com o [Ô].[Ô] separando os decimais.
Independentemente do banco de dados, vc sempre precisará tratar o campo antes de enviar para o banco. Vc pode criar uma função que faça isso sempre que vc precisar:.
Quanodo vc retorar o dado, se o seu campo possuir uma máscará e esta for capaz de interpretar o dado, dará tudo certo, do contrário, vc formata no código e pronto.

Isso vale para os campos timestamp, date, numeric, integer, doubleprecision.

A! Consulte no macoratti sobre isso que ele lhe dá umas dicas sobre arredondamento, pois, dependendo do tipo do campo, vc terá problemas com os pontos flutuantes.

Tópico encerrado , respostas não são mais permitidas