[Lazarus-es] zeos-firebird: ejemplo transacciones
Paola Bruccoleri
pbruccoleri en adinet.com.uy
Jue Mayo 13 02:34:44 CEST 2010
José Antonio Cuello escribió:
> 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;
>
>
Hola José..
seguí tu esquema para agrupar las sentencias sql en una misma
transacción, y hoy estuve haciendo pruebas y no me está funcionando. No
se si soy yo o un problema del zeos.
(zeos7.0.0, firebird 2.1.3).
vTrans := DBMain.fdb.Intransaction;
try
if (not vTrans) then DBMain.fdb.StartTransaction;
Graba;
if (not vTrans) then DBMain.fdb.Commit;
finally
if (not vTrans) and DBMain.fdb.Intransaction then DBMain.fdb.Rollback;
MessageDlg('Error', 'Hay error en los datos', mtWarning, [mbOk], 0);
end;
Graba() hace esto:
DBMain.fdb.AutoCommit:= false;
ejecuta un store procedure
ejecuta varios inserts en tabla A
ejecuta un delete en tabla B
A propósito mando datos erróneos en el delete, violando la integridad
referencial o poniendo mal un nombre de parámetro y al chequear la bd,
veo que se ejecutó y "commiteo" la store procedure y los inserts...
Por tanto, no me quedan las 3 sentencias agrupadas en la MISMA transacción.
qué estará pasando?
muchas gracias a todos..
chauuuuuuuuuu
More information about the Lazarus-es
mailing list