Generadores

Tengo un problema con los generadores de firebird, espero que me puedas ayudar, resulta que los generadores en cierta aplicación de bd que desarrolle, se comportan un poco inestables, es decir a veces de ir en el 10000 se resetean a 200 o se adelanta de 10000 a 15000 por ejemplo, no se si sabes la razón o si tienes alguna alternativa a este problema, otra pregunta es si sabes como puedo hacer una tabla temporal en delphi usando firebird
Te agradezco tu atención de antemano y te envío un saludo

1 Respuesta

Respuesta
1
Me parece que el problema es que no lo estas actualizando de forma correcta.
Te paso el método que a mi me ha funcionado a la perfección:
Teniendo tu generador (gen1, por ejemplo) crea un trigger en el evento BEFORE INSERT :
CREATE TRIGGER autoinc FOR TABLA1
BEFORE INSERT AS
BEGIN
IF (NEW.campo1 is NULL) THEN
NEW.campo1 = GEN_ID(gen1,1);
END;
Eso es todo, no necesitas hacer nada más.
Avisame si el problema persiste.
Respecto a la tabla temporal, te recomiendo usar una tabla virtual, misma que puedes hacer empleando el componente de la colección RX. En Delphi Super Page puedes encontrar una version adecuada a tu delphi.
¿Qué diferencia hay de no poner la condición esa? Es decir yo los uso de la siguiente manera:
CREATE TRIGGER TGTICKET FOR TICKET BEFORE INSERT POSITION 0 AS
BEGIN
NEW.ID_TICKET=GEN_ID(GTICKET,1);
END
Pues realmente ninguna. Solo habría una diferencia si tu en alguna parte de tu código le asignas directamente un valor al campo autoincrementable. Sin embargo es posible que eso no lo permita el mismo delphi. Es solo como una especie de candado.
Fuera de eso no debes de agregar más código ni modificar adicionalmente a los componentes que emplees para conectarte.
Suena un poco tonto pero no estarás ejecutando en alguna parte de tu código o bien, ¿en la aplicación que empleas para modificar y agregar tablas a tu base de datos la instrucción SET GENERATOR por TO #? Me parece raro que sea un problema que ocurre de vez en cuando.
Estuve buscando reportes por ese tipo de falla y encontré que versiones anteriores del interbase solían corromper el generador, lo cual se corrigió desde la version 6.0.1.6. Posiblemente actualizando la version del firebird corrija la falla
Ten en cuenta también que los generadores en interbase (firebird) NO son enteros, son de tipo int64 (NUMERIC(18,0). Eso podría estar causando la falla también

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas