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)
-   -   Autoincremento con firebird (https://www.clubdelphi.com/foros/showthread.php?t=76797)

jgutti 28-11-2011 13:56:09

Autoincremento con firebird
 
Hola al foro, con un master/detalle utilizo un campo con autoincremento a partir del un trigger en el evento before insert, el autoincremento funciona bien pero el correlativo es unico para la tabla, la consulta es la sgte:
- Es posible generar el autoincremento individual a partir de 1 a ... n para cada detalle del master ejemplo:
- master : Nº Factura = 1 (Detalle autoincremento: 1,2,3,4,5)
- master : Nº Factura = 2 (Detalle autoincremento: 1,2)

saludos
jgutti

cloayza 28-11-2011 14:42:36

Primero el objetivo de los campos autoincremento es generar numeros correlativos únicos para un registro.

Lo otro de numerar los item del detalle lo podrias hacer de la siguiente manera:

Al momento de insertar un registro en el detalle, realizar una consulta para obtener el MAXIMO valor de los items del detalle y sumarle uno, asi podrias tener la secuencia que deseas.

Código SQL [-]

CREATE OR ALTER TRIGGER DETALLE_BI0 FOR DETALLE
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE ID INTEGER;
begin

     /* Trigger text */
     IF ((NEW.ID_ITEM IS NULL) OR (NEW.ID_ITEM=0) ) THEN
     BEGIN
            SELECT MAX(ID_ITEM)
            FROM DETALLE
            WHERE ID_MASTER=:NEW.ID_MASTER
            INTO :ID;

           IF (ID IS NULL) THEN
              ID=1;
          ELSE
              ID=ID+1;

             NEW.ID_ITEM=:ID;
     END
end

Espero te ayude, saludos cordiales


La franja horaria es GMT +2. Ahora son las 13:37:47.

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