RLOCK( )
Bloquea el registro actual del área de trabajo activa
Sintaxis
RLOCK() –> lExito
Devuelve
RLOCK() devuelve verdadero (.T.) si se bloquea el registro; y falso (.F.) en caso contrario.
Descripción
RLOCK() es una función de red que bloquea el registro actual, impidiendo que otros usuarios puedan actualizar ese registro hasta que se libere. RLOCK() permite un bloqueo compartido y los otros usuarios tienen acceso de sólo lectura al registro bloqueado. Sólo se permite modificarlo al usuario actual. El bloqueo de registro se mantiene hasta que se bloquee otro registro, se ejecute un mandato UNLOCK, se cierre el fichero de base de datos o se ejecute un FLOCK() en el fichero actual.
Por cada invocación de RLOCK(), se realiza un intento de bloquear el registro actual y el resultado se devuelve como valor lógico. Los intentos de bloqueo de un registro fallan cuando otro usuario ha bloqueado o está utilizando en modo exclusivo el fichero actual. Si se intenta ejecutar RLOCK() en una base de datos vacía, se devuelve verdadero (.T.).
Por defecto, RLOCK() opera en el área de trabajo actual. Si desea utilizarla en un área de trabajo no seleccionada, debe especificarla en una expresión de alias (consulte el ejemplo siguiente). Esto puede ser muy útil porque RLOCK() no intenta automáticamente bloquear los registros de ficheros relacionados.
Normalmente, RLOCK() opera únicamente en el registro actual. Esto incluye los siguientes mandatos:
¦ @…GET
¦ DELETE (un registro)
¦ RECALL (un registro)
¦ REPLACE (un registro)
Si desea más información, consulte el capítulo Programación en Red de la guía de Programación y Utilidades.
Notas
¦ SET RELATION: DPXBASE no bloquea automáticamente todos los registros de la cadena de relación cuando el usuario bloquea el registro del área de trabajo actual. Asimismo, un mandato UNLOCK no afecta a las áreas de trabajo relacionadas.
Ejemplos
¦ Este ejemplo borra un registro en un entorno de red utilizando RLOCK():
USE Clientes INDEX NombreCli SHARED NEW
SEEK “Martinez”
IF FOUND()
IF RLOCK()
DELETE
? “Martinez ha sido borrado”
ELSE
? “Otro usuario está utilizando el registro”
ENDIF
ELSE
? “Martinez no se encuentra en el fichero Clientes”
ENDIF
CLOSE
¦ Este ejemplo especifica RLOCK() en una expresión de alias para bloquear un registro en un área de trabajo no seleccionada:
USE Ventas SHARED NEW
USE Clientes SHARED NEW
//
IF !Ventas->(RLOCK())
? “Otro usuario está utilizando el registro Ventas actual”
ENDIF
Ficheros: La biblioteca asociada es DPXBASE.CH.