Ricardo80 Posted August 18, 2012 at 06:49 PM Report #472766 Posted August 18, 2012 at 06:49 PM 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....
jlpcalado Posted August 19, 2012 at 12:15 AM Report #472798 Posted August 19, 2012 at 12:15 AM 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)
ribeiro55 Posted August 19, 2012 at 10:40 AM Report #472822 Posted August 19, 2012 at 10:40 AM 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"
jlpcalado Posted August 20, 2012 at 12:38 AM Report #472887 Posted August 20, 2012 at 12:38 AM 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
ribeiro55 Posted August 20, 2012 at 09:26 AM Report #472900 Posted August 20, 2012 at 09:26 AM 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"
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now