![]() |
Firebird 2 con FibPlus
Hola amigos
Estoy intentando agregar como parameter en un pFIbTransaction: 'Lock Timeout 5' Uso Delphi 7 , Firebird 2.01 con fibplus 6.45. Como tengo los codigos fuente de FibPlus, he modificado el FIB.pas y el Ibase.pas agregandole la constante isc_tpb_lock_timeout y el parametro LOCK TIMEOUT. Compilo e instalo nuevamente FibPlus. Al ejecutar la aplicacion me da un mensaje de error indicando que LOCK TIMEOUT 5 no existe. Seria posible que alguien me ayudara ya que no tengo los conocimientos para hacer estas modificaciones. Muchas Gracias. |
¿Y qué es lo que quieres hacer exactamente?
¿Y por qué quieres modificar el fuente de Fibplus? ¿Y por qué quieres "meter" ese código? |
El Santo Grial de las Transacciones
Estimado Casimiro Notevi.
La idea es configurar un sistema de ventas donde la pfIbTransaction tenga la conurrencia en: wait lock timeout 5 Esto quiere decir que cuando exista una concurrencia a un mismo registro, la mas nueva esperara un maximo de 5 segundos antes de dar un error de lock timeout. Si soluciono este problema, las transacciones con una cantidad de usuarios importantes no presentaran errores. Y los muy pocos que pudiera haber son manejados facilmente. Estas nuevas caracteristicas de Firebird 2 hace que se puedan hacer rutinas ( yo las hago como procedimientos almacenados) que tendrian la mitad de los problemas solucionados en el foro. Por eso pido que se integren para poder solucionar esto. Gracias. |
Pues la verdad es que no lo he entendido muy bien, ¿quiéres decir algo así como esto?:
caja1: vende una lata de kikocola caja2: tiene que esperar 5 segundos para vender a otro cliente su kikocola caja3: vende, 5 segundos después, a otro cliente, una lata de kikocola caja2: sigue esperando los 5 segundos de la caja3 caja1: vuelve a pasar otra lata de kikocola caja2: sigue esperando... caja2: ahora vende su lata de kikocola A qué problemas te refieres con: "Estas nuevas caracteristicas de Firebird 2 hace que se puedan hacer rutinas ( yo las hago como procedimientos almacenados) que tendrian la mitad de los problemas solucionados en el foro." |
transacciones wait lock timeout
estimado Casimiro Notevi
Me explico: 1.- Caja1, Caja2, Caja3 son clientes que tiene el mismo software. 2.- Sus correspondientes pFIbTransaction estan configuradas como sigue: ] write nowait rec_version read_committed ] Esto quiere decir que si Caja1 vende una lata de kikocola y en ese mismo instante Caja2 tambien vende una lata de kikocola se produce una concurrencia de 2 transacciones al mismo registro. Por lo tanto la transaccion que llego segunda por tener un ]"nowait"]no espera y lanza un error lock_conflict indicando al usuario esta situacion para despues hacer un rollback. Ante esta situacion el usuario debe rehacer la transaccion. Imaginate en un supermercado!!! ]DE LA OTRA FORMA] 1.- Caja1, Caja2, Caja3 son clientes que tiene el mismo software. 2.- Sus correspondientes pFIbTransaction estan configuradas como sigue: ] write wait LOCK TIMEOUT 5 rec_version read_committed ] Esto quiere decir que si Caja1 vende una lata de kikocola y en ese mismo instante Caja2 tambien vende una lata de kikocola se produce una concurrencia de 2 transacciones al mismo registro. En este caso la transaccion que llego segunda por tener un ]"wait"]espera a que la primera transaccion termine y despues procede a ejecutarse. Pero este ]"wait" tiene un peligro potencial, pues mientras no termine la transaccion anterior no se ejecutara la siguiente pudiendo pues transcurrir una cantidad de tiempo muy grande(se desconecto el cliente , etc.). Entonces aqui viene la gran solucion. Firebird 2 acompaña el parametro "wait" del parametro "Lock Timeout X". Esto significa que si la primera transaccion no se termina en 5 segundos, se producira un error isc_lock_timeout lo cual se maneja programaticamente. En ningun caso este parametro quiere decir que la segunda transaccion debe esperar 5 segundos. De hecho puedo colocarle un tiempo de 1 segundo si quiero. Y con respecto a lo ultimo. Si revisas las consultas del foro, la mayoria de ellas tienen que ver con consultas relacionadas con stocks, tablas maestro detalle, updates etc. |
Creo que deberías leer este documento sobre las transacciones.
Está escrito por Juan José Rodríguez (Kinobi) |
| La franja horaria es GMT +2. Ahora son las 12:10:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi