none
Modificar tipo de campo con Alter Table

    Pregunta

  • Hola a todos:

    Tengo un problemilla al cambiar el tipo de campo con alter table según muestro el código mas abajo. El problema radica en que me da error ya que el campo que quiero modificar en más grande que la precisión que quiero asignar (18,5), y en ese caso no se como resolverlo ya que el número que hay ahora por ejemplo es 0 ,957376264 y al ser la precisión de los decimaoles de 5, no me deja actualizarlo.

      Public Shared Sub CambiarTipoDatosAccessTabla_Varios()
    
    
            Dim n As Integer
            Try
    
                ' 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 Ejer_01 Decimal(18,5)" : .ExecuteNonQuery() : n += 1
                        .CommandText = "ALTER TABLE Varios ALTER  Column Ejer_02 Decimal(18,5)" : .ExecuteNonQuery() : n += 1
                        .CommandText = "ALTER TABLE Varios ALTER  Column Ejer_03 Decimal(18,5)" : .ExecuteNonQuery() : n += 1
                        .CommandText = "ALTER TABLE Varios ALTER  Column Ejer_04 Decimal(18,5)" : .ExecuteNonQuery() : n += 1
                        .CommandText = "ALTER TABLE Varios ALTER  Column Ejer_05 Decimal(18,5)" : .ExecuteNonQuery() : n += 1
    
    '.......///...........
                        
                    End With
                End Using
    
            Catch ex As Exception
                MessageBox.Show("Error proceso de actualización 'Varios'" & vbCrLf & ex.Message & vbCrLf &
                       "Acepte para continuar.", "FINANCIAL SYSTEM", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                ' Cuando el código esté totalmente depurado, eliminar el bloque Finally.
                MessageBox.Show("Nº de campos modificados Varios: " & CStr(n))
    
            End Try

    Un saludo a todos.

    Gemma

    martes, 25 de octubre de 2016 15:53

Respuestas

  • Si la tabla no es desmesuradamente grande (millones de registros), una solución relativamente sencilla sería copiar los datos a una tabla nueva que tenga las columnas con los tipos deseados (y al hacer la copia puedes meter las conversiones que quieras), y luego borrar la tabla original y renombrar la nueva para que adquiera el nombre original.
    • Marcado como respuesta gemma_campillo martes, 25 de octubre de 2016 18:46
    martes, 25 de octubre de 2016 17:54

Todas las respuestas

  • Si la tabla no es desmesuradamente grande (millones de registros), una solución relativamente sencilla sería copiar los datos a una tabla nueva que tenga las columnas con los tipos deseados (y al hacer la copia puedes meter las conversiones que quieras), y luego borrar la tabla original y renombrar la nueva para que adquiera el nombre original.
    • Marcado como respuesta gemma_campillo martes, 25 de octubre de 2016 18:46
    martes, 25 de octubre de 2016 17:54
  • Hola Alberto:

    Bueno, he creado una tabla temporal y la relleno con Insert Into y en principio no da problemas, después borro la tabla original y la vuelvo a crear con sus campos correctos, con tipo decimal(18,5) y por último no puedo renombrar la tabla de access porque según he leído con "rename" no funciona, por lo que vuelvo a hacer un insert into de la temporal a la creada, después borro la temporal.

    Solo me queda repasar el tema este de las tablas temporales, etc., porque aún me da error al insertar indicándome que el campo de precisión es menor que el dato a insertar. Voy a ver como lo soluciono.

    Muchas gracias como siempre querido amigo.

    Un abrazo.

    Gemma

    martes, 25 de octubre de 2016 18:46