Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2009
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Trigger varios consecutivos

Hola a todos,

Utilizo Delphi 2007, Firebird 2.1, Para diseño y pruebas en la base de Datos IBExpert.

Mi problema es el siguiente:
Tengo Una tabla de correspondencia:
Corresp con los Campos
Usuario= Varchar(3)
Consec= Integer
Descrip= Varchar(50)

La idea es que se debe llevar un consecutivo por cada usuario, por lo que el campo Consecutivo puede tener un valor repetido, pero el índice Usuario+Consecutivo si es único

He preparado el siguiente trigger

Código SQL [-]
CREATE trigger corresp_ai0 for corresp
active before insert position 0
AS
begin
  New.Consec = (Select Max(Consec)+1 from Corresp
                       Where Usuario=Old.Usuario);
end

Me da el siguiente error

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.
__________________
Saludos

Seara2005
Responder Con Cita
  #2  
Antiguo 17-11-2009
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Pues no se si me equivoco, pero creo que te falta un Set.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #3  
Antiguo 18-11-2009
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Prueba así:
Código SQL [-]
CREATE trigger corresp_ai0 for corresp
active before insert position 0
AS 
begin   
  Select Max(Consec)+1 
  from Corresp 
  Where Usuario=Old.Usuario
  into New.Consec;
end
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 19-11-2009 a las 09:47:26.
Responder Con Cita
  #4  
Antiguo 18-11-2009
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

No entiendo porque poneis old.usuario
si es trigger AI sera new
Otra cosa es preveer el primero ya que devolvera null


Código SQL [-]
CREATE trigger corresp_ai0 for corresp
active before insert position 0
AS 
begin   
  Select Max(Consec)+1   from Corresp 
  Where Usuario=new.Usuario
  into New.Consecend;
 if (new.Consecend is null) then new.Consecend=1;end

Saludos
Responder Con Cita
  #5  
Antiguo 18-11-2009
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Gracias a todos ha funcionado perectamente así:
Código SQL [-]
CREATE trigger corresp_ai0 for corresp
active before insert position 0
AS 
begin   
  Select Max(Consec)+1   from Corresp 
  Where Usuario=New.Usuario
  into New.Consec;
  if (New.Consec is null) then New.Consec=1;
end

Esto me ha permitido evitar la necesidad de crear un consecutivo independiente en el maestro de Usuarios y las correspondientes referencias a otra tabla.
__________________
Saludos

Seara2005
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
crear txt consecutivos en builder BC++ C++ Builder 2 13-11-2009 01:03:35
no me actualiza numeros consecutivos Camilo SQL 3 03-09-2007 13:25:56
Numeros de Recibo Consecutivos Camilo Conexión con bases de datos 6 03-08-2007 09:46:01
Bloques De Numeros Consecutivos dany2006 C++ Builder 5 15-11-2006 21:06:16
Inserción de datos consecutivos pallyJD Tablas planas 1 27-10-2006 18:22:34


La franja horaria es GMT +2. Ahora son las 21:51:32.


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