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)
-   -   Autoincremental Firebird (https://www.clubdelphi.com/foros/showthread.php?t=33884)

Puche 19-07-2006 19:23:11

Autoincremental Firebird
 
Hola acabo de pasar una b.d. de paradox a firebird 1.5. Los campos autoincrementales de paradox se me han convertido en Triggers para que la aplicación pueda funcionar, pero cuando estos campos pertenecen a una clave primaria, el Trigger falla, y no me deja
Insertar, me salta este error: “Field CODIGO must have a value”. Claro, ya que no permite una clave en nulo.

La tabla es esta:
CREATE TABLE "ACTU_VINCULOS" (
"CODIGO" INTEGER NOT NULL /* "CODIGO" */ ,
"COD_REPRE" VARCHAR(10) /* "COD_REPRE" */ ,
"QUERYCAB" VARCHAR(100) /* "QUERY CAB" */ ,
"QUERYLIN" VARCHAR(100) /* "QUERY LIN" */
);

/* Indexes for table "ACTU_VINCULOS.DB" */
/* Found Index Primary Index For This Table, Options [ixPrimary,ixUnique] */
ALTER TABLE "ACTU_VINCULOS" ADD CONSTRAINT "ACTU_VINCULOS_PRIMARY" PRIMARY KEY ("CODIGO");

/* Generators for AutoInc fields for table "ACTU_VINCULOS.DB" */
/* SELECT max(ACTU_VINCULOS.DB.CODIGO) FROM ACTU_VINCULOS.DB */

CREATE GENERATOR "GEN_ACTU_VINCULOS_CODIGO";
SET GENERATOR "GEN_ACTU_VINCULOS_CODIGO" TO 15;

SET TERM ^;
CREATE TRIGGER "TRIG_ACTU_VINCULOS_BI" FOR "ACTU_VINCULOS" BEFORE INSERT
AS BEGIN
IF(NEW."CODIGO" IS NULL) THEN NEW."CODIGO" = GEN_ID("GEN_ACTU_VINCULOS_CODIGO",1);
END ^


Alguien podría decirme por qué no se dispara el Trigger? Muchas gracias a todos.

AGAG4 19-07-2006 21:42:44

Checa Esto...
 
Pues a simple vista todo parece bien, no tendrás el trigger desactivado????

PepeLolo 05-08-2006 00:38:22

Cita:

Empezado por Puche
Hola acabo de pasar una b.d. de paradox a firebird 1.5. Los campos autoincrementales de paradox se me han convertido en Triggers para que la aplicación pueda funcionar, pero cuando estos campos pertenecen a una clave primaria, el Trigger falla, y no me deja
Insertar, me salta este error: “Field CODIGO must have a value”. Claro, ya que no permite una clave en nulo.



Chequea el TField del DataSet, seguro que tienes la propiedad required=true del campo "CODIGO".

Saludos.:rolleyes:

aledieb 05-08-2006 15:51:10

Hola como haces la inserción, si usas sql directo no pongas ese campo en el insert.

El error te lo va a dar siempre que quieras modificar el valor de ese campo, aunque no pertenezca a una clave primaria.

Si usas componentes como IBDataset, hay una propiedad "GeneratorField" donde se indica el campo autoincremental y el metodo para el mismo, además tenes que configurar las sentecias insert, update, etc para que no modifiquen ese campo.


La franja horaria es GMT +2. Ahora son las 12:15:30.

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