jueves, 4 de mayo de 2017

Trabajando con Transacciones en Microsoft Access - vba

Hoy vamos a trabajar con transacciones en Microsoft Access. Así es, esa pequeña base de datos, que en mi opinión es un gran caballito de guerra, también trabaja con transacciones. 

Vamos a empezar por definir que es una transacción, en la página de Microsoft nos dicen que una transacción es: 

"Una transacción es una secuencia de operaciones realizadas como una sola unidad lógica de trabajo. Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades de atomicidad, coherencia, aislamiento y durabilidad (ACID), para ser calificada como transacción."

Lo que quiere decir que una transacción se compone de mas de una operación en una base de datos y que esta tiene validez únicamente si se completan todas o ninguna.

El ejemplo clásico de esto, son las dos operaciones que se realizarían en el aplicativo de un banco al momento de debitar una cuenta por un monto y acreditar otra por dicho valor. 

Dicha operación solo tiene validez si ambas operaciones se ejecutan. ¿Pensemos que pasaría si solo se debita la primera cuenta? Tendríamos una disminución en el saldo de la misma y la cuenta de destino no registraría ningún incremento, es decir: el dinero quedaría en una especie de limbo.

Para evitar esto, las dos operaciones se deben empaquetar en una transacción, así, esta solo tendrá validez si se ejecutan las dos o ninguna.

Pasemos de la teoría al ejemplo. Vamos a trabajar con una sencilla base de datos que solo tiene una tabla con la siguiente información:


Nuestra misión es debitar (disminuir) la cuenta de Eduardo en $100 y acreditar (incrementar) la cuenta de Diana en ese mismo valor utilizando una transacción.

Veamos lo que ocurre cuando no usamos transacciones: 


Ejecutemos el código usando F8 para ir por cada línea:


Hasta ahí, realizamos el UPDATE con el que debitamos la primera cuenta, lo que podemos confirmar en nuestra base:


Ahora, supongamos que nuestro computador fallara en este preciso momento, antes de acreditar la segunda cuenta. Los 100 no llegarían nunca a la cuenta de Diana.

Si damos nuevamente F8, terminamos la operación y las dos cuentas ya están afectadas:


Ahora, vamos a trabajar empaquetando las dos operaciones en una transacción y ejecutamos el código con F8 hasta el primer UPDATE:


Si revisamos nuestros datos la instrucción no se ha ejecutado, porque para hacerlo se debe ejecutar la transacción completa:


Damos F8 para ejecutar la segunda y solo hasta que lleguemos a la instrucción CommitTrans (que indica la finalización de la transacción) se ejecutaran ambas:



Este es el código fuente de las dos rutinas:

Código:

Espero les sirva. Hasta una próxima.

2 comentarios: