Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Revertida da versão 8

Libera el registro creado o bloqueado por la RecLock.

 


Ejemplo:

 

Verifica si el registro existe en la tabla SA1:

 


 // MsUnlockSample.prw
If !DbSeek(XFilial("SA1") + "000001")
// Si no existe, incluye un registro en blanco y lo bloquea
Reclock("SA1", .T.)
Else
// Bloquea el registro encontrado
Reclock("SA1", .F.)
EndIf
SA1->A1_SALDO := nNovoSaldo
MSUnlock("SA1")

 

La recomendación es que se utilicen únicamente las funciones RecLock y MsUnlock

CONTENIDO

  1. Visión General
  2. Ejemplo de uso
  3. Informaciones adicionales

01. VISÃO GERAL

RecLock y MsUnlock son comandos cruciales para controlar la concurrencia en entornos donde múltiples usuarios acceden y modifican datos simultáneamente. RecLock se utiliza para bloquear registros específicos en archivos de datos, asegurando que solo un proceso a la vez pueda realizar cambios y previniendo así inconsistencias y corrupción de la información. Por otro lado, MsUnlock se utiliza para liberar estos bloqueos, permitiendo que otros procesos o usuarios puedan acceder y modificar los registros una vez que las operaciones hayan sido completadas.

02. EJEMPLO DE USO

Bloco de código
languagecpp
themeMidnight
titleejemplo
USER FUNCTION EjemploRecLockMsUnlock()
    LOCAL nRegistro := 1  // Número de registro a bloquear
    
    // Bloqueando el registro utilizando RecLock
    RecLock("ARCHIVO", nRegistro)
    
    // Realizando operaciones de lectura y/o escritura en el registro bloqueado
    // En este ejemplo, simulamos una operación ficticia de lectura
    dbSeek("ARCHIVO", nRegistro)
    dbSkip(1, "ARCHIVO")
    
    // Liberando el bloqueo utilizando MsUnlock después de las operaciones
    MsUnlock("ARCHIVO", nRegistro)
    
    // Ejemplo de mensaje de éxito
    MsgInfo("Operaciones completadas exitosamente!")
RETURN

En este ejemplo:

  • RecLock("ARCHIVO", nRegistro): Este comando bloquea el registro número 1 en el archivo "ARCHIVO". A partir de este punto, cualquier intento de otro proceso para modificar este registro será bloqueado hasta que el bloqueo sea liberado.

  • Operaciones de lectura y/o escritura: Aquí se simulan operaciones de lectura en el registro bloqueado, utilizando funciones como dbSeek y dbSkip. En la práctica, podrías realizar cualquier operación permitida dentro del contexto de lectura o escritura de datos.

  • MsUnlock("ARCHIVO", nRegistro): Después de completar las operaciones necesarias, el comando MsUnlock se utiliza para liberar el bloqueo del registro número 1 en el archivo "ARCHIVO", permitiendo que otros procesos puedan acceder y modificarlo según sea necesario.

02. INFORMACIONES ADICIONALES

El comando MsUnlock no necesita ser utilizado necesariamente en cada cambio de registro. Esto se debe a que el bloqueo de registros realizado por RecLock generalmente se mantiene hasta que se libere explícitamente con MsUnlock o hasta que el proceso que lo bloqueó finalice sus operaciones.

Cuando utilizas RecLock para bloquear un registro específico en un archivo de datos, ese bloqueo persiste hasta que:

  1. Llames explícitamente a MsUnlock para liberar el bloqueo.
  2. El proceso que realizó el bloqueo finalice sus operaciones y libere automáticamente el bloqueo al terminar.

Por lo tanto, en muchos casos, especialmente en operaciones simples donde bloqueas un registro, realizas algunas operaciones y luego finalizas el proceso, no es necesario utilizar MsUnlock explícitamente en cada cambio de registro. Esto se debe a que el sistema gestiona el bloqueo automáticamente según el ciclo de vida del proceso que lo inició.

Sin embargo, es fundamental comprender que el uso adecuado de MsUnlock es necesario para garantizar una correcta gestión de la concurrencia en entornos donde múltiples procesos pueden interactuar con los mismos datos. El comando debe ser utilizado de manera consciente para evitar bloqueos prolongados y posibles problemas de rendimiento o integridad de los datos.