Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda - Campo AUTO - Base de Datos (https://www.clubdelphi.com/foros/showthread.php?t=74730)

cotymel 07-07-2011 14:20:15

Ayuda - Campo AUTO - Base de Datos
 
Hola, tengo el siguiente inconveniente:
En una base de datos tengo una tabla (HOJADERUTAS) con los siguientes campos:
(Key)NUMHOJADERUTA / AUTO
IDCADETE / SMALLINT
FECHORAPARTIDA / TIMESTAMP
FECHORALLEGADA / TIMESTAMP

El campo (NUMHOJADERUTA) está generado por un generador (GEN_HOJADERUTA) con un objeto trigger (CREATE_HOJADERUTA) con la siguientes característica:
Tipo BEFORE INSERT...
As
Begin
NEW.NUMHOJADERUTA = GEN_ID (GEN_HOJADERUTA, 1);
end

Concretamente el inconveniente es que venía funcionando bien (el número de hoja de ruta actual es el 32767), pero ahora cuando se genera una hoja de ruta nueva me está arrojando el siguiente error:
32769 n´est pas une valeur correcte pour le champ 'NUMHOJADERUTA' les valueurs doivent etre comprises entre 32768 et 32767

La cosa que no puedo generar más hojas de rutas y la situación en la empresa es un caos y me están por colgar!!! :eek:

marcoszorrilla 07-07-2011 15:44:12

Create una tabla nueva, con el campo como BigInt traspásele todos los datos de la antiguga, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.

Un Saludo.

Casimiro Notevi 07-07-2011 16:27:04

Cita:

Empezado por marcoszorrilla (Mensaje 405725)
Create una tabla nueva, con el campo como BigInt traspásele todos los datos de la antiguga, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.

Un Saludo.


Está claro que el campo clave NUMHOJADERUTA es un smallint, debes cambiarlo como te ha informado marcoszorrilla, por un tipo de campo mayor.
El smallint sólo llega hasta 32767

cotymel 08-07-2011 16:18:59

Muchas gracias por tus comentarios.
No estoy muy ducho en el tema, por eso consulto.
En caso de proceder como indicás, al colocar al campo como BigInt la generación del número de NUMHOJADERUTA (que hoy se genera en forma automática a través del GEN_HUJADERUTA) se verá afectado?

marcoszorrilla 08-07-2011 16:53:46

Como el nombre del campo es el mismo no tendrías que realizar ningún cambio.

Puedes desde ISQL comprobar el estado del generador, es decir en que número se encuentra en estos momentos.

Código SQL [-]
ISQL> SHOW GENERATOR Nombre_Del_Generador;

Un Saludo.

cotymel 19-07-2011 20:33:49

Marcos muchas gracias por tus indicaciones.
Ahora te consulto lo siguiente, pude crear la tabla nueva, pasarle todos los datos, lo que no puedo es renombrar las tablas.
Cómo debo proceder?
Nuevamente gracias. Saludos.

Casimiro Notevi 19-07-2011 21:17:25

Amigo, eso ya se te ha contestado más arriba:

Cita:

Créate una tabla nueva, con el campo como BigInt traspásele todos los datos de la antigua, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.
;)

cotymel 20-07-2011 18:10:55

Muchas gracias por contestarme Casimiro.
Tengo claro lo que anteriormente me aconsejaron, lo que estoy consultando ahora es:
-Cómo procedo para renombrar la tabla? Ya que es lo único que hasta ahora no logré hacer.
Nuevamente gracias.

Chris 20-07-2011 18:23:12

Me parece que solo es necesario cambiar el tipo de campo desde SmallInt a Integer o BigInt. Creo que no tendrás que utilizar una tabla intermedia, pues estarías cambiando el tipo de datos entre similares. SmallInt => Integer.

Por otro lado, tengo la impresión que utilizar BigInt sería demasiado. Esto lo digo porque creo que el valor de los generadores solamente soportan valores entre el rango de Integer, no más. Si estoy equivocado, entonces procede a utilizar BigInt si haces inserciones masivas en la susodicha tabla.

Saludos,
Chris.

Casimiro Notevi 20-07-2011 18:23:45

No recuerdo exactamente, echa un vistazo a ver si lo encuentras.
Aunque puedes pasar los datos a una nueva con el nombre ya correcto.
Algo así como:
Código SQL [-]
Insert into tutabla (select * from tablatemporal)


La franja horaria es GMT +2. Ahora son las 09:47:34.

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