Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Transacción maestro-detalle con Zeos y SQLite (https://www.clubdelphi.com/foros/showthread.php?t=64385)

peccatum 30-03-2009 17:54:10

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

peccatum 31-03-2009 15:13:32

cri cri cri

peccatum 03-04-2009 18:10:01

0123456789

peccatum 04-04-2009 05:30:10

La solución a este problema la encontré en este hilo:

http://www.clubdelphi.com/foros/showthread.php?t=63819

como hay que transpirar con sqlite, implementar integridad referencial y ahora esto...

Saludos!


La franja horaria es GMT +2. Ahora son las 00:47:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi