Share via


RLOCK( ) (Función)

Intenta bloquear uno o varios registros de una tabla.

RLOCK([nWorkArea | cTableAlias] | [cRecordNumberList, nWorkArea
 | cTableAlias])

Valores devueltos

Logical

Parámetros

  • nWorkArea | cTableAlias
    Especifica el número del área de trabajo o el alias de tabla para una tabla abierta en otra área de trabajo. Si no especifica un área de trabajo o alias, RLOCK( ) intentará bloquear el registro actual de la tabla del área de trabajo actualmente seleccionada.

  • cRecordNumberList
    Especifica que RLOCK( ) intenta bloquear varios registros. La expresión de caracteres cRecordNumberList especifica uno o varios números de registro, separados por comas, que RLOCK( ) intenta bloquear. Por ejemplo, para intentar bloqueos de registro en los primeros 4 registros de la tabla, cRecordNumberList contendrá 1, 2, 3, 4.

    Para bloquear varios registros, es necesario activar SET MULTILOCKS e incluir el número del área de trabajo (nWorkArea) o el alias (cTableAlias) de la tabla en la que intenta bloquear los registros.

    También puede bloquear varios registros moviendo el puntero de registro al registro que desea bloquear, ejecutando RLOCK( ) o LOCK( ) y repitiendo luego este proceso para otros registros.

    En Visual FoxPro, puede especificar 0 como número de registro. Al especificar 0, el sistema le permite intentar bloquear el encabezado de la tabla.

    Precaución   Debe mantener bloqueado el encabezado de la tabla el menor tiempo posible, ya que los demás usuarios no pueden agregar registros a la tabla cuando el encabezado está bloqueado.

    Libere el bloqueo del encabezado de la tabla con UNLOCK RECORD 0, UNLOCK o UNLOCK ALL.

    Si todos los registros especificados en cRecordNumberList logran bloquearse, RLOCK( ) devolverá verdadero (.T.). Si uno o más de los registros especificados en cRecordNumberList no puede bloquearse, RLOCK( ) devuelve falso (.F.) y no se bloqueará ningún registro. En cualquier caso, los bloqueos de registro existentes permanecerán en vigor. El bloqueo de varios registros es un proceso aditivo: si coloca bloqueos de registro adicionales no liberará los bloqueos de registro existentes.

    Desde una perspectiva de rendimiento, es siempre más rápido bloquear la tabla completa que bloquear un número de registros, aunque sea pequeño.

Observaciones

RLOCK( ) es idéntico a LOCK( ).

Si se logra establecer el bloqueo o los bloqueos, RLOCK( ) devuelve verdadero (.T.). Los registros bloqueados están disponibles para acceso tanto de lectura como de escritura para el usuario que efectuó los bloqueos, y para acceso de sólo lectura para todos los demás usuarios de la red.

La ejecución de RLOCK( ) no garantiza que consigan efectuarse los bloqueos que se intenten. No podrá efectuar un bloqueo de un registro o una tabla que ya estén bloqueados por otro usuario. Si no pueden efectuarse los bloqueos por alguna razón, RLOCK( ) devolverá falso (.F.).

De forma predeterminada, RLOCK( ) intenta bloquear el registro una vez. Utilice SET REPROCESS para reintentar automáticamente un bloqueo de registro si el primer intento no tiene éxito. SET REPROCESS controla el número de intentos de bloqueo o el tiempo durante el cual se seguirá intentando el bloqueo si fracasa el primer intento. Para obtener más información acerca de SET REPROCESS y el bloqueo de tablas, vea SET REPROCESS.

SET MULTILOCKS determina si puede bloquear varios registros de una tabla. Si MULTILOCKS está en OFF (el valor predeterminado), únicamente puede bloquear un registro de una tabla. Si MULTILOCKS está ON, puede bloquear varios registros de una tabla. Para obtener más información, vea SET MULTILOCKS.

Sólo puede desbloquear un registro de una tabla el usuario que lo bloqueó. Los bloqueos de registro pueden liberarse ejecutando UNLOCK, cerrando la tabla o saliendo de Visual FoxPro.

UNLOCK puede utilizarse para liberar los bloqueos de registro del área de trabajo actual, de un área de trabajo concreta o de todas las áreas de trabajo. Para obtener más información, vea UNLOCK.

Si cambia SET MULTILOCKS de ON a OFF o de OFF a ON, ejecutará implícitamente UNLOCK ALL. Se liberarán todos los bloqueos de registros en todas las áreas de trabajo.

Las tablas pueden cerrase con USE, CLEAR ALL o CLOSE DATABASES.

Para obtener más información acerca del bloqueo de registros y archivos, así como del uso compartido de tablas en una red, vea Programar para acceso compartido.

Ejemplo

El ejemplo siguiente bloquea y desbloquea los cuatro primeros registros de las tablas customer y employee.

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
SET REPROCESS TO 3 AUTOMATIC
STORE '1,2,3,4' TO gcRecList
gcOldExc = SET('EXCLUSIVE')
SET EXCLUSIVE OFF
SELECT 0
USE employee  && Open Employee table
SELECT 0
USE customer  && Open Customer table
? LOCK('1,2,3,4', 'customer')  && Lock 1st 4 records in customer
? RLOCK(gcRecList, 'employee')  && Lock 1st 4 records in employee
UNLOCK IN customer
UNLOCK IN employee
SET EXCLUSIVE &gcOldExc

Vea también

CLEAR | CLOSE | FLOCK( ) | LOCK( ) | SET MULTILOCKS | SET RELATION | SET REPROCESS | UNLOCK | USE