Yo uso un sistema que me funciona "casi" perfecto:
Tengo una tabla que llamo "Acceso" con sólo un campo: "Bloqueo" de tipo numérico-Integer.
Ese campo se inicializa con valor 0.
Cuando necesito tener bloqueado el fichero, que en realidad sólo es necesario en ocasiones especiales, como por ejemplo para incrementar el número de Factura (la última más uno...) donde no podrían acceder dos usuarios simultáneamente por ambos obtendrían el mismo número de factura, hado esto:
Código:
' Abro el recordset (rsBloqAcc) con el campo Bloqueo de la tabla Acceso
' Cada usuario tiene asignado un Número de Usuario (NumUsu)
' ATENCIÓN. Para DESBLOQUEAR si se salió por error...
If rsBloqAcc!Bloqueo = NumUsu Then
rsBloqAcc!Bloqueo = 0
rsBloqAcc!Bloqueo.Update
End If
' CONTROL DEL BLOQUEO
Dim nPasos As Long
Dim nMaxPas As Long
nMaxPas = 20000 'Este valor puede ser menor o mayor, dependiendo del tiempo que dure el proceso de grabación del registro...
EstudiaBloqueo:
For nPasos = 0 To nMaxPas
If rsBloqAcc!Bloqueo = 0 Then Exit For
Next nPasos
If nPasos > nMaxPas
' El registro está bloqueado...
' Abro un mensaje preguntando si quiero INSISTIR en esperar el desbloqueo -> Si contesta afirmativamente... Goto EstudiaBloqueo
End If
' Proceso de búsqueda de último número de Factura. Incremento este número... Grabo el registro. Updateo...
' Reinicio campo Bloqueo
rsBloqAcc!Bloqueo = 0
rsBloqAcc!Bloqueo.Update
' Y cierro el recordset.
Además de esto, tengo una opción, habilitada sólo para el Administrador, que puede poner a 0 el campo Bloqueo de la tabla Acceso, para el caso de que un usuario lo deje bloqueado y no vuelva a entrar... Porque, ya sinos que si entra de nuevo ese usuario, se desbloquea automáticamente.