Jump to content
Leodellari

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

Recommended Posts

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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ,.

  • Vote 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."

 

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

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