Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Cómo Hago un Autoincremento en un trigger (https://www.clubdelphi.com/foros/showthread.php?t=52616)

hmrvivas 26-01-2008 00:31:32

Cómo Hago un Autoincremento en un trigger
 
Hola Todos.

Tengo el siguiente Trigger

create trigger Actualizacion_Id Before Insert On Genero
For EACH ROW
Begin

SET @Cont= (SELECT MAX(CODGENERO)+1 FROM GENERO);
INSERT INTO GENERO (CODGENERO) VALUES (@Cont );

End;

Lo que quiero es que al insertar un registro se me asigne automaticamente el consecutivo en el campo CODGENERO (es la llave).

Me sale un error que dice que la variable es Nula.:confused:

Agradezco si me colaboran

Emilio 08-02-2008 01:05:10

¿No te sirve un campo autoincremental? :confused:

Ñuño Martínez 08-02-2008 09:25:42

Aparte de lo dicho por Emilio, que tiene razón porque MySQL incluye campos autoincrementales, el error te lo da porque el evento se ejecuta antes (before) de que se haga la inserción, por lo que no puede acceder a los campos ya que todavía no existen.

De todas formas, repetimos, usa un campo autoincremental (auto_increment). Por ejemplo:
Código SQL [-]
CREATE TABLE IF NOT EXISTS `empleado` (
  `id` int(25) unsigned NOT NULL auto_increment,
  `Nombre` text NOT NULL,
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

Para insertar sólo tienes que hacer:
Código SQL [-]
INSERT INTO `empleado` (`Nombre`) VALUES ('Juan González');

rikrdo04 03-12-2008 03:03:21

Si bien existe en mysql la opcion de Autoincrement, creo que se podria realizar mediante un trigger... Si alguien sigue esta idea.. aqui les muestro el codigo del trigger que realicé.

Código:


...
DECLARE
    id int;
BEGIN
    SELECT MAX(campo1) FROM tbl1 INTO id;
    IF (id>0) THEN
        SET NEW.campo1 = id + 1;
    ELSE
        SET NEW.campo1 = 1;
    END IF;
END

(Para quienes no entiendan el significado de NEW, el trigger se ejecuta antes que se inserte un campo, es decir que todavia no se encuentra en la base de datos, y se hace referencia a los datos que estan por ser insertados mediante NEW. seguido del nombre del campo) .

Bueno eso es el corazón del trigger.. ahora cuando realizo un ingreso mediante la consola el trigger funciona correctamente.
Estoy utilizando delphi2007 con ZEOS 6.1 (si mal no recuerdo) con un mysql 5.. Cuando realizo el POST desde delphi es como que el trigger no se ejecuta..
Me sale un mensaje indicandome que no es posible insertar un valor nulo para el "campo1"..
Si alguien sabe a que se debe o cual es la solucion les estaré agradecidos...
Espero les sirva.
Saludos

Rikrdo.-


La franja horaria es GMT +2. Ahora son las 12:13:13.

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