Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Alcance de las Transacciones (https://www.clubdelphi.com/foros/showthread.php?t=40961)

goduquez 03-03-2007 06:54:08

Alcance de las Transacciones
 
Hola compañeros, tengo una inquietud.

En una transacción como en el proceso de dos tablas más un generador: generador, maestro – detalle, si grabo correcta mente en el maestro pero por alguna razón hay un error en el detalle luego doy instrucciones de anular la transacción (Rollback). Pregunta:
¿me anula inclusive los asientos del maestro?,
¿ocurre en todos los procesos (el Rollback) en tablas, o solamente en la que se presento la excepción?.
¿Asumo una transacción como un procesos que involucraría una sola tabla o un conjunto de procesos con repercusión ilimitada?.

Saludos

Lepe 03-03-2007 13:28:39

El Rollback deshará todos los cambios realizados desde el StartTransaction , incluyendo post realizados en otras tablas.

Ya se ha dicho en muchas ocasiones que el generador se escapa a las transacciones, por tanto, si se incrementó el generador, éste no se puede volver atrás con el simple mecanismo de Rollback.

Saludos

Morphine 23-03-2007 00:21:33

Una pregunta, el Rollback no se aplica al ApplyUpdates?
Si hago un ApplyUpdates sobre un objeto Query, luego hago Rollback y no tiene alcance?

Gran Cacique 12-11-2007 17:14:36

Me sumo a la pregunta
 
Tengo un tClientDatset dentro de una transaccion, pero a pesar de estar dentro de la transaccion se ejecuta cuando le hago applyupdate, y no al hacer el commit. ¿Acaso no sirve colocar dentro de una transaccion el applyupdate? De antemano, muchas gracias

Lepe 12-11-2007 18:33:08

Dadle una visual a la ayuda de TDatabase.ApplyUpdates en la ayuda.

ApplyUpdates calls the dataset's ApplyUpdates and CommitUpdates methods to post that dataset's pending cached updates.

Morphine: Aunque se llame a Rollback, los commits anteriores ya se han hecho, por tanto "no hay alcance" ;).

Gran Cacique: Applying updates is a two-phase process that takes place within the context of the database component's transaction control.

Acabo de darme cuenta de la fecha de Morphine, lamento que se me haya pasado por alto este hilo :(.

Saludos

Al González 12-11-2007 18:39:20

¡Hola a todos!

Cita:

Empezado por Gran Cacique (Mensaje 245506)
Tengo un tClientDatset dentro de una transaccion, pero a pesar de estar dentro de la transaccion se ejecuta cuando le hago applyupdate, y no al hacer el commit. ¿Acaso no sirve colocar dentro de una transaccion el applyupdate? De antemano, muchas gracias

El método TClientDataSet.ApplyUpdates envía los cambios al servidor, los cuales todavía tienes oportunidad de deshacer revirtiendo (rollback) la transacción. El revertir (rollback) una transacción sólo aplica a la capa de la base de datos, por lo que después de esa operación resulta necesario refrescar el conjunto de datos (método Refresh), si quieres que éste muestre información acorde a la transacción revertida.

No es una solución muy agradable que digamos porque esto implica volver a cargar todas sus filas. De ahí que hace tiempo me dediqué a desarrollar un derivado de TClientDataSet, donde después de llamar a ApplyUpdates todavía puedes decirle que regrese a un estado previo (para ello le agregué un parámetro "ConfirmSuccess" a ApplyUpdates).

El truco está en usar los puntos de restauración (save points) nativos de la clase TClientDataSet y en evitar la llamada a MergeChangeLog que ApplyUpdates realiza internamente.

En mi caso, lo implementé de tal forma que cuando hago un Rollback, se revierten también todos los ApplyUpdates que previamente hayan sido "marcados" en el contexto de la transacción. Es decir, logro manejar transacciones multi-capa.

Un abrazo.

Al González. :)

Lepe 12-11-2007 19:11:51

Por favor Gran cacique, no repitas hilos, te recomiendo leas las normas del foro.


Saludos


La franja horaria es GMT +2. Ahora son las 05:08:43.

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