Problemas en entornos multiusario.

josmy
20 de Abril del 2004
Hola, estoy desarrollando una aplicación que debe trabajar en un entorno multiusuario. Estoy trabajando con Visual Basic 6 y Access 97. Es una aplicación típica para dar de alta y baja clientes. Mi problema está en como evitar que dos usuarios editen el mismo cliente a la vez. He intentado crear una tabla a modo de semáforo, de forma que cuando un usuario pulse editar un cliente, active una bandera de la tabla y no permita a otros usuarios entrar en la función de edición, pero el problema es que cuando dos usuarios pulsan al mismo tiempo no lo hace bien. Cuando modifico la tabla semáforos la tengo bloqueada. Para ello lo que hago es abrir la tabla con un recordset y las opciones dbDenyREad y dbDenyWrite. Lo q creo q pasa que esta instrucción (openrecordset) no es atómica, por lo que primero comprueba si la tabla existe, luego si está bloqueada, luego la abre y luego la bloquea. Esto provoca que dos o más procesos puedan entrar en la tabla semáforos al mismo tiempo.

¿Que puedo hacer?

Gracias.

krizall
20 de Abril del 2004
hola, podrias hacer lo siguiente
utilizar una tabla extra por ejemplo bloqueos
en la cual cuando un usuario elije un cliente para editar este cliente agrega un registro a la tabla, antes de poder editar el registro, la tabla puede contener la clave del cliente, y los campos que tu creas necesarios, de esta manera cada ves qeu alguien quiera editar algo primero busque la clave que queire editar en la talba bloqueos, si ya esta entonces que no lo permita y si esta pues que deje hacer losiguiente, despues de guardar el registro se debe elimiar el registro que ha sido creado en la tabla bloqeos ... bueno, no es una solucion exelente pero puedes intentar

josmy
20 de Abril del 2004
Muchas gracias krizall, pero creo q no funcionará porque básicamente la tabla bloqueos es mi tabla semáforos y en vez de añadir el número de usuario yo lo que hago es activar una bandera booleana.

Gracias.