PONTO E VIRGULA
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á!!!
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á!!!
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.
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.
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á!
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á!
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.
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.
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
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
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)
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)
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.
Foi mal Luiz. Respondemos praticamente juntos. Perdi por 12 segundos. rsrsrs
Vou ver certinho em casa pessoal...
qualquer dúvida volto a gritar...
se funcionar eu encerro o topico okzão??
qualquer dúvida volto a gritar...
se funcionar eu encerro o topico okzão??
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.
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.
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
'(V)irgula (P)onto
if rs!Decimal = "V" then
format(valor, "#0,0")
else
format(valor, "#0.0")
endif
Tópico encerrado , respostas não são mais permitidas