Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Crear triggers en FB 2.5 (https://www.clubdelphi.com/foros/showthread.php?t=89301)

Angel.Matilla 29-10-2015 18:33:07

Crear triggers en FB 2.5
 
Estoy investigando el tema de triggers y me he encontrado con una excelente web con muchisima documentación sobre FB. Al leer sobre triggers me he encontrado con la definición de estos elementos no sobre una tabla si no DIRECTAMENTE sobre la base de datos (Los triggers de la Base de Datos), pero no veo cómo definirlos. ¿Tal vez sea porque la web se refiere a FB 2.1?

Casimiro Notevi 29-10-2015 19:27:54

Pues copiando los ejemplos que vienen :)
Código SQL [-]
CREATE TRIGGER RegistrarConexion
   ON CONNECT
AS
BEGIN
   INSERT INTO CONEXIONES(CON_USUARI  , CON_TIEMPO, CON_MENSAJ)
                   VALUES(CURRENT_USER, CURRENT_TIMESTAMP, 'Conectado');
END
¿Qué no has entendido?

Lepe 29-10-2015 20:13:21

La forma más fácil de definirlos es con un IbScript (o el componente Script de los componentes que uses, Zeos, MDOLib, Interbase, etc).

Rellenas el ibScript.text con ese texto y después creo que era ibscript.Execute.

Si el texto no tiene punto y comas, puedes usar un Tquery. Si tiene punto y comas, como sabes, es el teminador de un Sql (cuando encuentra ese carácter, es el fin del SQL) y eso falla para un trigger, un procedimiento almacenado, etc, así que tienes que cambiar el terminador con SET TERM:

lanzado en un Tquery:
Código SQL [-]
set term ; ^
CREATE TRIGGER RegistrarConexion
   ON CONNECT
AS
BEGIN
   INSERT INTO CONEXIONES(CON_USUARI  , CON_TIEMPO, CON_MENSAJ)
                   VALUES(CURRENT_USER, CURRENT_TIMESTAMP, 'Conectado');

     INSERT INTO LOG(CON_USUARI  , CON_TIEMPO, CON_MENSAJ)
                   VALUES(CURRENT_USER, CURRENT_TIMESTAMP, 'Conectado');
END
set term ^ ;

Código Delphi [-]
query1.sql.text := CONSTANTE CON TODO ESE TEXTO; 
query1.ExecSql();

Pero lo más lógico es usar un programa de administración, como FlameRobin ó IBExpert gratuito, que son más cómodos cuando quieres manejar todo en la BBDD.

Saludos!

Angel.Matilla 30-10-2015 09:51:25

Cita:

Empezado por Casimiro Notevi (Mensaje 498601)
¿Qué no has entendido?

Ese ejemplo en concreto lo he probado desde IBManager. Se ejcuta sin errores pero ¿dónde está el trigger? Me refiero a que siempre que he visto estos elementos son sobre tablas:
Código PHP:

CREATE TRIGGER Disparador FROM Tabla
ACTIVE BEFORE INSERT
POSITION 0
AS etc

Cita:

Empezado por Lepe (Mensaje 498607)
Pero lo más lógico es usar un programa de administración, como FlameRobin ó IBExpert gratuito, que son más cómodos cuando quieres manejar todo en la BBDD.

No me valen los gestores externos de BB.DD. porque es para implementar este tipo de elementos en una aplicación que va a usar alguein que no tiene ni idea de manejar estas cosas más allá de lo que sale en la pantalla.

Casimiro Notevi 30-10-2015 10:05:34

Pues eso, estos triggers no se ejecutan sobre tablas sino sobre eventos de la base de datos.
Los puedes ver en la lista de triggers.

Angel.Matilla 30-10-2015 10:24:21

Cita:

Empezado por Casimiro Notevi (Mensaje 498634)
Pues eso, estos triggers no se ejecutan sobre tablas sino sobre eventos de la base de datos.
Los puedes ver en la lista de triggers.

Vale, vale. Estaba un poco espeso y el problema es que con IBManager al mirar la estructura de una tabla tiene un apartado donde se referencian todos los triggers, en la base de datos no hay algo equivalente y eso es lo que me despistaba. Muchas gracias por la ayuda.

Lepe 30-10-2015 13:01:34

Lo que estás buscando entonces es detectar los triggers que hay en la BBDD y ahí solo puedes atacar las tablas de sistemas.

Código SQL [-]
select * from rdb$triggers where rdb$system_flag <> 1

Saludos

Angel.Matilla 30-10-2015 13:17:40

Michas gracias.


La franja horaria es GMT +2. Ahora son las 01:32:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi