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 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
Aprendiendo a usar triggers en FB

Reconozco que hasta ahora me había ido bien sin usar estos elementos pero también reconozco que después de leer mucho tienen una potencia tremenda y son muy útiles. Bien: Tengo esta tabla:

en la que quiero crear un trigger que se ejecute antes de actualizarla de forma que si el campo Estado vale 1 rechace la transación y no permita continuar. Para ello creo que el código habría de ser este:
Código PHP:
CREATE EXCEPTION Usuario_Conectado 'Usuario activo en otro terminal';

SET TERM ^ ;

CREATE TRIGGER USUARIOS_BU INTO Usuarios
    ACTIVE BEFORE UPDATE
    POSITION 0
AS
BEGIN
     
IF (OLD.Estado 1)
        
EXCEPTION Usuario_Conectado;
END^

SET TERM ;^ 
He estado probando con IBManager y en teoría se ejecuta bien:

Pero una vez ejecutado aparentemente sin errores, si consulto las propiedades de la tabla me encuentro con esto:

¡No hay nimngún trigger creado! Pero si trato de ejecutar nuevamente el CREATE, IBManager (FB) me lanza un mensaje de error que me informa que Exception USUARIO_CONECTADO already exists. ¿Qué puedo estar haciendo mal?
Responder Con Cita
  #2  
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
IBManager ¿qué programa es?
Responder Con Cita
  #3  
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
IBManager ¿qué programa es?
Perdón. Antes se llamaba así: SQL Manager Lite (http://www.sqlmanager.net/)
Responder Con Cita
  #4  
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
¿Soporta tu versión de firebird?
¿Has probado con ibexpert?
Responder Con Cita
  #5  
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
¿Soporta tu versión de firebird?
¿Has probado con ibexpert?
Sí la soporta sin ningún problema. De todas formas probaré con IBExpert
Responder Con Cita
  #6  
Antiguo 30-10-2015
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 22
Osorio Va por buen camino
En realidad en las sentencias tienes dos cosas.

Primero tienes la creacion de la excepcion.
Luego tienes la creacion del trigger.

Al parecer la excepcion se creo sin problemas por lo que deberias eliminar la primera sentencia de CREATE EXCEPTION.

Y luego ejecuta solo la creacion del trigger.

Saludos.
Responder Con Cita
  #7  
Antiguo 31-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
Gracias por las respuestas. Ya he decubierto que está pasando: En el CREATE TRIGGER hay dos errores de sintaxis.
Primero he puesto INTO Usuarios en vez FROM Usuarios.
Segundo me falta el THEN al final del IF.

Al margen de eso la sugerencia de Osorio de partir en dos el código ha funcionado a la perfección.
Responder Con Cita
  #8  
Antiguo 31-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
¿Y no muestra los mensajes de errores el manager que estás usando?
Responder Con Cita
  #9  
Antiguo 31-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
Sí, pero es que con el código que puse ayer no da ningún mensaje de error. El problema creo que viene, como apunta Osorio, de tratar de hacerlo todo junto. No daba error porque la excepción si la crea y ahí termina; al hacer las dos cosas por separado en el CREATE TRIGGER sí me daba lo errores.
Responder Con Cita
  #10  
Antiguo 31-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
Normalmente los "manager" tienen dos posibilidades: ejecutar una sentencia sql (create, select, insert, etc.) o ejecutar un script de múltiples sentencias. En tu caso debías ejecutar la segunda posibilidad. Seguro que el manager que has usado tiene esa opción.
Responder Con Cita
  #11  
Antiguo 31-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
Sí. Ya te digo que el error fue mio en el planteamiento.
Responder Con Cita
  #12  
Antiguo 04-11-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 21
MAXIUM Va camino a la fama
¿Como quedaría finalmente el código corregido?
Responder Con Cita
  #13  
Antiguo 04-11-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 MAXIUM Ver Mensaje
¿Como quedaría finalmente el código corregido?
Realmente es partirlo en dos: por un lado la definición de la excepción y por otro lado el trigger.
EXCEPCIÓN
Código PHP:
CREATE EXCEPTION Usuario_conectado 'Usuario activo en otro terminal'

TRIGGER

Código PHP:
SET TERM ^;

CREATE TRIGGER USUARIOS_BU FROM Usuarios
    ACTIVE BEFORE UPDATE
    POSITION 0
AS
BEGIN
     
IF (OLD.Estado 1)
        
EXCEPTION Usuario_Conectado;
END^

SET TERM ;^ 
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
Conversor XML a XML (aprendiendo XSLT) Alex85 Varios 4 22-07-2015 17:21:06
Aprendiendo a usar Trigger... verito_83mdq MySQL 11 23-02-2011 00:05:13
Aprendiendo calistian Varios 4 14-06-2008 21:47:48
Aprendiendo delphi for php JULIPO PHP 6 21-09-2007 21:19:47
aprendiendo a usar interbase/firebird Robert01 Firebird e Interbase 15 22-03-2007 16:29:18


La franja horaria es GMT +2. Ahora son las 19:53:49.


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