Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2011
Avatar de Antoniov
Antoniov Antoniov is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Tenerife
Posts: 42
Poder: 0
Antoniov Va por buen camino
Trigger en Firebird

Tengo un Trigger en el evento Before Insert que funciona perfectamente.

Código SQL [-]
SET TERM ^ ;

CREATE TRIGGER BI_DOCUMENTOS_CODDOCUMENTO FOR DOCUMENTOS
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.CODDOCUMENTO IS NULL) THEN
      NEW.CODDOCUMENTO = GEN_ID(DOCUMENTOS_CODDOCUMENTO_GEN, 1);
END^

SET TERM ; ^

Pero cuando intento poner otro Trigger en otros eventos como After Insert, me da un mensaje de error el el nombre del campo. Incluso copiando el anterior me da error

Código SQL [-]
ALTER TRIGGER DOCUMENTOS_AI_NUM_DOCS
ACTIVE AFTER INSERT
POSITION 0
AS
BEGIN
  /* Trigger body */
  IF (NEW.CODDOCUMENTO IS NULL) THEN
      CODDOCUMENTO = GEN_ID(DOCUMENTOS_CODDOCUMENTO_GEN, 1);  
END;

Este es el error:
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
CODDOCUMENTO.
At line 8, column 7.



Alguien tiene ejemplos hechos por él de triggers? Podría mostrar alguno?
No entiendo por qué da error en los nombres de los campos, que están correctamente escritos.
__________________
Blog Delphi XE
Responder Con Cita
  #2  
Antiguo 21-09-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola,
¿Antoniov llevas ya tiempo pegado frente a la PC?
De ser así sugiero que descanses... despégate de la computadora. Duerme bien y pon tu mente en blanco.
Cuando te hayas despejado siéntate porque debo darte unas noticias que te pondrán más furioso. ¿Me creerías si te digo que tu error es de esos bien tontos y que te rompen la cabeza por nada? Si... es de esos ¡no mates al mensajero!

Fíjate que en la línea 8, columna 7 dice CODDOCUMENTO. Allí falta algo... ¡NEW!
Y también en la declaración del triggers falta el FOR <tabla>

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 21-09-2011
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
Hola antonio, en los triggers AFTER no puedes modificar valores de la misma tabla. Para cambiar los valores del registro que se esta insertando se usan los triggers BEFORE INSERT, para los valores que se estan actualizando el trigger BEFORE UPDATE.
Cuando se ejecutan los eventos AFTER (AFTER INSERT/AFTER UPDATE) ya los registros han sido almacenados en la base de datos, todavia se tiene acceso al registro NEW pero ya no se le pueden asignar valores.
__________________
Saludos

Alfredo
Responder Con Cita
  #4  
Antiguo 21-09-2011
Avatar de Antoniov
Antoniov Antoniov is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Tenerife
Posts: 42
Poder: 0
Antoniov Va por buen camino
Solucionado

Gracias por vuestra ayuda.

Al final, el problema real no era tan real.

Para gestionar la base de datos uso el programa SQL Manager Lite 2008. Es una versión GRATUITA que sacaron y que luego quitaron. Si alguien la quiere se la puedo enviar.

Es genial, te permite crear y manipular una base de datos (Firebird, Interbase, ....) incluso sin apenas tener idea de SQL ni de nada.

Pero tiene algunos bugs, y anoche encontré uno más.

Cuando escribes un Script y lo compilas, si da error la primera vez, ya no encuentro forma de que la compilación funcione, por más que lo corrijas.

Hay que copiar el script, anular los cambios. Creas uno nuevo y le pegas el script que daba error y ya está.

De lo contrario no hay forma.

Si alguien lo usa me lo dice y le comento otros bugs que he encontrado y que le he buscado una alternativa.

Un saludo y gracias
__________________
Blog Delphi XE
Responder Con Cita
  #5  
Antiguo 21-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mejor será usar otro sql manager
Responder Con Cita
  #6  
Antiguo 21-09-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Utiliza IBExpert que tiene una versión gratuita aunque no completa. Pero lo que tienes es por lo lejos más de lo que te imaginas... Si la edición Personal es limitada, ¡no quiero ni pensar como será la completa!

Y también está FlameRobin que Open Source y además Multiplataforma.

Con IBExpert y FlameRobin dejarás atrás las renegadas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
No Encuentro el Error del Trigger en FireBird 2.5 teletranx Firebird e Interbase 7 06-06-2011 22:03:25
Trigger Firebird tec Firebird e Interbase 3 04-10-2010 21:46:43
trigger y firebird ebeltete Firebird e Interbase 1 22-06-2007 15:03:38
No ejecuta Trigger en Firebird Coco Firebird e Interbase 5 09-01-2007 17:43:48
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


La franja horaria es GMT +2. Ahora son las 23:44:54.


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