Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema con trigger after insert (https://www.clubdelphi.com/foros/showthread.php?t=73800)

auribe 17-05-2011 20:54:52

problema con trigger after insert
 
Hola a todos. Si alguien puede ayudarme con el siguiente problema.
Tengo una aplicacion con una base de datos firebird 2.1 conectada a Delphi 5 atraves del BDE. La aplicacion hasta ahora funciona bien, el caso es que por asunto de rapidez quiero elimnar el BDE y conectarme directamente a la base de datos.

Empece a cambiar los componentes y estoy utilizando los IB que estan en el tab de interbase y no se porque razon los trigger que generan la clave no lo estan haciendo con estos componentes y me dan un error tal como EL CAMPO CTR_TICKET MUST HAVE A VALUE.

El valor de de este campo es primary key y lo genera un trigger BEFORE INSERT de la siguiente manera.

Código SQL [-]
CREATE OR ALTER TRIGGER ANTES_INSERT_TICKET FOR MAESTRO_TICKETS
ACTIVE BEFORE INSERT POSITION 0.
BEGIN
   Select ctr_ticket from secuencia into ctr_ticket 
        if (ctr_ticket is null) then ctr_ticket=0;
        NEW.CTR_TICKET=CTR_TICKET+1;
END;

Nota: Cuando inserto el registro por IB Expert y tambien conectandome a la base de datos por BDE el trigger funciona bien, mas conectandome directo con los componentes IB da el error antes mencionado.

Necesito ayuda...

ecfisa 18-05-2011 02:21:58

Hola auribe.

Si estas usando un TIBDataSet o un TIBQuery tenés que especificar el nombre del generador en la propiedad GeneratorField.
Desde el ObjectInspector hacé clic sobre los puntos suspensivos (...) y te abre un cuadro donde ingresas: Nombre del generator, campo al que se se aplica y el evento en que deseas que se aplique.

Lo mismo pero por código:
Código Delphi [-]
  IBDataSet.GeneratorField.Generator:= 'G_CLIENTES';
  IBDataSet.GeneratorField.Field:= 'ID_CLIENTES';
  IBDataSet.GeneratorField.ApplyEvent:= gamOnPost;
  IBDataSet.GeneratorField.IncrementBy:= 1;

Saludos.

auribe 18-05-2011 16:51:16

Gracias por responden. Entiendo que la forma que lo haces le estas dejando la tarea a delphi para que realice esta funcion y en mi opinion debe ser tarea de la base de datos.

Existe otra opinion al respecto?

Gracias..


La franja horaria es GMT +2. Ahora son las 14:25:35.

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