FLOCK() 
 Bloquea un fichero de base de datos abierto en modo compartido
------------------------------------------------------------------------------
 Sintaxis

     FLOCK() --> lExito

 Devuelve

     FLOCK() devuelve verdadero (.T.) si el intento de bloquear un fichero
     de base de datos en uso en el área de trabajo actual es satisfactorio;
     de lo contrario, devuelve falso (.F.). Si desea obtener más
     información sobre el bloqueo de ficheros, consulte el capítulo
     "Programación en Red" en la Guía de Programación y Utilidades.

 Descripción

     FLOCK() es una función de base de datos que se utiliza en entornos de
     red para bloquear un fichero de base de datos abierto en modo
     compartido, evitando así que otros usuarios actualicen el fichero hasta
     que se libere el bloqueo. Los registros en el fichero bloqueado sólo
     están accesibles para operaciones de lectura.

     FLOCK() se relaciona con USE...EXCLUSIVE y RLOCK(). USE...EXCLUSIVE
     abre un fichero de base de datos, de forma que ningún otro usuario
     pueda abrir el mismo fichero al mismo tiempo, y se trata del mecanismo
     de bloqueo más restrictivo de CA-Clipper. RLOCK() es el menos
     restrictivo e intenta situar un bloqueo de actualización en un registro
     compartido, impidiendo que otros usuarios actualicen el registro
     actual. FLOCK() representa un nivel de restricción medio.

     FLOCK() se utiliza en operaciones que acceden a la totalidad del
     fichero de base de datos. Normalmente, estos son mandatos que
     actualizan el fichero con un ámbito o una condición, como por ejemplo,
     DELETE o REPLACE ALL. A continuación, se muestra una lista de estos
     mandatos:

     Mandatos que requieren FLOCK()
     ------------------------------------------------------------------------
     Mandato                         Modo
     ------------------------------------------------------------------------
     APPEND FROM                     FLOCK() o USE...EXCLUSIVE
     DELETE (varios registros)       FLOCK() o USE...EXCLUSIVE
     RECALL (varios registros)       FLOCK() o USE...EXCLUSIVE
     REPLACE (varios registros)      FLOCK() o USE...EXCLUSIVE
     UPDATE ON                       FLOCK() o USE...EXCLUSIVE
     ------------------------------------------------------------------------

     Por cada llamada de FLOCK(), existe un intento de bloquear el fichero
     de base de datos y el resultado se devuelve como un valor lógico. Un
     bloqueo de fichero falla si otro usuario tiene actualmente un bloqueo
     de fichero o de registro para el mismo fichero de base de datos, o bien
     si otro usuario está usando la base de datos en modo exclusivo. Si
     FLOCK() es satisfactorio, el bloqueo de fichero permanece hasta que se
     ejecute UNLOCK, CLOSE DATABASE o RLOCK().

     Por defecto, FLOCK() funciona en el área de trabajo seleccionada, tal
     como se muestra en el ejemplo siguiente.

 Notas

     ■ SET RELATION: CA-Clipper no bloquea automáticamente todas las
        áreas de trabajo en la cadena de relación cuando bloquea el área de
        trabajo actual y el uso de la función UNLOCK no tiene efecto en
        áreas de trabajo relacionadas.

 Ejemplos

      Este ejemplo utiliza FLOCK() para una actualización por lotes
        de los precios de Inventar.dbf:

        USE Inventar NEW
        IF FLOCK()
           REPLACE ALL Inventar->Precio WITH ;
                  Inventar->Precio * 1.1
        ELSE
           ? "Fichero no disponible"
        ENDIF

      Este ejemplo utiliza una expresión con alias para intentar un
        bloqueo de fichero en un área de trabajo no seleccionada:

        USE Ventas NEW
        USE Cliente NEW
        //
        IF !Ventas->(FLOCK())
           ? "Ventas está siendo usado por otro usuario"
        ENDIF

 Ficheros   La biblioteca asociada es CLIPPER.LIB.

 To download this example - click here.

See Also: RLOCK() SET EXCLUSIVE* UNLOCK