Ver Mensaje Individual
  #1  
Antiguo 04-08-2005
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Reputación: 0
Loviedo cantidad desconocida en este momento
Transaciones IBX

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;
   // Guarda familia
   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';//Incrementa el código familia
           FDM.Incrementa.ExecProc;
           FDM.FamiliaT.Next;
         end;
     end;
   FDM.IBT1.Commit;
 except
   FDM.IBT1.Rollback;
 end;
end;
saludos y Gracias anticipadas.
Responder Con Cita