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.