Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   No Autoincrementa firebird en sentencia Insert Into (https://www.clubdelphi.com/foros/showthread.php?t=78045)

MartinS 15-03-2012 14:01:01

No Autoincrementa firebird en sentencia Insert Into
 
Hola gente, nuevamente yo... :D
Tengo una tabla de novedades con los siguientes campos:
Id, IdInt, Fecha, Detalle, Tipo
El Id es autoincremental mediante un generaldor en Interbase y necesito que se active mediante la sentencia

Código SQL [-]
  insert into NOVEDADES
  (DETALLE, FECHA, ID, IDINT, TIPO)
values
  (:DETALLE, :FECHA, :ID, :IDINT, :TIPO)

Los parametros se los indico asi

Código Delphi [-]
ParamByName('Detalle').AsString := 'xxxx';
    ParamByName('Fecha').AsDateTime := FeNov.DateTime;
    ParamByName('IdInt').AsInteger := codigo;
    ParamByName('Tipo').AsString := 'yyyy';

y despues el ExecQuery. El hecho es que con esa sentencia no me autoincrementa en la base de datos cosa que si lo hago por el IbDataset con append y luego post me lo hace correctamente. Evidentemente algo me esta faltando en la sentencia Insert Into. Que podra ser??, Debo incluir algo en el parámetro del ID? :confused:

Gracias!! ;)

duilioisola 15-03-2012 16:56:53

¿Qué triggers tiene NOVEDADES?
Puede que el trigger sea el encargado de incrementar el valor de ID y asignarlo al registro.
En mis triggers es algo así:
Código SQL [-]
NOVEDADES_BI0
as
begin
   /* Solo autoincrementar si no viene con un valor */
   if ((new.ID is null) or (new.ID=0)) then
      new.ID = gen_id(CONTADOR_NOVEDADES, 1);
end

Luego ten en cuenta que en delphi llamas a un parámetro que parece que no existe en el SQL

Código Delphi [-]
ParamByName('IdInt').AsInteger := codigo;
Código SQL [-]
values (: DETALLE, :FECHA, :ID, :IDINT, :TIPO)

MartinS 16-03-2012 00:46:32

Hola duilioisola: Si. El trigger esta definido asi en la base de datos (Uso el EMS SQL Manager 2008):

Código SQL [-]
 CREATE TRIGGER BI_NOVEDADES_ID FOR NOVEDADES
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(NOVEDADES_ID_GEN, 1);
END^

SET TERM ; ^
el hecho es que no se como ejecutarlo a traves de la sentencia Insert de SQL. Nuevamente por el IbDataset se genera correctamente.
El parametro IdInt es el cuarto de la sentencia SQL y asigna el codigo de persona para hacer la relacion.-

Gracias nuevamente

Casimiro Notevi 16-03-2012 00:48:03

Recuerda usar las etiquetas para código, ejemplo:




.

MartinS 16-03-2012 11:28:30

Ops!!!
Código SQL [-]
if ((new.ID is null) or (new.ID=0))

No habia visto en detalle el triggers de duilioisola, me faltaba la parte donde el nuevo id es 0 (justo lo que genera mi sentencia (Un 0)).-

Gracias y nuevamente me han solucionado un problema.-


La franja horaria es GMT +2. Ahora son las 10:40:11.

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