PONTO E VIRGULA

USUARIO.EXCLUIDOS 06/08/2007 14:46:45
#229657
Pessoal...

Estou com o seguinte problema.

Ao fazer meu Form de cadastro existe alguns campos onde o texto (no caso número) será inserido de forma decimal. Mas como posso fazer p/ gravar isto no banco de dados em uma variável? Pergunto isso porque o banco aceita apenas número com separador decimal Ponto(.) e aqui na minha região é muito usado a vírgula (,).

Alguém sabe como faço p/ transformar ÂÂ'quando digitada a Vírgula (,) em ponto (.)

Agradeço desde já!!!
USUARIO.EXCLUIDOS 06/08/2007 15:12:44
#229661
Resposta escolhida
Não sei qual banco você está usando, mas vamos lá...

O ideal seria na hora de dar o update, salvar no banco no formato ponto (.).

Então seria assim:

sqll = "update sua tabela set..."

onde o campo em questão seria substituído por:

Replace(Replace(SuaText.text,".",""),",",".")

Assim, você substituiria o ponto (dos milhares) por nada e a vÂÂ'rigula decinal por ponto.


USUARIO.EXCLUIDOS 06/08/2007 16:07:30
#229668
Bom.. primeiramente meu programa é rodado com um banco Acess, desculpe não tê-lo mencionado pois achei que essa conversão era feita dentro do próprio VB e não por intermédio de comandos dados ao BD.

Bom.. quanto ao assunto...

Pelo visto esta função replace irá trocar todos os pontos por nada e todas as vírgula por ponto e salvar no BD certo??

Mas e se por acaso eu digitar o ponto no local certo. Exemplo:

Tenho a divisão 1/2 e na TextBox terei de escrever o resultado:

Hipótese 1 - Se eu digitar 0,5 como resposta ao gravar no BD ela passará a ficar como 0.5.

Hipótese 2 - Se eu digitar 0.5 como resposta ao gravar no BD ela pasará a ficar como 5.


Estou certo ou estou falando besteira??

PS.: Ainda não testei o código, tentarei mais tarde, mas conheçendo a função já ajuda.

Agradeço desde já!
USUARIO.EXCLUIDOS 06/08/2007 16:13:43
#229671
Sugiro usar o replace e utilizar como decimal vírgula. Assim é o padrão brasileiro.

Ex: 1.203,56

Se for do outro jeito que vc disse, será o padrão americano (e vc teria que mudar a configuração regional no painel de controle):

Ex: 1,203.56

Se optar pelo segundo modo, altere a configuração regional e não será necessário utilizar a função replace.


flw.
USUARIO.EXCLUIDOS 06/08/2007 16:18:26
#229673
Eu lhe entendo perfeitamente...

mas o caso é o seguinte... como sempre me ensinaram o programa tem de ser a "PROVA DE BURRO". Então eu gostaria de fazer esse implemento nele, ou seja, se vier 1 brasileiro escrever ele funcionará e se vier um gringo ele tbm funcione...

Se eu sempo utilizar vírgula e por um motivo qualquer eu decida utilizar o ponto o programa deverá se comportar da mesma forma...

Entendo a sintaxe do Replace pelo que vc me apresentou agora gostaria de resolver este meu outro probleminha que pelo amor de deus eu já quebrei a cabeça p/ tentar dar um jeito nisso!!!

Agradeço sua presteza e se puder me dar + um auxílio ficarei muito grato
LCSD 06/08/2007 16:27:21
#229677
Na verdade, na base de dados VC grava com PONTO os campos decimais, e sem nada nestes campos se refirindo a milhar.

Portanto, o uso do REPLACE.

SE VC abrir o access, VC verá este campo como se ele tivesse gravado com PONTO para MILHAR e VIRGULA para decimal. Só que não se iluda porque isso é somente uma máscara de visualização deste campo.

No seu sistema, pra VC mostrar este valor, faça uma FORMAT deste campo, como vc deseja que seja mostrado (com ponto em milhar e vírgula para decimal)
TAMANINI 06/08/2007 16:27:33
#229678
RBauer, o que você pode fazer é gravar com um formato padrão. No meu caso, os campos númericos que utilizo no access são double, sempre que eu for gravar eu faço um replace() para converter a "," para ".", senão gera erro de sintaxe ao tentar fazer um insert ou update. No access quando é gravado ele fica com a vírgula, mesmo que eu tenha convertido com o replace na hora de gravar. E quando for fazer um consulta, apenas utilize o format(valor, "#0.0"). Com isso a exibição ficará a cargo da configurações regionais. Se estiver configurado com ",", exibirá no grid a "," e vice-versa.
TAMANINI 06/08/2007 16:30:20
#229679
Foi mal Luiz. Respondemos praticamente juntos. Perdi por 12 segundos. rsrsrs
USUARIO.EXCLUIDOS 06/08/2007 16:58:44
#229689
Vou ver certinho em casa pessoal...

qualquer dúvida volto a gritar...

se funcionar eu encerro o topico okzão??
USUARIO.EXCLUIDOS 06/08/2007 17:07:40
#229692
Para evitar problemas de arredondamento, tipo:
12.345,0056767867 ou 12,345.0056767867 pode acabar virando 12.345,01
Eu guardo os numeros em variaveis DOUBLE no programa, formatando na hora de mostrar.
Na hora de gravar no BD se são valores numericos com duas decimais eu multiplico por 100 e gravo como TEXTO (20 posicoes) no BD ou pode gravar no BD como DOUBLE (sem decimais).
Dai na hora de trabalhar com os valores lendo do BD, dividir por 100 e formatar.
Dessa forma asseguro que os arredondamentos por conta das conversões não vão ocorrer.

CDBF (FORMAT (valor.text, "############0.00")) * 100 // para gravar no BD
FORMAT (valor_BD / 100, "###,###,##0.00") // na hora de mostrar.

USUARIO.EXCLUIDOS 06/08/2007 17:18:22
#229698
rbauer, seguinte, vc pode colocar essa configuracao no seu programa, para quando a empresa for usa-lo configurar a opcao de ponto ou virgula nas decimais, ai vc so le essa tabela de configuracoes e formata do jeito que tiver configurado. exemplo

'(V)irgula (P)onto

if rs!Decimal = "V" then
format(valor, "#0,0")
else
format(valor, "#0.0")
endif
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas