[Lazarus-es] zeos-firebird: ejemplo transacciones

José Antonio Cuello josea en artextrading.com
Vie Mayo 7 10:19:07 CEST 2010


Hola, yo trabajo siempre las transacciones manualmente. Simplemente
usando la funcion InTransaction de la base de datos o del conection (no
recuerdo ahora donde está) controlas si tienes que hacer el
starttransaction, y con try finally o except controlas los rollbacks.
Sería algo así:

var vTrans: Boolean;
begin
  vTrans := database.Intransaction;
  try
    if (not vTrans) then database.starttransaction;
    ...
      [sentencias de Insert/Update/Delete]
    ...
    if (not vTrans) then database.commit;
  finally
    if (not vTrans) and database.Intransaction then database.rollback;
  end;
end;

De esta manera si al llamar al proceso has iniciado la transaccion en
otro procedimiento usa la transaccion abierta, si no hay transaccion la
abre y la cierra.

Espero sea de ayuda.

El jue, 06-05-2010 a las 13:51 -0300, Paola Bruccoleri escribió:
> Hola..
> alguien tiene algún ejemplo (usando zeos/firebird2) donde graba varios 
> registros en varias tablas (usando o no sp) y que queden en la misma 
> transacción?? quisiera ver cómo lo están resolviendo.
> 
> esto es lo que yo hago:
> 
>    DBMain.fdb.AutoCommit:= false;
> 
>    try
>      DBMain.qry.Close;
>      DBMain.qry.SQL.Text:= 'update numeros set boletas = 
> '+IntToStr(nComprob+1);
>      DBMain.qry.ExecSQL;
>    except
>      MessageDlg('Error', 'Hay error ', mtWarning, [mbOk], 0);
>      DBMain.fdb.Rollback;
>    end;
> 
>    ..... varias sentencias: inserts, updates.... todas entre try/except
> 
>    DBMain.fdb.Commit;
>    DBMain.fdb.AutoCommit:= true;  
> 
> 
> Si uso un generador para incrementar el contador de comprobantes, se 
> supone que si todo el proceso de grabar está dentro de la misma 
> transacción, puedo seguir consultando por el valor del generador, que no 
> se me va a modificar, no?
> 
> chauuuuuuuuuu
> 
> 
> 
> 
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es



________________________________________________________________________

ARTEX TRADING S.A.
José Antonio Cuello Principal







More information about the Lazarus-es mailing list