Share via


FLOCK( ) (Función)

Intenta bloquear la tabla actual o especificada.

FLOCK([nWorkArea | cTableAlias])

Valores devueltos

Logical

Parámetros

  • nWorkArea
    Especifica el área de trabajo de la tabla que FLOCK( ) intenta bloquear.

    FLOCK( ) devuelve falso (.F.) si no hay ninguna tabla abierta en el área de trabajo especificada.

  • cTableAlias
    Especifica el alias de la tabla que FLOCK( ) intenta bloquear.

    Visual FoxPro genera un mensaje de error si especifica un alias de tabla que no existe.

Observaciones

FLOCK( ) devolverá verdadero (.T.) si logra bloquear la tabla y devolverá falso (.F.) si la tabla o algún registro de la tabla ya están bloqueados por otro usuario.

Si omite los argumentos opcionales, FLOCK( ) intenta bloquear la tabla abierta en el área de trabajo seleccionada actualmente.

Nota   Si FLOCK( ) falla al bloquear una tabla, devolverá falso (.F.) y no generará un error. Por tanto, no puede utilizar FLOCK( ) para activar una rutina ON ERROR.

Cuando se bloquea una tabla, la tabla estará disponible tanto para lectura como para escritura para el usuario que ha efectuado el bloqueo. Los otros usuarios de la red tendrán acceso de sólo lectura sobre la tabla. Para obtener información acerca de cómo bloquear una tabla y evitar el acceso de otros usuarios, vea SET EXCLUSIVE y USE.

Una tabla permanece bloqueada hasta que sea desbloqueada por el usuario que efectuó el bloqueo. La tabla puede desbloquearse al ejecutar UNLOCK, al cerrar la tabla o al salir de Visual FoxPro. Las tablas pueden cerrarse con USE, CLEAR ALL o CLOSE DATABASES.

De forma predeterminada, FLOCK( ) intenta bloquear una tabla una vez. Utilice SET REPROCESS para reintentar bloquear automáticamente una tabla cuando falle el primer intento. SET REPROCESS determina el número de intentos de bloqueo o el periodo de tiempo durante el que se intentará efectuar el bloqueo, si fracasa el intento de bloqueo inicial. Para obtener más información, vea SET REPROCESS.

Puede establecer relaciones entre dos o más tablas con SET RELATION. Al efectuar un bloqueo sobre una tabla que está relacionada con una o más tablas no se efectuará un bloqueo de archivo sobre las tablas relacionadas. Debe activar y quitar explícitamente los bloqueos de las tablas relacionadas.

Para obtener información adicional acerca del bloqueo de registros y archivos, y el uso compartido de tablas en una red, vea Programar para acceso compartido.

Ejemplo

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE products  && Opens products table
SET REPROCESS TO 3 SECONDS
SELECT * FROM products INTO TABLE newprods

IF FLOCK( )

** New product initialization ** REPLACE ALL in_stock WITH 0.00 REPLACE ALL on_order WITH 0.00 WAIT 'Initialization Complete' WINDOW NOWAIT ELSE ** File is locked, warn user ** WAIT WINDOW 'Unable to open products file; try again later!' NOWAIT ENDIF

BROWSE FIELDS in_stock, on_order && Displays newprods table
USE
ERASE newprods.dbf

Vea también

LOCK( ) | RLOCK( ) | SET REPROCESS | SET RELATION | UNLOCK | USE | SET EXCLUSIVE