El manual del programador en la parte 5 (Ampliar aplicaciones), Capitulo 17, programar para acceso compartido explica de forma elegante todo eso de los bloqueos.
Dice en parte:
Sugerencia Si desea comprobar el estado de bloqueo de un registro en la sesión
sin bloquear
el registro, use la función ISRLOCKED( ) o ISFLOCKED( ).Si falla el intento de bloquear un registro o una tabla, el comando SET REPROCESS y la rutina de
error actual determinarán si vuelve a intentarse el bloqueo. SET REPROCESS afecta al resultado de
un intento de bloqueo sin éxito. Puede controlar el número de intentos de bloqueo o el período de
tiempo durante el cual se intenta un bloqueo mediante SET REPROCESS.
Ejemplo: bloqueo manual
El ejemplo siguiente abre la tabla customer para acceso compartido y utiliza FLOCK( ) para intentar
bloquearla. Si la tabla se bloquea con éxito, REPLACE ALL actualizará todos sus registros.
UNLOCK libera el bloqueo de archivo. Si el archivo no puede bloquearse porque otro usuario haya
bloqueado el archivo o uno de sus registros, se mostrará un mensaje.
SET EXCLUSIVE OFF
SET REPROCESS TO 0USE customer && Abrir tabla compartida
IF FLOCK()REPLACE ALL contact ; && Reemplazar y desbloquear
WITH UPPER(contact)
UNLOCK
ELSE && Mensaje de salida
WAIT "Otro usuario está utilizando el archivo." WINDOW NOWAIT
ENDIF
Para desbloquear un registro
que se ha bloqueado automáticamente, sólo necesitará mover el puntero
de registro, aunque haya establecido MULTILOCKS ON. && El bloqueo automático es que g
No obstante, deberá eliminar explícitamente el bloqueo de un registro
que haya bloqueado manualmente; mover el puntero de registro no es suficiente