Jump to content

Recommended Posts

Posted

Boa tarde pessoal, eu sei que é uma dúvida simples pra vcs, mas pra mim que sou iniciante estou um pouco perdido

Vamos ao que interessa, tenho um textbox que qndo sai do foco, sai bonitinho formatado com R$ e só duas casas decimais, exemplo R$12,15 até ai tudo certo, o problema vem qndo eu vou mandar isso pro banco de dados, eu uso o postgresql, e no postgres valor numérico é separado por .(ponto), como faço pra passar o conteúdo pro postgres neste caso???

Detalhe, ja tentei com replace(campo,",",".") e n"ao adiantou

Até mais....

Posted

Olá Ricardo80.

Os separadores decimais das formatações numéricas e currency são definidas no 'Regional Settings'

Se o computador onde corre o prog. tiver definido como separador decimal a vírgula ',' ao construires o sql estarás a colocar vírgulas a mais se utilizares os valores diretamente a partir das textboxs.

Para ultrapassar a situação (independente dos reg. settings do pc), deves utilizar parâmetros nos teus comandos sql, tipo

'Update Cliente set Saldo=@Saldo, ...'

....@Saldo=CDec(TextBoxCurr.Text)

Posted

Na verdade, neste caso não interessa o locale da aplicação.

Primeiro porque se está a extraír o valor de uma TextBox (String) e depois porque em query usa-se o ponto, e o valor envolvido em plicas.

Se o que está na textbox é 12,15, basta-te um replace do "," para ".", fora da query, e concatenar directamente dentro de plicas.

Teria de ficar algo como campo='12.15' na query, para não teres problemas.

O campo na base de dados também tinha de ter um tipo de dados, por exemplo Decimal 7,2 (para um máximo de 99999,99)

Por outro lado, deverias estar a usar parâmetros. Sempre.

O parâmetro permite-te descuidar a representação na query: focas-te apenas nos tipos de dados.

Assim, ao extraíres o valor da textbox com o CDec, o formato já atende ao locale e vai ser diferente consoante as definições regionais do client.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

Discordando...

Na verdade, neste ( e qualquer outro caso) INTERESSA o locale da aplicação. (?!)

A utilização de parâmetros, na contrução do sql, permite a abstração do 'locale' desde que os valores sejam TRADUZIDOS e introduzidos em conformidade com o dito 'locale'.

Vejamos, se por ex., o separador decimal no sistema do utilizador é a virgula e o utilizador (na boa...pensando que é o ponto) introduz na textbox o texto '12.34' o valor efetivo do CDec é 1234 (i.e ignora o ponto...) ,não dando erro de sintaxe...mas um GRANDE ERRO de informação.

Dito isto, a abordagem que deve estar SEMPRE presente na mente do desenvolvedor (nesta e outras mais situações) é a validação da informação introduzida pelo utilizador (por antecipação...)

NÃO É FÁCIL - há 15 anos que enfrento desafios (quase) diários com este problema: O UTILIZADOR

Posted

Eu entendo isso, mas no caso da concatenação de strings, para SQL não interessa o locale. Estás a concatenar strings e SQL apenas traduz decimais do ponto. Podes ter o client localizado onde quiseres.

Estou a falar única e exclusivamente da concatenação de valores decimais na query. Nada mais. Não estou a dizer que deve ser feito assim ou assado. É uma mera exposição de factos que ajudam a enriquecer aquilo que se entende do problema.

Quanto aos parametros, tenho a mesma opinião do que tu, e disse exactamente o mesmo. Aconselhei até a utilizar sempre pois só assim se garante a integridade nas operações com os dados.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.