Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03/03/2007
goduquez goduquez is offline
Miembro
 
Join Date: Mar 2007
Posts: 24
Poder: 0
goduquez Va por buen camino
Question 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
Reply With Quote
  #2  
Old 03/03/2007
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #3  
Old 23/03/2007
Morphine Morphine is offline
Miembro
 
Join Date: Aug 2004
Posts: 28
Poder: 0
Morphine Va por buen camino
Una pregunta, el Rollback no se aplica al ApplyUpdates?
Si hago un ApplyUpdates sobre un objeto Query, luego hago Rollback y no tiene alcance?
Reply With Quote
  #4  
Old 12/11/2007
Gran Cacique Gran Cacique is offline
Registrado
 
Join Date: Jan 2007
Posts: 7
Poder: 0
Gran Cacique Va por buen camino
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
Reply With Quote
  #5  
Old 12/11/2007
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #6  
Old 12/11/2007
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Quote:
Originally Posted by Gran Cacique View Post
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.
Reply With Quote
  #7  
Old 12/11/2007
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Por favor Gran cacique, no repitas hilos, te recomiendo leas las normas del foro.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Transacciones juanmdq Oracle 3 12/01/2007 14:59
alcance de las propertys supermilloriver OOP 1 11/09/2006 23:43
Transacciones BlueSteel Conexión con bases de datos 1 10/09/2004 19:00
Transacciones ronson Firebird e Interbase 4 10/03/2004 12:50


All times are GMT +2. The time now is 01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi