Impedir que otro usuario modifique un registro

Estoy convirtiendo una aplicación de VB6 a VB2005 y quería saber como puedo hacer para que cuando edito un registro de una base de datos SQL otro usuario desde otra máquina no pueda modificarlo al mismo tiempo. Antes con VB6 podía bloquear los registros mientras el usuario modificaba la información, pero con VB2005 no encuentro el modo de hacer esto.

1 respuesta

Respuesta
1
Si te refieres a bloquear un registro de la base de datos mientras el usuario lo tiene en pantalla... No te recomiendo la política de bloquear datos del servidor por más tiempo que el imprescindible (milisegundos), ni mucho menos que permitas a tu aplicación que un usuario bloquee datos por el simple hecho de tenerlos en pantalla (un usuario no sabe ni debe saber nada sobre bloqueos, y se puede ir a comer o de vacaciones con los datos en pantalla). A mi entender la aplicación debe comprobar en el momento del UPDATE que nadie ha modificado el registro (sin haberlo bloqueado), y en caso de que se haya modificado, se informe al usuario y se le proporcione información suficiente sobre las modificaciones efectuadas por otro el otro usuario y opciones para tomar la decisión oportuna (modificar, no modificar o presentar la información del otro usuario para poder actualizarla de nuevo). El recurso técnico que debes utilizar se basa en tener una columna en la tabla, del tipo timestamp, en la cual pongas siembre el valor de Now() (tanto en el momento del INSERT como en cada UPDATE). Cuando leas la fila deseada, conserva el valor que hay en dicha columna, y úsalo en el UPDATE... WHERE... AND Columna = ValorEnElMomentoDeLeer. Si el UPDATE funciona (casi siempre) es que los datos no han sido modificados... Si no encuentra la fila es que alguien la ha modificado (procede aplicativamente como te expliqué). Si tienes idientificados los usuarios (sabes quien está utilizando la aplicación) te recomiendo tener una nueva segunda columna con el código de usuario que hizo el INSERT o el último UPDATE (información de audit útil para el administrador, y que la aplicación puede presentar al usuario en caso de conflicto. Que agradecido quedaría si al actualizar la información, la aplicación le dijera que tal persona, a tal hora ha actualizado el mismo registro y que ha informado tales datos). Solo es cuestión de currárselo. Piensa en el usuario (es una persona, no un técnico). Para asegurar que todos los INSERT y UPDATES actualizan las dos columnas de control (timestamp y usuario) te recomiendo que encapsules el código en subrutinas/clases(stored prodecures de acceso a datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas