PDA

Ver la Versión Completa : Hacer un DirtyRead a tras una consulta de insercion


sherlock
02-04-2009, 09:51:13
Hola,

Me gustaria saber la manera de hacer un DirtyRead de una consulta Select tras realizar un Insert utilizando objetos TQuery en Delphi5.
Me explico:
Tengo una consulta Select que se ejecuta tras una insercion en un proceso transaccional, de manera que hasta que no acabe todo no quiero hacer el COMMIT. Como he dicho, el Select se ejecuta tras haber realizado una consulta Insert que añade un registro a la tabla y me gustaria que ese Select se hiciese de la tabla actualizada teniendo en cuenta el registro recien insertado. Bueno espero haberme explicado bien.

La pregunta es como se podria hacer un DirtyRead en Delphi ?? Tengo entendido que los DirtyRead son un mecanismo no muy aconsejable pero que permiten tener la tabla commiteada, verdad??
O si por el contrario seria necesario implementar algun mecanismo paralelo, por ejemplo una tabla en memoria que vaya almacenado los datos tras el insert y hacerle los Select a esta tabla.

Bien, espero vuestros consejos y muchas gracias.

Saludos,

sherlock
02-04-2009, 11:16:49
Vale, me respondo.

Para hacer el Dirtyread hay que especificarselo a la propiedad TranslationIsolation de la base de datos.

Algo como esto:
MiDatabase.TransIsolation := tiDirtyRead;

Pero he probado tanto esto como el modo ReadCommitted y no funciona.

Explico nuevamente o de otra forma lo que quiero conseguir:

Tengo un blucle for que recorre N elementos de un array a insertar en la BD. Uno de los campos a insertar se obtiene a traves de una consulta SELECT con un parametro del elemento N1 del array. Una vez tengo todos los valores para los campos, hago el INSERT.
Pues bien, el problema viene cuando al hacer el SELECT tiene que devolver un valor de un registro previamente insertado (todavia no hemos hecho COMMIT porque el for no ha acabado). Es decir ese registro todavia no se ha actualizado en la BD.

Bien, seguiremos intentandolo a ver y toda respuesta sera bienvenida.

saludos,