Ver Mensaje Individual
  #4  
Antiguo 23-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Cita:
Empezado por juanelo Ver Mensaje
Que tal José Román,
Creo que tu error está en:

Código Delphi [-]
 If fbDataSet.State in dsEditModes then fbDataSet.Cancel;
 trLocal.Commit; // <-- Aquí
 Action := caFree;

Ya no tiene sentido hacer commit si tus modificaciones o inserciones se cancelaron.

Saludos
¡claro que tiene sentido!, solo por decir un par de casos que se me ocurren:
  • Si el nivel de aislamiento de tu transacción es "Repetable read" o "serializable" que es lo mismo, y requerís obtener información "fresca" en tu siguiente select.
  • Que tal si la aplicación correrá sin parar durante un año, no querras que tu Oldest Transaction en el servidor sea tan viejo... y tener todas las versiones de todos los registros solo por eso... si la base de datos tiene unos cuantos miles de registros, y unos cuantos millones de updates en el transcurso de un año (una tabla de existencias, es un buen ejemplo). ¡el tamaño de la base de datos sería monstruoso!

Te recuerdo que también los select's y no no solo los insert/update/delete corren en el contexto de una transacción.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita