Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Leodellari

Problemas ao tentar inserir valores com casas decimais em campo numérico de um bd Access

Mensagens Recomendadas

Leodellari

Boas,

Estou criando uma tabela no Access via código sql, e um dos campos desta tabela é Numérico. Quando vou inserir valores com vírgula como tipo Decimal não consigo, pois o ponto desaparece... Mas quando insiro valores como tipo Double, as casas decimais não desaparecem. O que eu reparei é que, quando insiro um valor manualmente na tabela que criei, se coloco vírgula, a vírgula permanece, mas se coloco ponto como separador decimal, o ponto desaparece, e o que era 10.18 vira 1018.

A string para criar a tabela é a seguinte:

            sql = "CREATE TABLE [NomeTabela]([0] DECIMAL(18, 9) NULL, [1] nvarchar(50) NULL, " _
                       & "[2] nvarchar(50) NULL, [3] nvarchar(50) NULL)"

E o código para inserir os valores:

        For i = 0 To UltLindtlm
            sql1 = "INSERT INTO [NomeTabela]([0], [1], [2], [3]) VALUES(@0, " _
                & "@1, @2, @3)"
            com = New OleDbCommand(sql1, conexao)
            com.Parameters.Add("@0", OleDbType.Decimal).Value = ValorDecimal
            com.Parameters.Add("@1", OleDbType.VarChar).Value = var1
            com.Parameters.Add("@2", OleDbType.VarChar).Value = var2
            com.Parameters.Add("@3", OleDbType.VarChar).Value = CStr(i)
            Try
                com.ExecuteNonQuery()
            Catch ex As Exception
                Throw ex
            End Try
         Next

Se troco o Decimal do código acima por Double, eu consigo inserir números com casas decimais, agora se não, não consigo...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Eu diria que é porque a variável "ValorDecimal" não ser, na verdade, um decimal(18,9), mas sem mais informação não dá para perceber.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Leodellari

É por conta do separador decimal (ponto e vírgula). Na hora de armazenar, o separador decimal passa de vírgula para ponto.

Mas ao longo de toda a aplicação tenho usado a vírgula como separador decimal (nas caixas de texto e nas tabelas). Tenho feito apenas conversões de Decimal para String e String para Decimal. Quando converto para Decimal funciona normalmente. Quando converto de Decimal para String recebo um valor texto com a vírgula como separador Decimal. Por mim que o Decimal armazenasse os valores com uma vírgula como separador decimal. (Tenho criado apenas campos nvarchar nas tabelas... mas agora precisei resgatar valores em ordem crescente, e para isso o campo tem que ser numérico).

As soluções que encontrei foram: armazenar a variável Decimal com o OleDbType.Double, e armazenar a variável com o OleDbType.Char, ou OleDbType.Varchar. Não sei se tem outra solução para armazenar os valores com o OleDbType.Decimal...

Enfim, o programa está funcionando normal aqui... Estou conseguindo armazenar os valores.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Isso é parametrizável de certeza, mas tipicamente trabalha-se com o . como separador decimal, embora ao nível da visualização por vezes se mostre a ,.

  • Voto 1

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.