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)
-   -   Firebird 2 con FibPlus (https://www.clubdelphi.com/foros/showthread.php?t=40475)

camino 17-02-2007 18:53:48

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.

Casimiro Noteví 17-02-2007 19:59:51

¿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?

camino 17-02-2007 21:02:55

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.

Casimiro Noteví 17-02-2007 21:10:27

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."

camino 17-02-2007 23:36:51

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.

Casimiro Noteví 17-02-2007 23:50:30

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