Bueno asi de memoria nomas
Para el problema de las claves primarias basta con utilizar la propiedad generatorfield del ibdataset.
Antes de ingresar algun registro en el detalle (creo q en el evento afterinsert) hago:
Código Delphi
[-]ibencabezado.CheckBrowseMode;
ibencabezado.edit
Asi se asigna el valor del generador a la clave primaria
y en el evento beforepost de la tabla detalle hago:
Código Delphi
[-]if ibdetalle.fieldbyname('referencia').isnull then
ibdetalle.fieldbyname('referencia').asinteger:=ibencabezado.fieldbyname('claveprimaria').asinteger;
y al guardar solo hago
Código Delphi
[-]ibencabezado.CheckBrowseMode;
ibdetalle.CheckBrowseMode;
ibtransaccion1.CommitRetaining;
Bueno creo q mas o menos asi. Tu disculparas si es q hay algo q no es. Es q no tengo delphi a mano en este momento.
Saludos