Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2008
hmrvivas hmrvivas is offline
Miembro
 
Registrado: jun 2006
Posts: 31
Poder: 0
hmrvivas Va por buen camino
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.

Agradezco si me colaboran
Responder Con Cita
  #2  
Antiguo 08-02-2008
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
¿No te sirve un campo autoincremental?
__________________
Saludos
Emilio
Responder Con Cita
  #3  
Antiguo 08-02-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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');
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 03-12-2008
rikrdo04 rikrdo04 is offline
Registrado
 
Registrado: oct 2007
Posts: 1
Poder: 0
rikrdo04 Va por buen camino
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.-
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 en mysql como se hace?????? david_uh MySQL 0 16-07-2007 23:13:40
como utilizo un campo con autoincremento. aurbano Tablas planas 8 26-10-2005 11:25:51
Trigger como lo armo? marceloalegre SQL 18 11-06-2005 20:11:57
Autoincremento Alex2000 Firebird e Interbase 1 10-05-2005 18:22:42
Como obtener valor de Campo Autoincremento... vic_ia Firebird e Interbase 5 10-05-2005 17:19:42


La franja horaria es GMT +2. Ahora son las 19:39:47.


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