none
Error con ALTER TABLE en Access

    Pregunta

  • Hola a todos:

    Ya hice una pregunta similar hace días, pero no encuentro que me funcione correctamente una función ALTER TABLE cuando quiero cambiarle el tipo de campo de double a decimal con precisión (18,5).

    El tipo de error me lo da únicamente en los campos que tengo en la tabla de access en formato double, pero escritos así en la tabla: 1,7698982410549E+15

    La función de conversión que utilizo es:

    'Declaramos una variable Connection Using cnn As DbConnection = da.CreateConnection() 'Creamos el Commando Dim cmd As DbCommand = cnn.CreateCommand() cnn.Open() With cmd .CommandText = "ALTER TABLE Varios ALTER Column PorcTot1 Decimal(18,5)" : .ExecuteNonQuery() : n += 1 .CommandText = "ALTER TABLE Varios ALTER Column PorcTot2 Decimal(18,5)" : .ExecuteNonQuery() : n += 1 .CommandText = "ALTER TABLE Varios ALTER Column PorcTot3 Decimal(18,5)" : .ExecuteNonQuery() : n += 1 .CommandText = "ALTER TABLE Varios ALTER Column PorcTot4 Decimal(18,5)" : .ExecuteNonQuery() : n += 1

    .../...

    Eso solamente pasa cuando lee el formato científico, es decir con "E+" o "E-".

    Y el error que da es el siguiente: "La precisión del campo es demasiado pequeña para aceptar el valor numérico que intentó agregar". Me he cerciorado de que eso pasa únicamente cuando el escrito por falta de espacio en la celda de Access es con notación científica.

    Ahora la duda es si puedo de alguna manera reducir el tamaño ese o bien sustituir la E- o la E-, por un 0 ya que dicha símbolo lo escribe después de haber anotado muchos decimales, por lo que si quizás puedo convertir el símbolo "E" a 0 o bien borrarlo no tiene que pasar nada ya que antes de el hay muchos decimales. Entonces si que cuando le quito la "E+ o E-" el alter table funciona perfecto y me lo guarda todo con formato decimal(18,5) que es el que necesito.

    Un saludo a todos.

    Gemma

    miércoles, 9 de noviembre de 2016 11:22

Respuestas

  • Hola,

    Porque no ejecutas uma sentencia para redondear antes de cambiar el tipo de dato:

    UPDATE VARIOS SET PORCTOT1=ROUND(PORCTOT1,5),PORCTOT2=ROUND(PORCTOT2,5),PORCTOT3=ROUND(PORCTOT3,5),PORCTOT4=ROUND(PORCTOT4,5)


    Victor Koch

    • Marcado como respuesta gemma_campillo miércoles, 9 de noviembre de 2016 15:38
    miércoles, 9 de noviembre de 2016 15:25

Todas las respuestas

  • Hola,

    Porque no ejecutas uma sentencia para redondear antes de cambiar el tipo de dato:

    UPDATE VARIOS SET PORCTOT1=ROUND(PORCTOT1,5),PORCTOT2=ROUND(PORCTOT2,5),PORCTOT3=ROUND(PORCTOT3,5),PORCTOT4=ROUND(PORCTOT4,5)


    Victor Koch

    • Marcado como respuesta gemma_campillo miércoles, 9 de noviembre de 2016 15:38
    miércoles, 9 de noviembre de 2016 15:25
  • Hola Víctor:

    Encantada de volver a hablar contigo después de años. Un fuerte abrazo.

    SI, lo que me indicas es correcto y voy a hacerlo así, había probado con Cast  y Convert pero nada. Me has puesto la sentencia que era lo que precisaba.

    Muchas gracias y un placer volver a hablar contigo.

    Un abrazo.

    Gemma

    miércoles, 9 de noviembre de 2016 15:38
  • Hola Gemma,

    Me alegro que sea la solucion.

    Cuando vi el nombre me pregunte si sos la misma Gemma del grupo de noticias de VB6, ahora me lo confirmas.

    Un placer volver a encontrarte.


    Victor Koch

    miércoles, 9 de noviembre de 2016 15:58