¿Cómo implementar FIND CURRENT y CURRENT-CHANGED en Progress4GL?
Intenté leer la base de conocimiento de Progress para la declaración FIND CURRENT. No me ayudó mucho. ¿Alguien puede decirme qué hace la declaración FIND CURRENT y por qué/en qué escenarios de bloqueo la usamos? Además, sería realmente útil si se puede explicar con un ejemplo sencillo. Nota: Cualquier ejemplo que use la base de datos Sports, que no se muestra en la base de conocimiento. Implementé el siguiente código, pero parece que no alcanza la declaración CURRENT-CHANGED cuando compilo el procedimiento (estoy usando la base de datos que creé con el nombre lógico “Personal”).
Gracias.
davy.ai
La declaración FIND CURRENT se utiliza para localizar el registro al que el usuario está accediendo actualmente en un entorno multiusuario. A menudo se utiliza después de una declaración FIND o una declaración FOR EACH para determinar si el registro ha sido modificado por otro usuario desde el último acceso. Esto se hace adquiriendo un bloqueo exclusivo en el registro y comprobando si el registro ha sido modificado utilizando la frase CURRENT-CHANGED.
En términos de escenarios de bloqueo, la declaración FIND CURRENT se utiliza en una situación en la que varios usuarios acceden a los mismos archivos y los registros deben ser accedidos en modo exclusivo. Esto ayuda a prevenir conflictos entre usuarios cuando intentan editar el mismo registro al mismo tiempo. Por lo tanto, FIND CURRENT se puede utilizar para evitar actualizaciones concurrentes y mantener la integridad de los datos.
En el ejemplo de código proporcionado, la declaración FIND CURRENT sigue a la declaración UPDATE, lo cual no es la secuencia correcta. Debería usarse antes de la declaración UPDATE. Por ejemplo:
FIND FIRST personal WHERE personal firstNAME = “Ganesh” EXCLUSIVE-LOCK.
FIND CURRENT personal EXCLUSIVE-LOCK.
UPDATE personal.
IF CURRENT-CHANGED personal THEN DO:
MESSAGE “El registro ha sido modificado”
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK
DISPLAY personal.
END
En este ejemplo, encontramos el primer registro con el nombre “Ganesh” y adquirimos un bloqueo exclusivo en él. A continuación, utilizamos la declaración FIND CURRENT para localizar nuevamente el mismo registro y adquirir un bloqueo exclusivo en él. Si el registro ha sido modificado por otro usuario, la instrucción IF se ejecutará y mostrará un mensaje informando al usuario.
Nota: este código de ejemplo asume que “Personal” es el nombre de una tabla en la base de datos Sports, y que el esquema y los campos coinciden con los referenciados en el código.