PDA

Ver la Versión Completa : Concurrencia "bloqueada" en Firebird.


Roky
01-12-2007, 23:12:13
Hola a todos,

Estoy trabajando con Delphi7 y Firebird 2.0 sobre Windows XP Pro.

El caso es que he comprobado que si intento modificar un registro de la BD que ha sido modificado por otra sesión de la aplicación, y que por tanto está bloqueado, la ejecución del código de mi aplicación en Delphi se bloquea. Es decir, en lugar de saltar una Excepción de BD, la cual pudiera capturar y actuar en consecuencia, la ejecución del código de mi aplicación en Delphi se bloquea justo en la instrucción "execSQL" que lanzan el "update" sobre el registro bloqueado.
¿Es esto normal? ¿Hay alguna manera de provocar que salte una excepción que pueda capturar?

Gracias.
Un saludo.

RONPABLO
02-12-2007, 02:34:49
Hola, te hago unas preguntas...

1. Que componente usa para hacer la el execSQL?
2. Justo despuesde hacer el execSQL hace algun commit?
3. TIene algun componente transaccional y que opciones tiene este?? (read commit, wait ó no wait)

Roky
02-12-2007, 19:44:52
Hola RonPablo,

1. Utilizo los componentes Mercury.
2. Concretamente, tras el execSQL que me ocupa no hay commit. De todos modos, la instrucción que va tras el execSQL no llega a ejecutarse.
3. Utilizo componentes transaccionales (TMDOTransaction). Las opciones que tienen son:
AutoCommit = False
IdleTimer = 0
DefaultAction = TACommit.

Un saludo.

RONPABLO
02-12-2007, 22:10:32
en el componente de la transaccion al dar doble click sale como esta configurado... ahi dice si es read commit o algo similar, la cuestion es que despues de hacer una insercion es recomendble hacer commit, depronto ese puede ser su problema

rastafarey
15-12-2007, 18:20:22
verifica tu transacion para ver si incluye readversion. De no ser asi te vas a causar muchos dolores de cabesa.

Roky
17-12-2007, 11:14:55
Efectivamente, no tenía configurados los parámetros del componente Transaction. Con las pistas que me habéis dado, indicaré los parámetros:
NOWAIT: para que en caso de conflicto, no se bloquee.
READCOMMITED: para ver la última version de los registros modificados (y confirmados (commit)) por otras transacciones.

Por otra parte, recomiendo este documento para conocer las transacciones en IB y FB.
http://www.intitec.com/varios/transacciones-0.2.6.pdf

Gracias por el interés.