Tengo dos tablas (master/detail).
Utilizo Delphi7,Firebird 1.5, e IBQuery.
Mi problema es que no puedo insertar más de un registro(Detail),
porque no se confirman los datos hasta que realizo el Commit,
y es entónces cuando se incrementa el código familia.
No puedo individualizarlos porque va todo dentro de la misma
transación. Pienso en una transación anidada, pero no se como
hacerla y si es permitida.
Código Delphi
[-]
procedure TFFicha.aceptarClick(Sender: TObject);
var
codigoficha: integer;
begin
if not (FDM.IBT1.InTransaction) then
FDM.IBT1.StartTransaction;
try
codigoficha := FDM.codigosFICHA.AsInteger;
FDM.PFICHA.StoredProcName:= 'ALTAFICHA';
FDM.PFICHA.Parambyname('mcod').asinteger:=codigoficha;
FDM.PFICHA.Parambyname('mnombre').asstring:=uppercase(nombre.text);
FDM.PFICHA.Parambyname('mapell').asstring:=uppercase(apellidos.Text);
FDM.PFICHA.Parambyname('mfecha').asdatetime:=fecha.date;
if not FDM.FamiliaT.IsEmpty then
begin
FDM.FamiliaT.First;
while not FDM.FamiliaT.Eof do
begin
FDM.PFamilia.StoredProcName:='P_ALTAFAMILIA';
FDM.PFamilia.ParamByName('mCod').value := codigoficha;
FDM.PFamilia.ParamByName('mCodf').value:= FDM.CodigosFAMILIA.AsInteger;
FDM.PFamilia.ParamByName('mNom').value:= FDM.FamiliaTNombre.text;
FDM.PFamilia.ParamByName('mApell').value := FDM.FamiliaTApellidos;
FDM.PFamilia.ExecProc;
FDM.Incrementa.StoredProcName:='P_INCFAMILIA'; FDM.Incrementa.ExecProc;
FDM.FamiliaT.Next;
end;
end;
FDM.IBT1.Commit;
except
FDM.IBT1.Rollback;
end;
end;
saludos y Gracias anticipadas.