Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Zeant

SQL com Numeros Decimais

Recommended Posts

Zeant

Boas pessoal,

Estou com uma duvida fazer uma consulta na base de dados....

ao enviar a frase sql "SELECT * FROM tabela WHERE valor =" & textbox.text se por exemplo o textbox conter o valor decimal 2,5 da um erro no sql, que não pode conter virgulas na frase sql...

Agora se o enviar valor decimal "2.3" no textbox o que vai acontecer é que o valor passa para "23"...

Se alguem me poder ajudar agradecia que já tou  :wallbash:

Share this post


Link to post
Share on other sites
ricardoantunes

Faz uma função que converte as virgulas em pontos... tipo SELECT * FROM tabela WHERE valor =" & convertevirgua(textbox.text) &"

Share this post


Link to post
Share on other sites
ricardoantunes

até te deixo um exemplo em VB6...

Public Function ConverteVirgula(ByVal Valor As Variant) As String

    Dim STR As String, i As Long

    STR = CStr(Valor)

    i = InStr(1, STR, ",")

    If i = 0 Then

        ConverteVirgula = STR

        Exit Function

    End If

    ConverteVirgula = Mid(STR, 1, i - 1) & "." & Mid(Valor, i + 1)

    If Len(ConverteVirgula) > Len(STR) Or Len(ConverteVirgula) < Len(STR) Then

        MsgBox "Erro!! Conversão de Virgulas.", vbCritical

        ConverteVirgula = STR

    End If

End Function

Share this post


Link to post
Share on other sites
Zeant

vou ver se isso resulta, mas acho que já tentei qualquer coisa do tipo e acho que não deu....

Já testei tanta coisa, que ja não sei o que dah certo :)

Share this post


Link to post
Share on other sites
jpaulino

Olá,

Até podes fazer como o ricardoantunes sugeriu, mas o melhor mesmo é usares parameters. Dessa forma só tens de indicar o valor e não precisas de te preocupar.

Já agora não necessitas de uma função tão complexa para substituires as virgulas em ponto, basta fazer:

Me.TextBox1.Text.Replace(","c, "."c)

Share this post


Link to post
Share on other sites
Zeant

ya so que se eu fizer isso, o que vai acontecer é que depois quando eu for gravar o valor ele grava como inteiro...

porque nao entede que a seguir  ao ponto vem as casas decimais... ele so percebe que é numero decimal com a virgula, mas no sql de leitura da erro  :wallbash:

Share this post


Link to post
Share on other sites
Zeant

já percebi a cena de isto...

tenho que trocar o ponto pela virgula antes da consulta, depois para inserir os dados na tabela tenho que voltar o colucar a virgula, só assim que funciona...

vou tentar usar isso jpaulino...

Mas se alguem souber outra forma de o fazer e mais eficaz que diga...

Share this post


Link to post
Share on other sites
Zeant

a dica que des-te foi boa, mas eu não me tava a referir a isso...

é porque assim eu tenho que fazer:

1- trocar a virgular pelo ponto;

2- leitura dos doados;

3- trocar o ponto pela virgula;

4- gravar;

acho que vou fazer por "parameters" tudo....

Obrigado pela ajuda pessoal

Share this post


Link to post
Share on other sites
jpaulino

Da forma com que te mostrei resolve diversos problema, além dos números, como por exemplo datas, textos com '  (por exemplo O'Brien) , etc.

Depois diz se ficou resolvido, ok ?

Share this post


Link to post
Share on other sites
Betovsky

Já agora não necessitas de uma função tão complexa para substituires as virgulas em ponto, basta fazer:

Me.TextBox1.Text.Replace(","c, "."c)

Isso está mal. Por exemplo para números superior a mil, em que se poderá estar a usar o ponto para separador de milhares.

A forma correcta é fazer parsing do texto para decimal usando a cultura que se pretende neste caso a portuguesa.


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
Betovsky

decimal numero = decimal.Parse(TextBox.Text, new CultureInfo("pt-PT"))


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
jpaulino

Isso está mal. Por exemplo para números superior a mil, em que se poderá estar a usar o ponto para separador de milhares.

A forma correcta é fazer parsing do texto para decimal usando a cultura que se pretende neste caso a portuguesa.

Eu não disse que estava correcto :) Eu disse que para substituir uma virgula por ponto não precisava de uma função tão complexa.

Share this post


Link to post
Share on other sites
jpaulino

Pessoal, continuo aqui com uma dúvida que já tive em outros problemas:

Para que serve o 'c'? :nono1:

Converte uma string em Char.

Neste caso não é grave porque a função replace permite os dois, mas no caso do PadLeft() é necessário indicar um char. Para veres o problema(ou seja dar erro) tens de defines "Option Strict On"

Share this post


Link to post
Share on other sites

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

×

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.