Ver Mensaje Individual
  #3  
Antiguo 27-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo antes lo hacia de esa manera, pero es un desastre. La mejor forma de hacerlo: Olvidate de la base de datos hasta el momento de grabar

Manten todo en memoria (usa objetos) y luego mandas todo a grabar, en una transaccion

Piensa en codigo de este estilo:


Código Delphi [-]
var
  f: TFactura;
  d: TDetalle;
begin
  f := TFactura.Create; { obvio el try finally que libera de memoria... }
  f.Cliente := {  ... }  
  d := f.AgregarDetalle;
  d.Producto := {  ... }  

  GrabarFactura(f);
end;

procedure GrabarFactura(f: TFactura);
var
  IdCabecera: Integer;
begin
  IniciarTrans;
  try
   IdCabecera := GrabarCabecera;
   GrabarDetalle(IdCabecera, f.Detalle); 
   Commit;
 except
   Rollback;
   raise;
 end;
end;
Responder Con Cita