Ejemplo del uso de eventos con Visual FoxPro

3 comentarios

Como habíamos visto en estos artículos:

Los eventos del Firebird

Usando los eventos del Firebird en Visual FoxPro

 

usar eventos puede resultarnos muy útil porque nos permite saber lo que está ocurriendo en la Base de Datos al instante, o sea que no es necesario un SELECT para enterarnos de lo que ocurre en ella. Puedes usar esta herramienta para avisarle al usuario en el mismo instante en que ocurrió el hecho que estás monitoreando, no estás dependiendo de que él se acuerde de revisar un informe para enterarse.

Para mostrar mucho más claramente el concepto creé una Base de Datos llamada DEMO_EVENTOS.FDB, le agregué una tabla llamada CUENTAS y a esa tabla un trigger “Before Insert or Update” con el siguiente contenido:

Listado 1.

CREATE TRIGGER CUENTAS_BIU FOR CUENTAS
               ACTIVE BEFORE INSERT OR UPDATE
               POSITION 1
AS
   DECLARE VARIABLE lnTemp INTEGER;
BEGIN

   IF (NEW.CUE_SALDOX < 0) THEN
      SELECT
         xp_messenger('Saldo negativo', '*', 'EVENTO1')
      FROM
         RDB$DATABASE
      INTO
         :lnTemp;

   IF (NEW.CUE_SALDOX > 1000000) THEN
      SELECT
         xp_messenger('Saldo demasiado alto. Verifícalo', '*', 'EVENTO1')
      FROM
         RDB$DATABASE
      INTO
         :lnTemp;

END;

luego hice un pequeño programita en Visual FoxPro para monitorear los eventos de cualquier Base de Datos:

EVENTOS1

Captura 1. Si haces clic en la imagen la verás más grande

Debes especificar el nombre de la Base de Datos (la de este ejemplo es: DEMO_EVENTOS.FDB) y escribir el nombre del usuario y su password. Luego debes hacer clic sobre el botón “Conectarse”. Si todo está ok entonces verás un mensaje informándotelo. De la misma manera, si la conexión no pudo realizarse verás un mensaje que te lo indicará.

Después de conectarte exitosamente debes hacer clic sobre el botón “Empezar” y desde ese preciso momento estarás monitoreando un trigger “Before Insert or Update” de la tabla CUENTAS. O sea que siempre antes de insertar o modificar una fila de esa tabla el trigger se disparará.

En ese trigger se monitorean dos eventos:

  1. Si el valor de la columna CUE_SALDOX es menor que cero
  2. Si el valor de la columna CUE_SALDOX es mayor que 1.000.000

En ambos casos se envía un mensaje al programa Visual FoxPro el cual recibe ese mensaje y lo muestra al usuario. Para demostrarlo, le agregué una fila a la tabla CUENTAS y a la columna CUE_SALDOX le asigné el valor -38.000

EVENTOS2

Captura 2. Si haces clic en la imagen la verás más grande

 y en ese mismo instante el programa me mostró:

EVENTOS3

Captura 3. Si haces clic en la imagen la verás más grande

A continuación agregué otra fila, ésta con un saldo mayor a 1.000.000, como puedes ver aquí:

EVENTOS4

Captura 4. Si haces clic en la imagen la verás más grande

y al instante el programa me mostró este mensaje:

EVENTOS5

Captura 5. Si haces clic en la imagen la verás más grande

O sea que todo funcionó perfectamente, lo cual significa que cada vez que en la columna CUE_SALDOX se coloque un valor negativo o un valor mayor que 1.000.000 el programa recibirá un mensaje indicándoselo.

Puedes descargar el archivo DEMOEVENTOS.ZIP, el cual contiene a la Base de Datos DEMO_EVENTOS.FDB, el código fuente en Visual FoxPro y el archivo .EXE correspondiente desde aquí:

DEMOEVENTOS.ZIP

¿Cómo usarlo?

  1. Usando este programa conéctate a la Base de Datos llamada DEMO_EVENTOS.FDB
  2. Haz clic sobre el botón “Empezar”
  3. Sin salir del programa inserta o modifica una fila de la tabla CUENTAS, poniendo en la columna CUE_SALDOX un valor menor que cero o un valor mayor que 1.000.000
  4. El programa te mostrará un mensaje informándote de lo que aconteció

Desde luego que puedes usar este programa para monitorear cualquier evento de cualquier Base de Datos, lo de arriba es solamente un ejemplo.

Artículos relacionados:

Los eventos del Firebird

Usando los eventos del Firebird en Visual FoxPro

El índice del blog Firebird21

El foro del blog Firebird21

Anuncios

Usando los eventos de Firebird en Visual FoxPro

8 comentarios

Como hemos visto en este artículo:

Los eventos del Firebird

Firebird tiene algo muy bueno conocido como eventos, que nos permiten conocer al instante cuando algo que nos interesa ocurrió en la Base de Datos.

¿Cómo se pueden aprovechar los eventos desde Visual FoxPro?

Si programas en Visual FoxPro tienes una gran ventaja, además de los eventos normales también puedes usar unos eventos mejorados.

Aviso: No he probado esta técnica con otros lenguajes de programación, quizás funcione, quizás no, podrías hacer la prueba y si me informas de los resultados obtenidos, mucho mejor.

¿Qué se necesita para usar eventos del Firebird en Visual FoxPro?

1. Descargar este archivo:

http://www.mediafire.com/download/s2vj23plswx3wca/xp_messenger_fb.zip

2. Crear una carpeta
3. Descomprimir el archivo que descargaste (xp_messenger_fb.zip) en la carpeta recién creada
4. En la carpeta SERVER\FIREBIRD\ encontrarás un archivo cuyo nombre es  fb_messenger.dll. Copia ese archivo fb_messenger.dll en la carpeta UDF\ del Firebird, por ejemplo en: C:\Archivos de Programa\Firebird\Firebird_2_5\UDF\
5. En la carpeta CLIENT\ encontrarás un archivo llamado Setup.msi. Debes instalar ese programa en cada computadora que recibirá los eventos.
6. En tu Base de Datos declara la función externa xp_messenger en esta forma:

DECLARE EXTERNAL FUNCTION xp_messenger
        CSTRING(255), CSTRING(255), CSTRING(255)
        RETURNS INTEGER BY VALUE
        ENTRY_POINT 'fnfb_messenger' MODULE_NAME 'fb_messenger.dll';

7. En un stored procedure o en un trigger escribe:

SELECT
   XP_MESSENGER('Mi mensaje', 'Mi host', 'Mi slot')
FROM
   RDB$DATABASE;

‘Mi mensaje’ es el mensaje que deseas enviarle al Cliente

‘Mi host’ es la computadora destino. Puedes especificar el nombre del Host, el IP del Host, el nombre del Grupo de Trabajo, el nombre del Dominio o el asterisco (*). Si usas un asterisco el mensaje se enviará a todos los dominios y grupos de trabajo.

‘Mi slot’ es el nombre del slot. Por defecto su nombre es ‘events’, pero puedes usar cualquier nombre que quieras: ‘prueba’, ‘evento1’, ‘Productos’, etc.

Ejemplos:

SELECT
   XP_MESSENGER('Prueba Nº 1', 'localhost', 'evento1')
FROM
   RDB$DATABASE;

SELECT
   XP_MESSENGER('Prueba Nº 2', 'WALTER-PC', 'evento1')
FROM
   RDB$DATABASE;

SELECT
   XP_MESSENGER('Prueba Nº 3', '*', 'Productos')
FROM
   RDB$DATABASE;

El primer SELECT enviará el mensaje ‘Prueba Nº 1’ a la computadora local.

El segundo SELECT enviará el mensaje ‘Prueba Nº 2’ a la computadora WALTER-PC.

El tercer SELECT enviará el mensaje ‘Prueba Nº 3’ a todas las computadoras.

Importante:

Solamente funciona si el Servidor está instalado en Windows

Aviso:

Si alguna vez deseas desinstalar esta función debes conectarte a tu Base de Datos y escribir:

DROP EXTERNAL FUNCTION xp_messenger;

Artículos relacionados:

Los eventos del Firebird

El índice del blog Firebird21

El foro del blog Firebird21