Saber si está bloqueado un registro

14/01/2005 - 11:31 por Keyhelp | Informe spam
Hola a todos:

Necesitamos saber si se puede consultar alguna tabla de sistema que te
permita sabe si un registro está bloqueado por update ( antes de hacer el
Commit ) de una determinada tabla

Me explico:
Tenemos dos usuarios ( cada uno en un puesto diferente ) en que pueden
consultar datos de una determinada tabla y modificarlo.

Cuando recuperamos esta información, la almacenamos en diversas variables
para poder manipularla, pero si los dos usuarios acceden a la vez, puede
suceder que los dos tengan los mismos datos antes de modificarlo, uno graba
el registro y cuando el otro lo graba machaca los datos con los suyos.

Por eso, habiamos pensado en que cuando uno de ellos recupere la
información, realice un UPDATE ( sin hacer commit hasta el final ) de un
determinado campo de ese registro, de forma que el otro usuario no pueda
modificarlo, pero sucede que cuando intenta recuperar esta información, se
queda esperando hasta que el otro termine, lo que deja su puesto bloquedao.
Es aqui donde queremos consultar si el registro que quiere modificar está
bloqueado o no, para darle al usuario un mensaje de información indicándole
que no puede porque otro usuario lo está modificando en ese momento.

Gracias por adelantado.

Francisco López
Dpt. Desarrollo
Keyhelp, S.L.
http://www.keyhelp.net
 

Leer las respuestas

#1 Enrique Albert
14/01/2005 - 12:37 | Informe spam
Hola,

Este problema se da muy a menudo, yo aconsejo una estrategia de
"refresco" donde la aplicacion antes de modificar un registro comprueba
si los datos han cambiado desde que fueron leidos.

Un primara solucion es añadir un campo datetime llamado
UltimaModificacion. Ahora bien, puede que sepas cuando el registro ha
cambiado, pero como gestionar que debe hacer la aplicacion cuando esto
ocurre puede ser laborioso.

Otra solucion es establecer un flag en el registro, el usuario tiene
que indicar que quiere editar un registro antes de hacer ninguna
modificacion, cuando esto ocurre el sistema actualiza el flag, si otro
usuario intenta editar el registro el sistema le indica que hay alguien
mas en el sistema editando el registro. Cuando se confirma o cancela el
proceso de ediccion entonces el flag vuelve a su estado normal.

Esta última solución es la que he visto mas a menudo.

No es un tema facíl de solucionar. Microsoft tiende a solucionar este
problema dejando abierto el recordset entre el cliente y el servidor,
puedes utilizar recordsets que se actualizan automaticamente. Pero como
todo, tiene muchas desventajas y la verdad que en aplicaciones de
tamaño medio a grande no lo recomiendo.

Saludos

Preguntas similares