Ver Mensaje Individual
  #1  
Antiguo 30-03-2009
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Reputación: 19
peccatum Va por buen camino
Transacción maestro-detalle con Zeos y SQLite

Estimada comunidad,

Estoy tratando de implementar una función en Delphi (utilizando Zeos y una DB SQLite-3) que inserte en la base de datos un encabezado en una tabla y un conjunto de lineas de detalle, y quiero que estas operaciones estén dentro de una transacción de modo que se cargue todo o nada. Lo he encarado de la siguiente forma pero no esta funcionando:

Código Delphi [-]
 
ZConnection1.StartTransaction;
       try
       
       ZQMovs.Post;
        InsMD(ZQMovsId_int_movimiento.AsInteger);
        umain.FMain.ZConnection1.Commit;
        
       except

        ZConnection1.rollback;
        raise;

       end;

ZQMovs sería el encabezado, y el procedimiento InsMD lo que hace es recorrer un memory data y va insertando todos sus registros que serían el detalle de ZQMovs.

De esta forma no me está funcionando ya que si algo sucede mal en la función InsMD el encabezado y las lineas anteriores me las guarda, y no quiero que eso suceda....

¿Sugerencias de cómo implementar esto?

Por si hace falta, el cuerpo del procedimiento que carga las lineas luce de ésta forma:

Código Delphi [-]
 try

                 while not MTMov_Det.Eof do
                 begin

                             ZQAdmDet.Append;

                             ZQAdmDetId_Int_Movimiento.AsInteger := det;
                             ZQAdmDetId_Articulo.AsString :=
                               MTMov_DetID_Articulo.AsString;
                             ZQAdmDetCantidad.AsFloat :=
                               MTMov_DetCantidad.AsFloat;
                             ZQAdmDetId_Destino.AsInteger := 1;

                             ZQAdmDet.Post;
                                

                 end;



            except

              

               raise;

            end;

Saludos
Responder Con Cita