Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 29-10-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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?
Responder Con Cita
  #3  
Antiguo 29-10-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 30-10-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿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 Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 30-10-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #6  
Antiguo 30-10-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 30-10-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 30-10-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Michas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear una Vista que agregue datos con triggers Edchar Firebird e Interbase 11 19-12-2012 18:57:25
Triggers BuenaOnda MS SQL Server 2 16-12-2009 19:05:27
Problemas al crear triggers nenufer Conexión con bases de datos 1 16-05-2006 13:49:58
triggers nenufer Conexión con bases de datos 3 16-05-2006 08:17:08
triggers edy_aca Firebird e Interbase 5 26-08-2004 00:09:53


La franja horaria es GMT +2. Ahora son las 08:13:33.


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
Copyright 1996-2007 Club Delphi