PDA

Ver la Versión Completa : Duda sobre el CommitRetaining


look
09-11-2011, 17:53:29
Hola amigos tengo una duda sobre el como funciona este procedimiento.

el problema es que cuando hago commit la base de datos se desconecta, tengo un formulario de facturacion en donde muestro una consulta de las facturas del dia y un boton que me llama al formulario de factura, pero cuando guardo una factura y cierro la ventana del formulario factura la consulta del modulo de factruracion queda desactivada, es claro poque al hacer el commit la base de datos se cierra, investigue algo y parace que si utilizo el CommitRetaining la base de datos se mantiene activa, pero mi duda es que segun la ayuda del delphi F1, me dice que guarda los cambios como un commit pero mantiene la transaccion activa y con esto tengo muchas dudas...

http://img824.imageshack.us/img824/8453/invoice1.png

despues de hacer commit

http://img850.imageshack.us/img850/5035/invoice2.png

defcon1_es
10-11-2011, 12:09:52
Hola.
Te respondo citando a mi amigo Kinobi

Hola,


Lo que ocurre es que, con CommitRetaining, no se lanza el proceso de recolección cooperativa de basura, o lo que es lo mismo, no se eliminan los "deltas" (recuerda que InterBase no almacena copias completas en la multiversión de registro, sólo de los cambios efectivos dentro de cada registro) que se generan en la Arquitectura Multi-Generacional. De todas formas, el proceso de sweeping, o un backup-restore, elimina el problema.


Realmente la transacción no es la misma después de un CommitRetaining. Lo que sucede es que la nueva transacción, que se crea tras el CommitRetaining, aprovecha el contexto que estaba utilizando la transacción anterior para agilizar el proceso. Los cambios que realicen otras transacciones concurrentes, independientemente al uso de Commit o CommitRetaining, sólo podrás verlos si se confirman (con Commit o CommitRetaining) en esas transacciones y, además, tu transacción tiene un nivel de aislamiento suficientemente bajo para verlos (READ COMMITED).

Saludos.