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