PDA

Ver la Versión Completa : commit o rollbakc en ondestroy


jrmanso
06-05-2007, 00:14:25
no tengo muy claro que es lo mejor para una transaccion si hacer commit o rollbakc en el destroy del modulo de datos o formulario.
esta claro que commit asegura cualquier actualizacion que no se hiciera antes pero tambien podria dejar la base de datos inconsistente en caso de un fallo a mitad de una actualizacion.

si alguien tiene claro este tema agradeceria su ayuda
IBDataset y delphi 7
Gracias

Caral
06-05-2007, 00:21:29
Hola
El asunto es asi:

begin
DataModule1.AC1.BeginTrans;

try
// aqui todo lo que quieres hacer

end;
DataModule1.AC1.CommitTrans;

except
on E:Exception do DataModule1.AC1.RollbackTrans;
end;

Esto usando un datamodule.
AC1, es el conector a la base de datos en este caso.
Saludos

jrmanso
06-05-2007, 01:01:48
Gracias Caral por tu respuesta
pero mi duda no es como usar commit o rollbakc en una transaccion
quizas no he realizado bien la pregunta.
tengo un modulo de datos con su transaccion y varios IBDataset enganchados ya me preocupo de hacer los commit o rolbakc pertinentes despues de cada modificacion, insercion de datos en uno o en varios IBDataset.
He visto en varios proyectos que en el evento ondestroy de MD meten un commit supongo para confirmar datos que puedan no estarlo.

:confused: Mi duda esistencial es si es mejor meter un commit o un rollbakc en ese evento on destroy del Modulo Datos y cuales son las ventajas inconvenientes de usar uno o otro.

supongamos que estoy haciendo una actualizacion en tabla maestro y tabla detalle y tengo un error no controlado que destruye el MD
si en el evento ondestroy tengo commit puedo estar confirmando algo que me deje la BD en un estado inconsistente.
Perdon por el rollo espero que se me entienda la mala pregunta
Gracias de nuevo.

TJose
06-05-2007, 15:52:38
Hola

En que lugar estas empezando la transacción? Es cuando creas la ventana?

Yo trabajo todo lodo lo realcionado a ABM de manera explicita, en el momento de *Aceptar*, empiezo y termino la transacción, ya sea con un commit o u rollback. Fuera del Aceptar no hago nada que tenga que ver con las transacciones.


Saludos
TJose

jrmanso
06-05-2007, 20:11:54
Hola de nuevo
Gracias TJose por tu interes
Las transacciones las tengo controladas, depende del formulario, bien en el boton aceptar si trabajo con TEdit sobre varias tablas o bien en los eventos
afterpost y afterdelete si trabajo con TDBEdit sobre una tabla.

Pero la duda como planteaba antes es el evento ondestroy del Modulo de Datos aparte de como se tengan controladas las transacciones.

He visto en varios proyectos que en el evento ondestroy de MD meten un commit supongo para confirmar datos que puedan no estarlo.

:confused: Mi duda esistencial es si es mejor meter un commit o un rollbakc en ese evento on destroy del Modulo Datos y cuales son las ventajas inconvenientes de usar uno o otro.

Gracias y un saludo.

Caral
06-05-2007, 20:23:34
Hola
Me sigue pareciendo innecesario el uso ni de uno ni de otro en el modulo de datos, si la transaccion se hace en cualquier evento del programa, con un CommitTrans, se hara si los datos coincidieron ect, y con un RollbackTrans, dejara la tabla en su estado anterior al cambio sin perjudicar nada.
Veo un poco paranoico, el uso de verificacion de transacciones en el data module, cuando se destruye, no se para mi es un gasto de masa cerebral innecesario, no se, la verdad nunca lo he usado y nunca lo he necesitado, es como repetirle al programa, oye, si no se hicieron los cambios, a ver que haces antes de salir, con que tabla trabajara, con todas las que esten en el datamodule, bueno, sientate y espera un gran rato a que las confirme todas, no se, no me convence.
Humilde opinion.
Saludos