PDA

Ver la Versión Completa : Transacciones


silverscr
26-01-2009, 11:47:36
Buenas q tal?

Tengo una prequeña duda y queria escuchar la opinion de los expertos de por aqui.

Vereis tengo una aplicación que usa una base de datos firebird y mi duda es si es mejor usar un solo componente IBTransaction para todas las tablas o usar varios para cada una. :confused:

Ante todo os agradezco vuestras opiniones.

duilioisola
26-01-2009, 12:35:29
Si en una transaccione quieres insertar, por ejemplo, la cabecera y el detalle de un pedido y si algo sale mal hacer un rollback de todo, deberás usar una sola.
Si no es así, puedes usar más de una.

También puedes usar una de solo lectura y otra para hacer los insert/update/delete.

Yo utilizo 2 por cada DataModule. Una para tener todo en modo lectura y otra para hacer los insert/update/delete.

Obviamente, siempre hay excepciones... :)

silverscr
26-01-2009, 17:42:49
gracias por tu respuesta, lo meditare mas tranquilamente lo d las transacciones, pero se me ha ocurrido hacer grupos, por ejemplo, si tenemos compras y ventas, una transaccion para controlar albaranes y facturas de compras y otra para lo propio de ventas.

Q t parece?:D

duilioisola
26-01-2009, 18:12:42
Al final de cuentas, lo importante es que las transacciones esten vivas el menor tiempo posible.

Esto quiere decir que puedes tener una o muchas, pero tienes que tratar de que graben sus datos lo antes posible.

Un ejemplo:

Cada acción tiene su StartTransaction y su Commit. La cantidad de transacciones abiertas es siempre 1.

T1.StartTransaction --- ultima transaccion activa=1, próxima transacción=2
insert factura número 1.
T1.Commit --- ultima transaccion activa=1, próxima transacción=2

T2.StartTransaction --- ultima transaccion activa=2, próxima transacción=3
insert factura número 2.
T2.Commit --- ultima transaccion activa=2, próxima transacción=3

T3.StartTransaction --- ultima transaccion activa=3, próxima transacción=4
insert factura número 3.
T3.Commit --- ultima transaccion activa=3, próxima transacción=4

T4.StartTransaction --- ultima transaccion activa=4, próxima transacción=5
update factura numero 1
T4.Commit --- ultima transaccion activa=4, próxima transacción=5

Se abren transacciones con StartTransaction pero no se hace Commit hasta cerrar la aplicación. La cantidad de transacciones abiertas sube con cada acción.
(En este caso T1 se abre al principio y se cierra la última. Esto hace que el resto de transacciones deban esperar a que se haga commit, para poder hacer commit de sus propios datos)

T1.StartTransaction --- ultima transaccion activa=1, próxima transacción=2
insert factura número 1.

T2.StartTransaction --- ultima transaccion activa=1, próxima transacción=3
insert factura número 2.

T3.StartTransaction --- ultima transaccion activa=1, próxima transacción=4
insert factura número 3.

T4.StartTransaction --- ultima transaccion activa=1, próxima transacción=5
update factura numero 1
T4.Commit --- ultima transaccion activa=1, próxima transacción=5
T3.Commit --- ultima transaccion activa=1, próxima transacción=5
T2.Commit --- ultima transaccion activa=1, próxima transacción=5
T1.Commit --- ultima transaccion activa=5, próxima transacción=5