es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.