Problema con Access y vb.net

22/07/2005 - 17:04 por Carlos Gómez | Informe spam
Resulta que cuando hago una actualización con parámetros, si el campo que se
va a actualizar es de tipo numérico decimal o doble (en access), al valor
que le envío a access, si tiene coma (separador decimal) no lo vee:

Si le envío el valor 3,14 en access se guarda 314

Por descontado que el valor que le envío es del tipo correcto.

Alguien sabe como solucionar esto.

Preguntas similare

Leer las respuestas

#1 Diego Cofré
22/07/2005 - 17:20 | Informe spam
Podrias mandar el codigo del command?

"Carlos Gómez" wrote in message
news:
Resulta que cuando hago una actualización con parámetros, si el campo que
se
va a actualizar es de tipo numérico decimal o doble (en access), al valor
que le envío a access, si tiene coma (separador decimal) no lo vee:

Si le envío el valor 3,14 en access se guarda 314

Por descontado que el valor que le envío es del tipo correcto.

Alguien sabe como solucionar esto.
Respuesta Responder a este mensaje
#2 Carlos Gómez
22/07/2005 - 19:00 | Informe spam
Diego Cofré wrote:

Podrias mandar el codigo del command?


Nombre Valor

miComando {System.Data.OleDb.OleDbCommand}
CommandText "UPDATE Clientes SET IdDatoPersonal=?,
Contacto=? , Saldo=?, TotalVenta=?,
Descuento=?, Habilitado=? WHERE Id=?"
CommandTimeOut 30
CommandType Text
Connection {System.Data.Oledb.OleDbConnection}
Container Nothing
DesignTimeVisible True
Parameters {System.Data.Oledb.OleDbParameterCollection}
Count 7
Item(0)
DbType Int32
Direction Input
IsNullable False
OledbType Integer
ParameterName "IdDatoPersonal"
Precision 0
Scale 0
Size 0
SourceColumn "IdDatoPersonal"
SourceVersion Current
Value 1{Integer}
Item(1)
DbType AnsiString
Direction Input
IsNullable False
OledbType VarChar
ParameterName "Contacto"
Precision 0
Scale 0
Size 0
SourceColumn "Contacto"
SourceVersion Current
Value "Carlos"{String}
Item(2)
DbType Decimal >Aquà­ empiezan los problemas
Direction Input
IsNullable False
OledbType Decimal
ParameterName "Saldo"
Precision 0
Scale 0
Size 0
SourceColumn "Saldo"
SourceVersion Current
Value 12D{Decimal} El valor es el que introduje
Item(3)
DbType Decimal
Direction Input
IsNullable False
OledbType Decimal
ParameterName "TotalVenta"
Precision 0
Scale 0
Size 0
SourceColumn "TotalVenta"
SourceVersion Current
Value 12.12{Decimal} El valor es el que introduje
Item(4)
DbType Decimal
Direction Input
IsNullable False
OledbType Decimal
ParameterName "Descuento"
Precision 0
Scale 0
Size 0
SourceColumn "Descuento"
SourceVersion Current
Value 12000.12D{Decimal} El valor es el que introduje
Item(5)
DbType Boolean
Direction Input
IsNullable False
OledbType Boolean
ParameterName "Habilitado"
Precision 0
Scale 0
Size 0
SourceColumn "Habilitado"
SourceVersion Current
Value True{Boolean}
Item(6)
DbType Int32
Direction Input
IsNullable False
OledbType Integer
ParameterName "Id"
Precision 0
Scale 0
Size 0
SourceColumn "Id"
SourceVersion Current
Value 1{Integer}
Site Nothing
Transaction {System.Data.OleDb.OleDbTransaction}
UpdatedRowSource Both


Los valores que se aparecen en access son:
Id: 1
IdDatoPersonal: 1
Contacto: Carlos
Saldo 12
TotalVenta 1212
Descuento 1200012
Habilitado True (casilla marcada)

Tanto en saldo,totalVenta y Descuento tengo en diseà±o:

Tipo Nàºmero
Tamaà±o del campo Decimal
Precision 18
Escala 2
Lugares Decimales 2
Respuesta Responder a este mensaje
#3 Sonia
25/07/2005 - 09:28 | Informe spam
hola
me pasaba lo mismo.

primero hize esto:
iva = iva.Replace(",", ".")


pero al final lo q he hecho es esto:
en un principio declare mis 2 campos con decimales(iva,precio) como string,
pero el campo 'iva' tengo q modificarlo ya q le sumo cosas entonces me tocó
declararlo como double.
pero me resulto mas como do para hacer todo esto , sacarme los campos en
textbox, aunq algunos de ellos los dejara como ocultos
bueno igual no es la mejor solucion pero fue la unica q me funcionó.
suerte


For Each flecha In MiTabla.Rows

Dim titulo As String

Dim iva As Double

Dim precio, cod, codigo As String

titulo = flecha(0)

precio = flecha(1)

iva = flecha(2)

..

mysql = "insert into temp values('" & cod & "','" & titulo & "','" & iva &
"'," & n & ")"

nuevo.Gestionar(mysql)

Next


"Carlos Gómez" escribió en el mensaje
news:
Resulta que cuando hago una actualización con parámetros, si el campo que


se
va a actualizar es de tipo numérico decimal o doble (en access), al valor
que le envío a access, si tiene coma (separador decimal) no lo vee:

Si le envío el valor 3,14 en access se guarda 314

Por descontado que el valor que le envío es del tipo correcto.

Alguien sabe como solucionar esto.

Respuesta Responder a este mensaje
#4 Sonia
25/07/2005 - 09:29 | Informe spam
no habia isto el codigo.
prueba en declararlo como double en vez de como decimal

suerte


"Carlos Gómez" escribió en el mensaje
news:
Diego Cofr wrote:

> Podrias mandar el codigo del command?
Nombre Valor

miComando {System.Data.OleDb.OleDbCommand}
CommandText "UPDATE Clientes SET IdDatoPersonal=?,
Contacto=? , Saldo=?, TotalVenta=?,
Descuento=?, Habilitado=? WHERE Id=?"
CommandTimeOut 30
CommandType Text
Connection {System.Data.Oledb.OleDbConnection}
Container Nothing
DesignTimeVisible True
Parameters {System.Data.Oledb.OleDbParameterCollection}
Count 7
Item(0)
DbType Int32
Direction Input
IsNullable False
OledbType Integer
ParameterName "IdDatoPersonal"
Precision 0
Scale 0
Size 0
SourceColumn "IdDatoPersonal"
SourceVersion Current
Value 1{Integer}
Item(1)
DbType AnsiString
Direction Input
IsNullable False
OledbType VarChar
ParameterName "Contacto"
Precision 0
Scale 0
Size 0
SourceColumn "Contacto"
SourceVersion Current
Value "Carlos"{String}
Item(2)
DbType Decimal >Aqu empiezan los problemas
Direction Input
IsNullable False
OledbType Decimal
ParameterName "Saldo"
Precision 0
Scale 0
Size 0
SourceColumn "Saldo"
SourceVersion Current
Value 12D{Decimal} El valor es el que introduje
Item(3)
DbType Decimal
Direction Input
IsNullable False
OledbType Decimal
ParameterName "TotalVenta"
Precision 0
Scale 0
Size 0
SourceColumn "TotalVenta"
SourceVersion Current
Value 12.12{Decimal} El valor es el que introduje
Item(4)
DbType Decimal
Direction Input
IsNullable False
OledbType Decimal
ParameterName "Descuento"
Precision 0
Scale 0
Size 0
SourceColumn "Descuento"
SourceVersion Current
Value 12000.12D{Decimal} El valor es el que introduje
Item(5)
DbType Boolean
Direction Input
IsNullable False
OledbType Boolean
ParameterName "Habilitado"
Precision 0
Scale 0
Size 0
SourceColumn "Habilitado"
SourceVersion Current
Value True{Boolean}
Item(6)
DbType Int32
Direction Input
IsNullable False
OledbType Integer
ParameterName "Id"
Precision 0
Scale 0
Size 0
SourceColumn "Id"
SourceVersion Current
Value 1{Integer}
Site Nothing
Transaction {System.Data.OleDb.OleDbTransaction}
UpdatedRowSource Both


Los valores que se aparecen en access son:
Id: 1
IdDatoPersonal: 1
Contacto: Carlos
Saldo 12
TotalVenta 1212
Descuento 1200012
Habilitado True (casilla marcada)

Tanto en saldo,totalVenta y Descuento tengo en diseño:

Tipo Número
Tamaño del campo Decimal
Precision 18
Escala 2
Lugares Decimales 2


Respuesta Responder a este mensaje
#5 Carlos Gómez
26/07/2005 - 17:32 | Informe spam
Cuando indico el tipo de dato que le paso en el parámetro,
en vez de decirle que el OldDbType.Decimal, le digo que es
OleDbType.VarChar:

Dim parametro As New OleDbParameter
parametro.ParameterName="Saldo"
parametro.SourceColumn="Saldo"
parametro.OleDbType=OleDbType.VarChar < Aquí
objetoComando.Parameters.Add(parametro)

Me parece una chapuza de c*j*nes, pero es la única forma con
la que ha funcionado.

También me dieron una solución basada en el cambio de
CultureInfo, que a la persona que me la dió le sirvió en su
caso:

Dim miCulturaAntigua,miCulturaNueva as System.Globalizacion.CultureInfo
miCulturaNueva=System.Globalizacion.CultureInfo.CurrentCulture.Clone
miCulturaAntigua=System.Globalizacion.CultureInfo.CurrentCulture.Clone
miCultura.NumberFormat.CurrencyDecimalSeparator="."
miCultura.NumberFormat.NumberDecimalSeparator="."
System.Threading.Thread.CurrentThread.CurrentCulture=miCulturaNueva

ahora hacemos la Actualización
...ExecuteNonQuery...

y ahora dejamos como estaba

System.Threading.Thread.CurrentThread.CurrenCulture=miCulturaAntigua

Pero a mi tampoco me ha funcionado. Eso sí me ha dado la idea de pasarle
el valor como cadena (OleDbType.VarChar) para ver si así engañaba
a la máquina ;-D
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida