Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2007
goduquez goduquez is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #2  
Antiguo 03-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
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.
Responder Con Cita
  #3  
Antiguo 23-03-2007
Morphine Morphine is offline
Miembro
 
Registrado: ago 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?
Responder Con Cita
  #4  
Antiguo 12-11-2007
Gran Cacique Gran Cacique is offline
Registrado
 
Registrado: ene 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
Responder Con Cita
  #5  
Antiguo 12-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
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.
Responder Con Cita
  #6  
Antiguo 12-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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!

Cita:
Empezado por Gran Cacique Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 12-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Transacciones juanmdq Oracle 3 12-01-2007 14:59:42
alcance de las propertys supermilloriver OOP 1 11-09-2006 23:43:17
Transacciones BlueSteel Conexión con bases de datos 1 10-09-2004 19:00:16
Transacciones ronson Firebird e Interbase 4 10-03-2004 12:50:09


La franja horaria es GMT +2. Ahora son las 16:53:35.


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
Copyright 1996-2007 Club Delphi