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 06-05-2003
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
Trigger ... error al crear

Hola a todos:

Tengo dos tablas (PROFES, FALTAS) y quiero hacer un trigger que al borrar un profesor de la primera tabla (PROFES) borre antes las lineas de faltas que tiene en la segunda (FALTAS)

Campos PROFES:
CODIGO -> primary key
NOMBRE
etc.

Campos FALTAS
FALTA -> primary key
PROFESOR
INICIOFALTA
etc.

FOREIGN KEY ("PROFESOR") REFERENCES PROFES ("CODIGO")

He intentado hacer este trigger:

CREATE TRIGGER FALTAS_BD FOR FALTAS
BEFORE DELETE
AS
BEGIN
DELETE FROM FALTAS
WHERE
PROFESOR=:OLD_CODIGO;
END

y me da el siguiente error:

Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE TRIGGER FALTAS_BD FOR FALTAS
BEFORE DELETE
AS
BEGIN
DELETE FROM FALTAS
WHERE
PROFESOR=:OLD_CODIGO

No se ni por qué da error, ni si el trigger está bien, pues es el primero que intento hacer.

Muchas gracias. Tomás.
Responder Con Cita
  #2  
Antiguo 06-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
si quieres que te borre las faltas del profesor, el trigger tienes que crearlo en la tabla de profesores, no en la de faltas

Código:
 
CREATE TRIGGER PROFES_BD0 FOR PROFES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  delete from faltas a where a.profesor = old.codigo;
end
espero te sirva
Responder Con Cita
  #3  
Antiguo 06-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Re: Trigger ... error al crear

Hola,

Cita:
Posteado originalmente por Tomás
FOREIGN KEY ("PROFESOR") REFERENCES PROFES ("CODIGO")
también puedes utilizar la "propagación" de la acción en la cláusula FOREIGN KEY ...

Código:
FOREIGN KEY ("PROFESOR") REFERENCES PROFES ("CODIGO") ON DELETE CASCADE
y así evitas el uso de triggers (al menos explícitamente).

Saludos.
Responder Con Cita
  #4  
Antiguo 06-05-2003
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
Me sigue dando el mismo error:

Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE TRIGGER PROFES_BD0 FOR PROFES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
delete from faltas a where a.profesor = old.codigo

¿Qué significa la a [faltas a where a.profesor] ?

Utilizdo IBConsole.

Un saludo. Tomás.
Responder Con Cita
  #5  
Antiguo 06-05-2003
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Yo te recomendaría que lo hagas como indica kinobi...

Es una forma rápida de reproducir el comportamiento que deseas...

Saludos...
Responder Con Cita
  #6  
Antiguo 06-05-2003
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
Muchas gracias, kinobi, he añadido ON DELETE CASCADE y funciona perfectamente.

Un saludo. Tomás.
Responder Con Cita
  #7  
Antiguo 06-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

solamente apuntar que la solución dada por Cadetill además de válida, es también lo que hace internamente el motor relacional del servidor al encontrarse la cláusula FOREIGN KEY ... ON DELETE ...

La integridad referencial declarativa simplifica la tarea en cuanto a la codificación de los fuentes, pero la tarea sigue siendo la misma.

Por cierto, y volviendo al error que te daba en la creación del trigger: es un problema con los finalizadores de sentencia ... para otra ocasión (con triggers y procedimientos almacenados) échale un vistazo a la sentencia SET TERM ..., la necesitarás.

Saludos.

Última edición por kinobi fecha: 06-05-2003 a las 21:04:15.
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 Trigger y llamarlo desde Delphi BlueSteel Conexión con bases de datos 2 26-07-2005 20:53:47
Trigger, generador y SP relacionarlo con Delphi JoanKa Firebird e Interbase 10 31-05-2005 20:33:14
como sincronizo el Commit de mi api con un trigger en Firebird cesar_picazo Conexión con bases de datos 1 11-10-2004 18:31:31
Un fallo en un Trigger ¿ deshace la transacción ? guillotmarc Firebird e Interbase 2 03-09-2003 15:01:59
Crear Trigger NickName Firebird e Interbase 2 02-07-2003 19:51:30


La franja horaria es GMT +2. Ahora son las 08:01:46.


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