Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
No Autoincrementa firebird en sentencia Insert Into

Hola gente, nuevamente yo...
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
  (ETALLE, :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?

Gracias!!
Responder Con Cita
  #2  
Antiguo 15-03-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
¿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)
Responder Con Cita
  #3  
Antiguo 16-03-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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

Última edición por MartinS fecha: 16-03-2012 a las 00:47:22. Razón: Etiquetas
Responder Con Cita
  #4  
Antiguo 16-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda usar las etiquetas para código, ejemplo:




.
Responder Con Cita
  #5  
Antiguo 16-03-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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.-
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
Campo Calculado con la Sentencia if en FireBird DasGrun Firebird e Interbase 3 29-08-2011 23:31:56
Insertar sentencia SQL despues de Insert,update o delete vivamotos Firebird e Interbase 10 02-08-2011 18:24:30
Error en concatenacion de Sentencia SQL, Firebird 2.5 Adrian Murua SQL 15 02-04-2011 00:08:00
Duda en sentencia de firebird vivamotos Firebird e Interbase 6 10-09-2007 11:17:18
Como crear una sentencia SQL (Insert, update y delete) sitrico Conexión con bases de datos 1 14-10-2004 00:02:42


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


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