[Lazarus-es] zeos-firebird: ejemplo transacciones
José Antonio Cuello
josea en artextrading.com
Jue Mayo 13 07:56:41 CEST 2010
El mié, 12-05-2010 a las 21:34 -0300, Paola Bruccoleri escribió:
> 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
Aquí te faltaría un begin / end que agrupe el rollback y el messageDlg
> 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
Si te está haciendo el commit es porque el procedimiento/funcion graba
no devuelve error alguno. No sé si será por el storeprocedure del Zeos
al lanzar el delete, porque al llegar al procedimiento la base de datos
ya está en transacción y el procedimiento anterior no gestiona la
transaccion o por que te está abriendo distintas transacciones.
De todas maneras yo no cambio DBMain.fdb.AutoCommit:= false; Siempre lo
dejo en True y nunca me ha dado problema.
Yo inicialmente probaría a cambiar el procedimiento de delete por un
TZQuery con un SQL tipo "DELETE FROM" para eliminar variables. También
si queres pasame un ejemplo para poder hecharle un vistazo haber si
consigo ver algo. Ya sabes, cuatro ojos ven más que dos .... :)
Un saludo.
________________________________________________________________________
ARTEX TRADING S.A.
José Antonio Cuello Principal
More information about the Lazarus-es
mailing list