Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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

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.

...

Bloco de código
languagecpp
themeMidnight
titleejemplo Ejemplo básico
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

...

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.


Bloco de código
languagecpp
themeMidnight
titleejemplo Ejemplo incorrecto
USER FUNCTION EjemploIncorrecto()
    LOCAL nRegistro := 1
    
    // Bloqueando el registro utilizando RecLock
    RecLock("ARCHIVO", nRegistro)
    
    // Realizando la primera operación en el registro bloqueado
    dbEdit("ARCHIVO", nRegistro)
    dbReplace("ARCHIVO", nRegistro, "Primera modificación")
    
    // Liberando el bloqueo utilizando MsUnlock después de la primera operación
    MsUnlock("ARCHIVO", nRegistro)
    
    // Intentando bloquear nuevamente para la segunda operación
    RecLock("ARCHIVO", nRegistro) // Error aquí, el registro ya está bloqueado
    dbEdit("ARCHIVO", nRegistro)
    dbReplace("ARCHIVO", nRegistro, "Segunda modificación")
    
    // Liberando el bloqueo correctamente después de todas las operaciones
    MsUnlock("ARCHIVO", nRegistro)
RETURN

...

Bloco de código
languagecpp
themeMidnight
firstlinetitleejemplo Ejemplo correcto
titleejemplo
USER FUNCTION EjemploCorrecto()
    LOCAL nRegistro := 1
    
    // Bloqueando el registro utilizando RecLock
    RecLock("ARCHIVO", nRegistro)
    
    // Realizando la primera operación en el registro bloqueado
    dbEdit("ARCHIVO", nRegistro)
    dbReplace("ARCHIVO", nRegistro, "Primera modificación")
    
    // Realizando la segunda operación en el mismo registro
    dbEdit("ARCHIVO", nRegistro)
    dbReplace("ARCHIVO", nRegistro, "Segunda modificación")
    
    // Liberando el bloqueo solamente después de todas las operaciones
    MsUnlock("ARCHIVO", nRegistro)
RETURN

...

En resumen, es crucial entender que MsUnlock no necesita ser utilizado después de cada cambio de registro, pero debe ser usado de manera adecuada, asegurando que el bloqueo se libere solo cuando todas las operaciones necesarias hayan sido completadas. Esto ayuda a evitar errores de concurrencia y asegura la integridad de los datos manipulados por el sistema.

04. INFORMACIÓN RELACIONADA

MSUnlock(cAlias) - Travamentos/Bloqueios/Locks - Frameworksp