Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   control de concurrencia (https://www.clubdelphi.com/foros/showthread.php?t=37535)

dandia28 15-11-2006 21:04:25

control de concurrencia
 
Hola, tengo un problemita con una aplicación. La aplicación esta hecha en delphi 6 con componente IBX y firebird 1.5.3
Estuve leyendo el documento de IBX de ernesto cullen pero de todas formas no logro solucionarlo.
El tema es así, el usuario abre el formulario que tiene campos de varias tablas relacionadas, es decir comienza la transaccion y comienza a hacer cambios sin aceptar aún. Entra otro usuario abre el mismo registro ( o registros relacionados) hace un rápido cambio y confirma su transacción. El primer usuario sigue editando (que aún no habia cerrado su transacción) y por fin confirma la misma.... la aplicación se queda con los cambios del último usuario y se pierde lo que hizo el que la abrio entre medio....sin ningun aviso.
Yo el componente lo tengo con "read commited" como nivel de aislamiento y con los parametros "nowait" y "rec_version"


Agradezco alguna ayuda con este tema :o

Saludos, Daniel

Neftali [Germán.Estévez] 16-11-2006 10:23:20

Lo que a veces he hecho en casos similares es utilizar un TimeStamp; Es un campo de tipo FechaHora en la tabla en cuestión.

(1) Antes de modificar un registro leo el TimeStamp.
(2) Siempre que se actualiza un registro, se comprueba el TimeStamp y si no ha cambiado se actualiza el valor del registro y siempre se actualiza el TimeStamp.

Con estas dos premisas, en el caso que tu propones, el usuario que actualiza rápido no tiene problemas, y al intentarlo el segundo detectaría que el TimeStamp que leyó y el que hay antes de hacer el Update no es e mismo, por lo tanto otro usuario ha actualizado entre medio.

Espero haberme explicado bien.

Implica más consultas, pero como mínimo puedes avisar al usuario; Se puede mejorar más ampliando los campos de control (aunque eso hará más lentas las consultas); Por ejemplo con el último usuario de la modificación.

Cuando se detecta un cambio, puedes dar al usuario la opción de Continuar o Cancelar (si para tu caso tiene sentido).

Genner 16-11-2006 19:43:34

Creo q lo que necesitas es algo de documentacion sobre bloqueos, lamentablemente no tengo mucha idea sobre eso pero de que son bloqueos son bloqueos


La franja horaria es GMT +2. Ahora son las 09:35:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi