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 13-09-2006
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
problema con TRIGGER

hola amigos del foro, estoy peleando con los TRIGGER y crear este me dice que no existe, quiero autoincrementar el campo nro de la tabla ticks, pero al grabarla me dice TRIGGER no found. no entiendo?, aqui el código.

Código SQL [-]
CREATE TRIGGER GEN_TICKS FOR TICKS AFTER INSERT POSITION 0 AS
BEGIN
  NEW.NRO = GEN_ID(GENTICKS ,1);
END
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #2  
Antiguo 13-09-2006
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Cita:
Empezado por Manuel
hola amigos del foro, estoy peleando con los TRIGGER y crear este me dice que no existe, quiero autoincrementar el campo nro de la tabla ticks, pero al grabarla me dice TRIGGER no found. no entiendo?, aqui el código.

Código SQL [-]
CREATE TRIGGER GEN_TICKS FOR TICKS AFTER INSERT POSITION 0 AS
BEGIN
  NEW.NRO = GEN_ID(GENTICKS ,1);
END
Me respondo, lo que me faltaba era crear el generador "GENTICKS ", pero ya esta solucionado, pero ahora, apelkando a mi lógica, al insertar un registro en la tabla ticks automaticamente con esto el campo nro se autoincrementará lo probé pero nada, que será faltará algo.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #3  
Antiguo 13-09-2006
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
Le falta que le cambies el evento a "BEFORE", como lo tienes el triger se dispara despues que se realiza la insercion.
__________________
Saludos

Alfredo
Responder Con Cita
  #4  
Antiguo 13-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Los triggers after, como su nombre lo indica, se disparan después de la inserción física del registro, por lo que no tiene sentido alterar algún dato, pues esto ya no se reflejará en el registro.

Comento que una de las mejoras de firebird 2 es que al intentar compilar un trigger como este, obtendrás un error o un warning, no recuerdo con exactitud ahora, que te indicará que el registro new es de solo lectura.

Para lo que vos queres, precisas de crear un trigger que se ejecute antes de la inserción.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 13-09-2006
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
gracias amigos, ya había cambiado eso after por before pero igual, resulta que el campo nro es la llave principal de mi tabla algo leí en foro que había problema con eso será por eso que no me autoincrementa?, de todas maneras elomine el indice pero igual.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #6  
Antiguo 13-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Puedo asegurarte que si el trigger está before, ¡Se auto-incrementa, como vos decis!

¿desde donde lo estas viendo?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 13-09-2006
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Cita:
Empezado por jachguate
Puedo asegurarte que si el trigger está before, ¡Se auto-incrementa, como vos decis!

¿desde donde lo estas viendo?

Este es mi TRIGGER:

Código SQL [-]
CREATE TRIGGER TICKSTRIGGER1 FOR TICKS BEFORE INSERT POSITION 0 AS
BEGIN
 NEW.NRO = GEN_ID(GEN_NRO ,1);
END

Mi generador:

Código SQL [-]
CREATE GENERATOR GEN_NRO;
SET GENERATOR GEN_NRO TO 3

Ahora el campo nro (el cual supuestamente se autoincrementa), es mi llave de la tabla por lo tanto no acepta valores null, y cuando agrego un registro por ejemplo en SQL Explorer, me da el siguiente error. 'Field NRO must have value', por lo tanto no me esta llenado el TRIGGER el campo nro.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #8  
Antiguo 13-09-2006
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
eso pasa, por que el sql explorer hace un verificacion de los campos que requieren valor antes de generar la instruccion de insercion, si quieres meter valores puedes ponerle un valor cualquiera, por ejemplo cero, cuando se realice la insercion tu campo tendra el valor correcto, ahora bien tambien puedes insertar los registros por medio de una sentencia
Código SQL [-]
insert into
en la cual omitas el campo nro.
__________________
Saludos

Alfredo
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
Trigger inferno Firebird e Interbase 1 26-10-2005 21:25:43
gracias trigger infinitoespasmo Humor 7 30-12-2004 08:27:31
trigger jaime cotino Firebird e Interbase 3 10-06-2004 19:10:48
problema de trigger ronson Firebird e Interbase 3 01-03-2004 18:16:57
trigger acertij022 Firebird e Interbase 6 20-10-2003 19:20:31


La franja horaria es GMT +2. Ahora son las 18:34:02.


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