Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema alter table (https://www.clubdelphi.com/foros/showthread.php?t=72596)

turbopascual5.0 28-02-2011 23:56:04

problema alter table
 
Hola a todos.

tengo un excel , con una columna de 380 filas aprox de datos, que voy leyendo y pasando a sqlexpress con un alter table add para crear la definición de los campos de la tabla, aproximadamente al llegar al 350 me da el siguiente error:

Error al crear o modificar la tabla 'tarifa' porque el tamaño de fila minimo seria 8078, incluidos los 295 bytes de sobrecarga interna, esto supera el tamaño maximo permitido de 8060 bytes para las filas de tabla.

¿una limitación intrínseca de sqlexpress?

Si es así me podría plantear utilizar otra base de datos, siempre que sea gratuita y no tenga estos problemas.
Pero deberían correr ambas en el mismo server, me sería complicadísimo migrar las tablas ya existentes , modificar aplicaciones, etc, etc.

Gracias de antemano.

duilioisola 01-03-2011 00:12:30

Parece ser que el tamaño de todos los campos supera 8060 bytes.
Me parece extraño tener una tabla que tenga 380 campos. ¿Es esto lo que has querido decir?
Explícanos qué tipo de información guardas en esa tabla excel y quizás te ayudemos con una forma distinta de encarar el problema.

Si de todos modos debe ser una tabla de 38 campos, habría que ver de qué tipo y de qué tamaño es cada uno.
Si son todos varchar(20) puedes tratar de ver si la información de cada campo te cabe también en un varchar(15). Esto haría que cupieran más campos.

Del mismo modo, si estas guardando numeros en formato varchar(xx), te convendría guardarlos directamente com smallint, integer, double precision o number(x,y).

turbopascual5.0 01-03-2011 08:27:43

8060 bytes ¿quien necesita mas?
 
Cita:

Empezado por duilioisola (Mensaje 392237)
Parece ser que el tamaño de todos los campos supera 8060 bytes.
Me parece extraño tener una tabla que tenga 380 campos. ¿Es esto lo que has querido decir?
Explícanos qué tipo de información guardas en esa tabla excel y quizás te ayudemos con una forma distinta de encarar el problema.

Si de todos modos debe ser una tabla de 38 campos, habría que ver de qué tipo y de qué tamaño es cada uno.
Si son todos varchar(20) puedes tratar de ver si la información de cada campo te cabe también en un varchar(15). Esto haría que cupieran más campos.

Del mismo modo, si estas guardando numeros en formato varchar(xx), te convendría guardarlos directamente com smallint, integer, double precision o number(x,y).

Hola.

Sí es una tabla de 380 campos, nvchar(50). Es una tabla con una tarifa de mobiliario, hay 380 tipos de muebles diferentes (380 campos ) y cada registro contiene los 380 precios de cada modelo (habrá finalmente unos 300 modelos).

Mi duda es:

El límite de 8060 bytes será por cada registro de la tabla, es decir, el tamaño de los 380 nvchar(50) no pueden superar la mencionada capacidad?

Por lo que veo tengo varias opciones:

* Ajustar el tamaño de campo
* Partir la tabla en dos o tres, lo que me será un soberano coñazo al llegar a la parte de presupuestos, tendré que duplicar o triplicar el código.
*Probar con otra BD ¿mysql?.........

Perdonad si en algun momento hay algún planteamiento incorrecto, hace ya muchos años que no programo y me estoy haciendo un programa para mi empresa en mi tiempo libre (cosas de la crisis), provengo de programar BD "a pelo", con estructuras de datos propias, etc, etc . La verdad es que estoy maravillado, localizar un valor o un subconjunto de valores con una sentencia sql ! , pero si yo lo hacía implementando un algoritmo quicksort a golpe de línea de código !, y sin internet (no existía), sin ayuda, sin nadie que te eche una mano .

Muchas gracias a todos de antemano

duilioisola 01-03-2011 09:20:04

No se que base de datos utilizas. (creo que nvchar(xx) es de SQL Server y Oracle).

Si lo que te llega en cada campo es un precio, lo mejor sería tratarlo como un número y no como un string.

MySQL no es gratis. Deberás pagar una licencia.
Firebird es una opción verdaderamente gratuita (y la que te recomendaria).
No conozco PostgreSQL, pero también tiene una licencia gratuita.

turbopascual5.0 01-03-2011 11:54:56

Cita:

Empezado por duilioisola (Mensaje 392259)
No se que base de datos utilizas. (creo que nvchar(xx) es de SQL Server y Oracle).

Si lo que te llega en cada campo es un precio, lo mejor sería tratarlo como un número y no como un string.

MySQL no es gratis. Deberás pagar una licencia.
Firebird es una opción verdaderamente gratuita (y la que te recomendaria).
No conozco PostgreSQL, pero también tiene una licencia gratuita.

Vaya fallo, prueba que te prueba...... y no me fijo , sí , tienes razón, son números, reales. Probaré .

Vaya, creía que MySql era gartuita, pues de licencias nada de nada. Si no me salgo tiraré por Firebird.

Gracias


La franja horaria es GMT +2. Ahora son las 04:14:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi