Hola.
Una forma genérica de asignar maestro/detalle con la estructura que pusiste arriba seria:
Supongamos que tenés declarado
Código SQL
[-]
CREATE GENERATOR G_MAESTRO;
CREATE GENERATOR G_DETALLE;
CREATE TABLE MAESTRO (
IDMAESTRO INTEGER NOT NULL,
FECHA_1 DATE,
IDUSUARIO INTEGER,
TOTAL NUMERIC(15,2),
CONSTRAINT MAESTRO_PK PRIMARY KEY (IDMAESTRO),
);
CREATE TABLE DETALLE (
IDDETALLE INTEGER NOT NULL,
REFMAESTRO INTEGER NOT NULL,
IDCLIENTE INTEGER NOT NULL,
IDPRODUCTO INTEGER NOT NULL,
CONSTRAINT MAESTRO_PK PRIMARY KEY (IDDETALLE),
FOREIGN KEY(REFMAESTRO) REFERENCES MAESTRO(IDMAESTRO)
);
Triggers para generators:
Código SQL
[-]
SET TERM ^;
CREATE TRIGGER MAESTRO_BI FOR MAESTRO ACTIVE BEFORE INSERT OR UPDATE
AS
BEGIN
IF (NEW.MAESTRO_ID IS NULL) THEN
NEW.MAESTRO_ID = GEN_ID(G_MAESTRO,1);
END^
CREATE TRIGGER DETALLE_BI FOR DETALLE ACTIVE BEFORE INSERT OR UPDATE
AS
BEGIN
IF (NEW.DETALLE_ID IS NULL) THEN
NEW.DETALLE_ID = GEN_ID(G_DETALLE,1);
END^
SET TERM ;^
Y esté asignado en 'MAESTRO':
Cita:
.IBDataSetMaestro -> TABLE MAESTRO
.dsMaestro -> IBDataSetMaestro
.GeneratorField -> G_MAESTRO
|
Y en 'DETALLE':
Cita:
.IBDataSetDetalle -> TABLE MAESTRO
.dsDetalle -> IBDataSetDetalle
.GeneratorField -> G_DETALLE
|
Debería funcionar si:
Cita:
.IBDataSetDetalle.SelectSQL:= 'SELECT * FROM DETALLE WHERE REFMAESTRO = :IDMAESTRO';
.IBDataSetDetalle.DataSource:= dsMaestro;
|
Saludos.