none
Cambiar tipo de datos en tabla con notación científica.

    Pregunta

  • Hola a todos:

    He podido averiguar por qué en algunas tablas no me funcionaba bien la clíausla ALTER TABLE para cambiar los tipos de datos de Double a Decimal con precisión(18,5)., el problema radica en que si los decimales originales tienen o están con la notación científica da error y no los puede convertir.

    Ahora el tema está en si alguien sabe como solucionar ese problema o bien, no tiene solución si están de esa forma.

    Por ejemplo:

    With cmd .CommandText = "ALTER TABLE VariosAuditoria ALTER Column Ejer_01 Decimal(18,5)"

    end with

    Si el formato inicial es 0,095676382 te lo convierte a 5 dígitos decimales sin ningún problema.

    Ahora bien, si está inicialmente en la tabla de esta manera: 43,96747489+E eso no lo convierte y da error de "demasiados campos definidos".

    También indico que si está por ejemplo en Access, en la demás bases no lo he probado, ya que la que necesito coinvertir es Access, tampoco te deja convertirlo desde la vista "Diseño" dando el error oportuno, es decir, si no se modifica a mano la celda que contiene el valor, no te deja cambiarlo a decimal por ejemplo.

    Bueno ese es el tema, saber si hay alguna solución para tratar con Alter Table la notación científica.

    Un cordial saludo a todos.

    Gemma


    • Editado gemma_campillo jueves, 27 de octubre de 2016 10:48 ampliar pregunta
    jueves, 27 de octubre de 2016 10:44

Respuestas

  • "gemma_campillo" escribió:

    > He podido averiguar por qué en algunas tablas no me funcionaba bien la clíausla
    > ALTER TABLE para cambiar los tipos de datos de Double a Decimal con precisión(18,5).,
    > el problema radica en que si los decimales originales tienen o están con la notación
    > científica da error y no los puede convertir.
    >
    > Si el formato inicial es 0,095676382 te lo convierte a 5 dígitos decimales sin ningún
    > problema.
    >
    > Ahora bien, si está inicialmente en la tabla de esta manera: 43,96747489+E eso no lo
    > convierte y da error de "demasiados campos definidos".

    ¡Que tendrá que ver el valor que almacena Access en un campo del tipo Numérico Doble con la representación de ese número que observas cuando abres la tabla directamente desde el propio Microsoft Access!

    Si el campo está definido con el tipo de dato Numérico Doble, el valor que se almacena es un número de punto flotante de 8 bytes (64 bits) que contiene valores de -1,797 x 10308 a +1,797 x 10308 y hasta 15 dígitos significativos. Otra cosa diferente es cómo muestra Access ese valor cuando abres la tabla, que si el número es tan largo que no coge en la celda del grid, lo muestra en notación científica.

    Insertar, crear o eliminar un campo que almacena valores numéricos

    Si el valor del campo Doble no se pudiera convertir a Decimal, obtendrías el mensaje de error «No coinciden los tipos de datos en la expresión de criterios». Pero como dices que obtienes el error «Demasiados campos definidos», me viene a la cabeza que puede deberse a que seguramente estarás haciendo innumerables cambios en la estructura de la tabla, como por ejemplo, modificar el tipo de dato de una columna, y lo mismo el contador interno de campos que tiene Access ha superado su límite permitido (255 campos).

    Dado que algunas de las tablas de tu base de datos contiene una cantidad considerable de campos, y a fin de salir de dudas, ¿por qué no COMPACTAS la base de datos e intentas de nuevo a ejecutar la consulta ALTER TABLE?

    Ten en cuenta que cuando añades o modificas campos el contador interno de campos de la tabla va aumentado su valor, pero no disminuye cuando los eliminas, de ahí que se tenga que compactar la base de datos para eliminar aquellos campos que realmente no existen en la tabla.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo jueves, 27 de octubre de 2016 16:07
    jueves, 27 de octubre de 2016 15:50
    Moderador
  • "gemma_campillo" escribió:

    > Cuando digo el valor en notación científica, no es lo que aparece en la grilla,
    > si no lo que hay visualmente en el campo de la tabla de Access ...

    Y ¿dónde observas lo que "hay visualmente en el campo de la tabla de Access"? He dicho en la "grilla" de la interfaz de usuario de Access como podía haber dicho en una celda cualquiera de un control DataGridView. ;-)

    > Bueno, maestro voy a ver si compactando se arregla, que ahora ya me funciona perfectamente,
    > cuando me he dado cuenta de que no me dejaba ni cambiar el tipo desde el propio Access he
    > visto que era por eso, lo he cambio, y ya en el diseñador de Access me ha codigo perfectamente
    > el cambio a decimal.

    No me entero. ¿Se ha arreglado porque has compactado la base de datos o porque has hecho otra cosa para que ahora digas que "funciona perfectamente"?


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo jueves, 27 de octubre de 2016 16:45
    jueves, 27 de octubre de 2016 16:26
    Moderador
  • "gemma_campillo" escribió:

    > Para mi que se ha arreglado cambiando a mano el valor +E de la notación científica,
    > cuando se lo he sacado a mano es cuando ha funcionado perfectamente, he vuelto a
    > hacer la prueba de poner el valor de un campo con la "E" de la notación y vuelve a fallar...

    Gemma, al quitar la "E" lo que estás haciendo es MODIFICAR EL VALOR correspondiente al campo del registro que actualmente estés editando, y observas la "E" porque el ANCHO que actualmente tiene la columna del grid de la interfaz de usuario de Microsoft Access no te permite mostrar todo el valor numérico doble que actualmente tiene el campo de ese registro.

    Podrías tener problemas al convertir el campo de Doble a Decimal si éste tipo de dato no puede asumir el valor doble que actualmente tiene algún registro del campo. Pero en este caso, digo yo que obtendrías el mensaje de error «No coinciden los tipos de datos en la expresión de criterios», que comprendo que no es un mensaje de error demasiado afortunado pero la experiencia me dice que es por ese motivo.

    Pero como dices que llevas bastante tiempo con el mensaje de error «Demasiados campos definidos», prueba a compactar la base de datos porque tampoco vas a perder nada del otro mundo con ello, ya que dicho mensaje de error se puede deber al contador interno de campos que tiene cada tabla, tal y como te he comentado en mi primera respuesta.

    ¿Cuántas modificaciones de campos llevas ya efectuadas? ¿Te ha dado alguna vez por compactar la base de datos tras efectuar modificaciones a la estructura de la base de datos que es lo que normalmente se suele hacer?

    > SI recuerdas que hablamos hace unos días que algunos Alter Table me estaban
    > dando error y otros no, y tu me decías que no era cosa de que hubieran más
    > o menos instrucciones con el AlterTable, si no, el problema podía venir por
    > el nombre del campo, etc., ...

    Pero ahora que he caído en la cuenta, te digo que puede que sí tengas problemas si te dedicas a modificar el tipo de dato de multitud de datos sin compactar previamente la base de datos, por el tema del contador interno de campos.

    Cuando te aparezca el mensaje de error «Demasiados campos definidos», compacta la base de datos, intenta de nuevo la ejecución de la consulta ALTER TABLE, y después me dices si ésta se ha ejecutado satisfactoriamente o no. ;-)

    Quiero pensar que ésta modificación de los tipos de datos de las tablas la vas a realizar una sola vez, y simplemente para distribuir al cliente la base de datos de Access modificada? ¿O es en las bases de datos que ya tienen los clientes donde vas a modificar los tipos de datos? Es decir, en tiempo de ejecución.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.





    jueves, 27 de octubre de 2016 16:57
    Moderador

Todas las respuestas

  • "gemma_campillo" escribió:

    > He podido averiguar por qué en algunas tablas no me funcionaba bien la clíausla
    > ALTER TABLE para cambiar los tipos de datos de Double a Decimal con precisión(18,5).,
    > el problema radica en que si los decimales originales tienen o están con la notación
    > científica da error y no los puede convertir.
    >
    > Si el formato inicial es 0,095676382 te lo convierte a 5 dígitos decimales sin ningún
    > problema.
    >
    > Ahora bien, si está inicialmente en la tabla de esta manera: 43,96747489+E eso no lo
    > convierte y da error de "demasiados campos definidos".

    ¡Que tendrá que ver el valor que almacena Access en un campo del tipo Numérico Doble con la representación de ese número que observas cuando abres la tabla directamente desde el propio Microsoft Access!

    Si el campo está definido con el tipo de dato Numérico Doble, el valor que se almacena es un número de punto flotante de 8 bytes (64 bits) que contiene valores de -1,797 x 10308 a +1,797 x 10308 y hasta 15 dígitos significativos. Otra cosa diferente es cómo muestra Access ese valor cuando abres la tabla, que si el número es tan largo que no coge en la celda del grid, lo muestra en notación científica.

    Insertar, crear o eliminar un campo que almacena valores numéricos

    Si el valor del campo Doble no se pudiera convertir a Decimal, obtendrías el mensaje de error «No coinciden los tipos de datos en la expresión de criterios». Pero como dices que obtienes el error «Demasiados campos definidos», me viene a la cabeza que puede deberse a que seguramente estarás haciendo innumerables cambios en la estructura de la tabla, como por ejemplo, modificar el tipo de dato de una columna, y lo mismo el contador interno de campos que tiene Access ha superado su límite permitido (255 campos).

    Dado que algunas de las tablas de tu base de datos contiene una cantidad considerable de campos, y a fin de salir de dudas, ¿por qué no COMPACTAS la base de datos e intentas de nuevo a ejecutar la consulta ALTER TABLE?

    Ten en cuenta que cuando añades o modificas campos el contador interno de campos de la tabla va aumentado su valor, pero no disminuye cuando los eliminas, de ahí que se tenga que compactar la base de datos para eliminar aquellos campos que realmente no existen en la tabla.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo jueves, 27 de octubre de 2016 16:07
    jueves, 27 de octubre de 2016 15:50
    Moderador
  • Hola maestro:

    Cuando digo el valor en notación científica, no es lo que aparece en la grilla, si no lo que hay visualmente en el campo de la tabla de Access y resulta que si lo corrijo el Alter Table me lo hace correctamente, es de eso de lo que me he dado cuenta.

    Bueno, maestro voy a ver si compactando se arregla, que ahora ya me funciona perfectamente, cuando me he dado cuenta de que no me dejaba ni cambiar el tipo desde el propio Access he visto que era por eso, lo he cambio, y ya en el diseñador de Access me ha codigo perfectamente el cambio a decimal.

    Bueno, querido amigo. muchas gracias como siempre.

    Un fuerte abrazo.

    Gemma


    jueves, 27 de octubre de 2016 16:06
  • "gemma_campillo" escribió:

    > Cuando digo el valor en notación científica, no es lo que aparece en la grilla,
    > si no lo que hay visualmente en el campo de la tabla de Access ...

    Y ¿dónde observas lo que "hay visualmente en el campo de la tabla de Access"? He dicho en la "grilla" de la interfaz de usuario de Access como podía haber dicho en una celda cualquiera de un control DataGridView. ;-)

    > Bueno, maestro voy a ver si compactando se arregla, que ahora ya me funciona perfectamente,
    > cuando me he dado cuenta de que no me dejaba ni cambiar el tipo desde el propio Access he
    > visto que era por eso, lo he cambio, y ya en el diseñador de Access me ha codigo perfectamente
    > el cambio a decimal.

    No me entero. ¿Se ha arreglado porque has compactado la base de datos o porque has hecho otra cosa para que ahora digas que "funciona perfectamente"?


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo jueves, 27 de octubre de 2016 16:45
    jueves, 27 de octubre de 2016 16:26
    Moderador
  • Hola:

    Para mi que se ha arreglado cambiando a mano el valor +E de la notación científica, cuando se lo he sacado a mano es cuando ha funcionado perfectamente, he vuelto a hacer la prueba de poner el valor de un campo con la "E" de la notación y vuelve a fallar, o sea, que creo que lo veo claro, que es por eso por lo que falla y no deja cambiarlo ni con el Alter Table ni desde el diseñador de Access, da error. En el momento que le quito la "+E" y aunque lo deje con 10 decimales, lo convierte perfectamente a decimal(18,5) sin ningún problema.

    SI recuerdas que hablamos hace unos días que algunos Alter Table me estaban dando error y otros no, y tu me decías que no era cosa de que hubieran más o menos instrucciones con el AlterTable, si no, el problema podía venir por el nombre del campo, etc., era eso Enrique, seguro, si puedes y tienes tiempo lo pruebas y ya verás que no lo puedes cambiar.

    Bueno, no te preocupes más por esto, ya está arreglado que era lo que importaba, lo que quería tener claro era por qué no funcionaba. (cabezona).

    Venga, un fuerte abrazo maestro y muchas gracias como siempre.

    Gemma

    jueves, 27 de octubre de 2016 16:45
  • "gemma_campillo" escribió:

    > Para mi que se ha arreglado cambiando a mano el valor +E de la notación científica,
    > cuando se lo he sacado a mano es cuando ha funcionado perfectamente, he vuelto a
    > hacer la prueba de poner el valor de un campo con la "E" de la notación y vuelve a fallar...

    Gemma, al quitar la "E" lo que estás haciendo es MODIFICAR EL VALOR correspondiente al campo del registro que actualmente estés editando, y observas la "E" porque el ANCHO que actualmente tiene la columna del grid de la interfaz de usuario de Microsoft Access no te permite mostrar todo el valor numérico doble que actualmente tiene el campo de ese registro.

    Podrías tener problemas al convertir el campo de Doble a Decimal si éste tipo de dato no puede asumir el valor doble que actualmente tiene algún registro del campo. Pero en este caso, digo yo que obtendrías el mensaje de error «No coinciden los tipos de datos en la expresión de criterios», que comprendo que no es un mensaje de error demasiado afortunado pero la experiencia me dice que es por ese motivo.

    Pero como dices que llevas bastante tiempo con el mensaje de error «Demasiados campos definidos», prueba a compactar la base de datos porque tampoco vas a perder nada del otro mundo con ello, ya que dicho mensaje de error se puede deber al contador interno de campos que tiene cada tabla, tal y como te he comentado en mi primera respuesta.

    ¿Cuántas modificaciones de campos llevas ya efectuadas? ¿Te ha dado alguna vez por compactar la base de datos tras efectuar modificaciones a la estructura de la base de datos que es lo que normalmente se suele hacer?

    > SI recuerdas que hablamos hace unos días que algunos Alter Table me estaban
    > dando error y otros no, y tu me decías que no era cosa de que hubieran más
    > o menos instrucciones con el AlterTable, si no, el problema podía venir por
    > el nombre del campo, etc., ...

    Pero ahora que he caído en la cuenta, te digo que puede que sí tengas problemas si te dedicas a modificar el tipo de dato de multitud de datos sin compactar previamente la base de datos, por el tema del contador interno de campos.

    Cuando te aparezca el mensaje de error «Demasiados campos definidos», compacta la base de datos, intenta de nuevo la ejecución de la consulta ALTER TABLE, y después me dices si ésta se ha ejecutado satisfactoriamente o no. ;-)

    Quiero pensar que ésta modificación de los tipos de datos de las tablas la vas a realizar una sola vez, y simplemente para distribuir al cliente la base de datos de Access modificada? ¿O es en las bases de datos que ya tienen los clientes donde vas a modificar los tipos de datos? Es decir, en tiempo de ejecución.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.





    jueves, 27 de octubre de 2016 16:57
    Moderador
  • Hola Enrique:

    Llevas razón como siempre, eso de que el numerador aumentaba yo no lo sabía.

    Voy a probarlo en un ratito pero veo el razonamiento tuyo bien claro como siempre.

    Gracias por la explicación "técnica", aún me quedan muchas cosas que aprender.

    Gracias querido amigo.

    Un abrazo.

    Gemma

    jueves, 27 de octubre de 2016 17:10