PDA

Ver la Versión Completa : Error creación trigger en InterbaseExpert


coej
16-05-2011, 16:01:21
HOla a todos de nuevo, aquí sigo pataleando con delphi, firebird y interbase expert...
Os cuento mí nuevo problema, estoy intentando crear unos procedimientos en interbaseexpert(después de crear una tabla banco)
Con un codigo integer(not null ) y primary key...
fecha, y nombrebanco(ambos varchar).
Hasta ahí todo bien, ahora quiero crear un autoincremental en el código del banco(Primero marco un crear generador, y después crear trigger), pero cuando pulso ok, me da error...
Yo marco crear generador
pero ibexpert me crea sequence, y no se porque y me da error en ese comando
CREATE SEQUENCE BANCOS_ID...
Pero no encuentro ningún sitio donde retocar ese valor...
alguna sugerencia?
este s el error
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 7.
SEQUENCE.
y este el comando que me genera
CREATE SEQUENCE GEN_BANCOS_ID
gracias.

guillotmarc
16-05-2011, 16:05:42
Hola.

¿ Cual es la sentencia exacta que utilizas para crear el generador, y cual es el mensaje de error que te devuelve ?.

Saludos.

coej
16-05-2011, 16:20:07
CREATE SEQUENCE BANCOS_ID
Pero no la genero yo, la genera ibexpert, yo edito el campo codigo en ibexpert, y elijo la casilla autoincrement, en esa pestaña elijo create_generator, y en la siguiente pestaña trigger, marco create trigger, es todo automático de ibexpert... yo no pongo nada a pelo...
Y el error me lo marca en la palabra sequence, que es la que me pone ibexpert, yo pensaba que me pondríaCREATE GENERATOR BANCOS_ID

Casimiro Notevi
16-05-2011, 16:46:29
Fíjate si estás creando una BD con dialecto 1 ó 3.

coej
16-05-2011, 16:50:03
Dialecto 1, aunque puedo probar a dialecto 3, si es eso...
La verdad es que estoy siguiendo una guia en la que utiliza firebird 1.5...
Pero no creo que eso afecte mucho, o si???
Tampoco tiene nada de raro, una tabla, un campo clave integer y crear el autoincremental con un trigger, tampoco veo por donde puede fallar...

En la guia el lo crea con server local la base de datos, y a mí me da error , tengo que crearla como remote , server localhost...

Casimiro Notevi
16-05-2011, 16:57:44
Sí, creo recordar que esas nuevas instrucciones son válidas para los firebird siguientes al 1.5 y con dialecto 3. Aunque no lo puedo confirmar ahora mismo.

ecfisa
16-05-2011, 16:58:25
Hola.
La verdad es que estoy siguiendo una guia en la que utiliza firebird 1.5...
Pero no creo que eso afecte mucho, o si???
Yo creo que sí, la guía está basada en Firebird 1.5 y SECUENCE según entiendo es soportado a partir de Firebird 2.x

Saludos.

Edito: No vi tu post Casimiro, pero creo recordar lo mismo...

guillotmarc
16-05-2011, 17:04:56
Dialecto 1, aunque puedo probar a dialecto 3, si es eso...
La verdad es que estoy siguiendo una guia en la que utiliza firebird 1.5...
Pero no creo que eso afecte mucho, o si???
Tampoco tiene nada de raro, una tabla, un campo clave integer y crear el autoincremental con un trigger, tampoco veo por donde puede fallar...

En la guia el lo crea con server local la base de datos, y a mí me da error , tengo que crearla como remote , server localhost...

Dialecto 1 es solo un modo para compatibilidad con versiones muy antiguas de Interbase. Para cualquier desarrollo actual deberías usar el Dialecto 3.

También te recomiendo que utilices Firebird 2.5 (el último Firebird disponible), puesto que todo lo que encontrarás en la guía de Firebird 1.5 es aplicable igualmente para Firebird 2.5, y podrás disfrutar de un gran conjunto de mejoras.

Saludos.

coej
16-05-2011, 17:17:33
Estoy usando firebird 2.5, e interbaseexpert personal edition version 29.03.2011
Lo de la guia es lo de menos,
Registro una bd , como local con server version firebird 2.5, marco el user y password, y no toco nada más, después creo la bd con los mismos datos(al path me refiero)
y después creo una tabla, bancos
campos
codigo integer
fecha varchar 20
banco varchar 100
Creo la tabla, y sin problemas
pico dos veces en el campo código, en la ventana de edición
pulso la pestaña autoincrement, en la subpestaña generator,lo marco y pongo que la secuencia inicial sea 1, en la siguiente subpestaña trigger, marco create trigger...
Pulso ok, me da el error de create sequence que indico...???? no se que estaré haciendo mal...

Casimiro Notevi
16-05-2011, 17:23:24
Dialecto 1, aunque puedo probar a dialecto 3, si es eso...
La verdad es que estoy siguiendo una guia en la que utiliza firebird 1.5...
Pero no creo que eso afecte mucho, o si???

Estoy usando firebird 2.5, e interbaseexpert personal edition version 29.03.2011


Para empezar tendrás que aclararte bien qué es lo que estás usando.

coej
16-05-2011, 17:28:09
Lo que pongo antes(Estoy usando firebird 2.5, y para crear la bd como programa para manejar firebird graficamente interbase personal edition...)
He probado con dialecto 1 y 3, y en los dos me lanza los mismos errores...

Lo que ponía antes es que la guia que estoy siguiendo , el que la hizo los pantallazos , están contra firebird 1.5, lo he mencionado por si ese cambio de versión afectaba para los errores...

ecfisa
16-05-2011, 17:40:23
Hola coej.

Es extraño con Firebird 2.5, dialect 3 e IBExpert no recibí nunca un mensaje de error sobre secuence. Realmente no sé que puede estar pasando...

Te pongo un enlace donde aclara el uso de secuence y generator: GENERATOR/SECUENCE (http://www.firebirdsql.org/manual/generatorguide-basics.html)

Y otro sobre como cambiar de dialecto a la base de datos: Setting Database Dialect (http://www.firebirdsql.org/manual/gfix-dialect.html)

Tal vez encuentres respuesta en alguno de ellos.


Saludos.

guillotmarc
16-05-2011, 17:44:22
Lo que pongo antes(Estoy usando firebird 2.5, y para crear la bd como programa para manejar firebird graficamente interbase personal edition...)
He probado con dialecto 1 y 3, y en los dos me lanza los mismos errores...

Lo que ponía antes es que la guia que estoy siguiendo , el que la hizo los pantallazos , están contra firebird 1.5, lo he mencionado por si ese cambio de versión afectaba para los errores...

Perfecto. A partir de ahora utiliza solo el Dialecto 3 (como te comentaba antes, el Dialecto 1 solo se usa para compatiblidad con versiones muy antiguas, olvídate de él).

Seguimos esperando a que nos indiques el mensaje de error exacto que te aparece al intentar crear el generador.

Saludos.

coej
16-05-2011, 17:59:53
---------- STATEMENT ----------

CREATE SEQUENCE GEN_BANCOS_ID


---------- ERROR MESSAGE ----------

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 7.
SEQUENCE.



Este es el error exacto, de hecho no me pone nada del código del trigger, es como si no llegara a el, el error lo genera antes, ya que no me genera la secuencia(o al menos eso es lo que yo entiendo)...
Pero vuelvo a comentar, que yo no pongo nada a pelo, estoy siguiendo el "asistente" de ibexpert, creando el generador con inicio de secuencia 1 y el trigger marcando la casilla, yo no escribo nada de código...

guillotmarc
16-05-2011, 18:01:11
Seguimos esperando a que nos indiques el mensaje de error exacto que te aparece al intentar crear el generador.


Aunque me temo que tu problema es que la base de datos sigue en Dialecto 1, y solo estás cambiando su registro en IB-Expert (lo cual no cambia para nada la base de datos misma).

Para cambiar la base de datos a Dialecto 3, una buena forma de hacerlo es creándola de nuevo. Puedes usar la opción Extract Metadata, en el menú Tools de IB-Expert, para generar el Script que va a regenerar tu base de datos.

Saludos.

guillotmarc
16-05-2011, 18:08:44
Hola.

---------- STATEMENT ----------

CREATE SEQUENCE GEN_BANCOS_ID


---------- ERROR MESSAGE ----------

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 7.
SEQUENCE.



Este es el error exacto, de hecho no me pone nada del código del trigger, es como si no llegara a el, el error lo genera antes, ya que no me genera la secuencia(o al menos eso es lo que yo entiendo)...
Pero vuelvo a comentar, que yo no pongo nada a pelo, estoy siguiendo el "asistente" de ibexpert, creando el generador con inicio de secuencia 1 y el trigger marcando la casilla, yo no escribo nada de código...

En efecto no te acepta la sentencia de creación del generador.

Lo más probable es que aún tengas la base de datos en Dialecto 1, como te comentaba anteriormente. Yo no sé de que haya alguna forma de cambiar el Dialecto de una base de datos existente, así que te recomiendo que vuelvas a crear tu base de datos (esta vez indicando Dialecto 3 desde el principio).

NOTA: Por cierto, yo normalmente utilizo el CREATE GENERATOR, aunque el CREATE SEQUENCE debería hacer exactamente lo mismo. No está de más probar :

CREATE GENERATOR GEN_BANCOS_ID;

Saludos.

coej
16-05-2011, 18:16:07
Si lo raro es que yo estoy escogiendo create generator, no se porque me pone sequence????

y acabo de crear registrar una nueva bd, con otro nombre, con dialecto 3, y al crear el generador y luego la secuencia, me sigue dando el mismo error..:(

Para poner otro error por si ayuda a identificar este, lo siguiente es crear procedures, y al crearla, me da error en la palabra or del create or alter procedure...
¿¿¿¿

guillotmarc
16-05-2011, 19:14:34
Pon esta sentencia en el SQL Editor, y ejecútala : CREATE GENERATOR GEN_BANCOS_ID;

¿ Se crea correctamente el generador ?.

Las sentencias CREATE PROCEDURE las tienes que poner en el Script Executive (ya que hay más de una sentencia involucrada).

Saludos.

coej
16-05-2011, 21:57:52
Si, se genera correctamente la sentencia con el sql editor...
Y a continuación puedo genera el trigger desde la edición del campo...
Lo que no entiendo es porque no puedo hacerlo de la otra forma, y porque no me reconoce el comando sequence...
Después he intentado eliminar el trigger, y el generator, el trigger lo he podido eliminar, pero el generator, no me deja
ni con
drop generator GEN_BANCOS_ID;
ni con
drop sequence GEN_BANCOS_ID;
En el editor de sql, no me reconoce ni generator, ni sequence, me da error en ese comando...

Con respecto a las procedures, no se pueden crear con botón derecho sobre el arbol de la izquierda y generarlo???, en la guia que he seguido los genera asi...

Gracias por la respuesta guillotmarc, al menos así puedo generar el trigger, luego probare con el procedure donde me comentas, pero es un fastidio que no funcione por el que creo que debería ser su funcionamiento normal...

Casimiro Notevi
16-05-2011, 22:14:19
También puede ser que esa versión de ibexpert tenga algún bug en ese apartado, suele ocurrir a veces, es uno de los motivos por los que sacan versiones nuevas muy seguidas.

coej
16-05-2011, 23:26:10
gracias casimiro, haber si alguien me puede decir alguna version o pasar un enlace de ibexpert(la versión gratuita), y que funcione, porque es un chasco grande que no funcione esto, con lo sencillo que sería o crear las procedure

P.d--> Tengo w7 x64 bits, espero que esto no sea otro foco de problemas...:confused:

Casimiro Notevi
17-05-2011, 01:15:27
Yo tengo una versión de hace varios años :)

coej
17-05-2011, 10:12:37
He estado por privados con ecfisa, y me ha aconsejado instalar otro manejador para probar, el ibmanager, y con este si que me crea el generador y el trigger???, con los procedures no he probado aún, el cree que puede ser porque tengo w764bits, aunque yo creo que puede ser más o la versión de ibexpert(porque tengo la versión reducida), o porque he configurado mal en la instalacion...
Haber si alguien me pudiera pasar el enlace de una versión más antigua para probar, ya que creo que ibexpert no guarda historila de versiones,no creo que la instalación de firebird tenga que ver nada con esto no???
Como última prueba, desistale ibexpert, e instale la versión más reciente que la que tenía del 3 de abril, y me hace lo mismo...
Estoy un poco desorientado, la verdad, no se por donde cogerlo...

Casimiro Notevi
17-05-2011, 10:16:44
¿Has chequeado la BD esté bien?

coej
17-05-2011, 10:19:00
La verdad, estoy empezando a probar todo , y no sé hacerlo(para que voy a mentir), pero he creado varias nuevas, registradas y creadas, y siempre me hace lo mismo..., otra opción puede ser volver a instalar firebird, aunque no creo que tenga nada que ver con que un manejador, me de error de sintaxis en un comando sequence, o en un comando or...

Casimiro Notevi
17-05-2011, 11:16:59
En principio, para lo más básico, haz un backup y posterior restore. A ver si emite algún mensaje de problemas con la BD. Si no se queja en nada entonces pasaremos al siguiente paso :)

coej
17-05-2011, 11:20:46
Ya has llegado tarde, he desistalado todo, como no tengo nada, y estoy empezando a probar, he desistalado firebird, ibexpert, e imsql, voy a volver a instalar firebird , esta vez la versión de 64 bits, y empiezo de 0 en todo , haber si es que meti la pata en algo de configuración al principio..

coej
17-05-2011, 12:28:33
Mil disculpas a todos por haceros perder vuestro tiempo, creo que el problema estaba, en la selección de la librería dll en ibexpert, en la opción client library, que no la estaba cogiendo de forma correcta, ahora al cogerla del directorio udf de la instalacion de firebird la dll, me ha generado correctamente el generador y el trigger sin problemas...
Ahora estoy con las procedures, porque no me reconoce el mensaje de error de excepción...when sqlcode -803 do exception nuevo_banco;
Es lo que tiene ser novato...jeje

De nuevo gracias a todos por vuestras respuestas y vuestro tiempo...

ecfisa
17-05-2011, 13:48:31
Bueno, por mi parte más que disculparte tengo que agradecerte, he aprendido algo nuevo. Si algún día tengo un problema similar, no tendré que renegar tanto... ;)

Un saludo.

guillotmarc
17-05-2011, 13:57:12
Hola, me alegro que hayas localizado el error.

Mil disculpas a todos por haceros perder vuestro tiempo, creo que el problema estaba, en la selección de la librería dll en ibexpert, en la opción client library, que no la estaba cogiendo de forma correcta, ahora al cogerla del directorio udf de la instalacion de firebird la dll, me ha generado correctamente el generador y el trigger sin problemas...
Ahora estoy con las procedures, porque no me reconoce el mensaje de error de excepción...Código SQL [-] (http://www.clubdelphi.com/foros/#)when sqlcode -803 do exception nuevo_banco;

Es lo que tiene ser novato...jeje

De nuevo gracias a todos por vuestras respuestas y vuestro tiempo...


¿ Ya has creado esa excepción ? :

CREATE EXCEPTION "nuevo_banco" 'Debe inicializar primero el Banco';

NOTA: Por cierto, sería conveniente que abras un nuevo hilo para discutir este problema (ya que no está relacionado con lo anterior).

Casimiro Notevi
17-05-2011, 14:45:45
Mil disculpas a todos por haceros perder vuestro tiempo,

Nada, no hay problema, tendrás que cumplir alguna penitencia: reza un padrenuestro y dos avemarías... y listo :D:D:D

coej
17-05-2011, 15:39:16
Si las penitencias por aqui son tan leves, os voy a dar bastante guerra que soy bastante cabezorrete..jeje...

Si , el error es que no tenía creada la excepción, es lo que pasa las primeras veces que haces algo ...
Primero se crea la excepción y luego se hace referencia a ella en el procedure...

Se que me va a chillar casimiro por mezclar cosas en el hilo...
otro padrenuestro mas...

Por cierto para solicitar videotutoriales o manuales en castellano de ibexplorer cuelgo otro hilo????, o delphi+ibexpert+firebird, he visto por ahi unos videotutoriales pero son de pago...
Porque la guia que he estado siguiendo después de generar los procedures, comenta que se asocian a un tibsotredproc , pone el codigo , pero no como ni donde para hacer las altas bajas, y modificaciones de la tabla...

Casimiro Notevi
17-05-2011, 16:21:06
Cualquier tema diferente debe ir en hilos diferentes, hay que procurar tener un orden porque en caso contrario te encuentras un hilo titulado, por ejemplo: "Problema al crear trigger" y si alguien hace diversas preguntas que no tengan nada que ver con "crear trigger"... pues imagina el descontrol, esto sería un programa espagueti con "goto" por todos lados :D

coej
17-05-2011, 16:24:33
Pues pongo otro hilo para solicitar los videotutos, y perdón que ya no puedo editar este...
Goto....:rolleyes: que tiempos...