La Web del Programador: Comunidad de Programadores
 
    Pregunta:  419 - COMO BLOQUEAR UN REGISTRO EN VB4 Y ODBC
Autor:  Carlos Berenguela
Hola Amigos, mi problema es como puedo hacer para evitar que dos usuarios editen un mismo registro, estoy trabajando con VB 4.0 de 32 Bit en Win95, junto con una Base de Datos de Access ´97, e probado el Loockedit, EditMode, etc. pero no me funcionan, alguien me puede ayudar a solucinar esto.
Atte. y agredeciendo cual quier ayuda.

  Respuesta:  Gerardo De la Rosa
Pues mira lo que dice el poti me parece bien, pero yo haria algo mas sencillo, y bueno lo he hecho, a todas mis tablas o a todas mis bases de datos si no son de acces, por aquello del motor o del jet, les agrego un campo tipo string con longitud de un caracter, y cada que voy a accesar el registro, en ese campo le pongo un asterisco para indicar que esta bloquedo por otro usuario, y al terminar la edicion o modificacion le borro el asterisco y tantan.

a ver si te sirve

  Respuesta:  Victor
El motor de base de datos de access y VB es el motor JET. En el existe lo que se conoce como bloqueo de página donde cada página tiene 2 Kb. Es decir no bloqueas registros sino un conjunto de registros hasta por 2 Kb.
El método de bloqueo por defecto es pesimista de modo que LockEdits está en True y no hay que especificarlo. El bloqueo ocurre cuando un usuario está editando un registro y otro quiere editar el mismo u otro registro de la misma página. De hecho ahí se trunca el programa. Esto lo controlamos con On Error. Si mal no recuerdo el error que se produce es el 3260. En el botón EDITAR REGISTRO de tu aplicación podrías poner algo como esto:
On error GoTo RUTINA

Rs.Edit

RUTINA:
If Err = 3260 then
MsgBox Err.Description
End If

Donde Rs es el nombre de tu RecordSet.

Repito. No recuerdo bien el número de error que ocurre pero esto lo puedes ver si ejecutas tu programa.
Espero haberte sido útil.


  Respuesta:  Poti
Olvidate de que visual basic o el motor o quien sea te bloque un solo registro y el solito (a no ser que uses una base de datos no access, como por ejemplo Dbase).
Montate tu tus propios bloqueos, algo asi:
El usuario ´Abre´ el registro para modificar, graba en una tabla o donde quieras lo siguiente:
* Que puesto bloquea
* Que tabla esta editando
* Que registro (clave) esta editando

Graba un registro con esta informacion (importante la clave de esta tabla será solo la tabla y el registro) y si te da un error 3022 quiere decir que alguien está editando el mismo registro que tu quieres (¿quien?, pues el puesto que tambien se grabó en esta tabla de bloqueos)

Cuando el usuario grabe el registro que editó, borra el registro del bloqueo establecido.

Por supuesto, trabaja con instrucciones SQL, pues si no esto te vale para nada.
Para Mas información escribeme