Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Transacciones (https://www.clubdelphi.com/foros/showthread.php?t=63008)

silverscr 26-01-2009 11:47:36

Transacciones
 
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.
Código:

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)
Código:

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



La franja horaria es GMT +2. Ahora son las 21:35:10.

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