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 |
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 |
Una pregunta, el Rollback no se aplica al ApplyUpdates?
Si hago un ApplyUpdates sobre un objeto Query, luego hago Rollback y no tiene alcance? |
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
|
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 |
¡Hola a todos!
Cita:
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. :) |
|
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