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

Zeant

SQL com Numeros Decimais

16 mensagens neste tópico

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

LOL :thumbsup:

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

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

Para que serve o 'c'? :nono1:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora