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 11-06-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Subselect illegal in this context.

Estoy haciendo un trigger para que me actualize el costo promedio del producto al momento de actualizar un registro.

Este es el trigger
Código Delphi [-]
AS
begin
   if (New.costounitario <> Old.costounitario) then
   begin
      Insert Into Historicocostos (codigo, codigoproducto, costoanterior, costonuevo, fechacambio, UsuarioCambio) values (Coalesce((Select Max(Codigo) from HistoricoCostos where codigoproducto = new.codigo), 0) + 1, new.codigo, Old.costounitario, New.costounitario, current_date, New.UsuarioModificado);
      New.ultimocosto = Old.costounitario;
      if (New.costopromedio <> 0) then
      begin
         New.CostoPromedio = (select avg(costonuevo) from historicocostos where codigoproducto = New.codigo);
      end
      else
      begin
         New.costopromedio = New.costounitario;
      end
   end
end

pero al compilar me da este error:

Cita:
SQL error code = -206.
Subselect illegal in this context.
Lo compilo con ibExpert y Firebird 2.0
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #2  
Antiguo 11-06-2008
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
Quizás peque de ignorante.

Quizás peque de ignorante, pero creo que un Select no devuelver un valor, ni se puede evaluar como un resultado. Yo lo haría así:


Código:
 
AS
   DECLARE VARIABLE Valor FLOAT;
begin   
  if (New.costounitario <> Old.costounitario) then   begin      
           Insert Into Historicocostos (codigo, codigoproducto, costoanterior, costonuevo, fechacambio, UsuarioCambio) 
              values (Coalesce((Select Max(Codigo) from HistoricoCostos 
              where codigoproducto = new.codigo), 0) + 1, new.codigo, Old.costounitario, New.costounitario, current_date, New.UsuarioModificado);      
    New.ultimocosto = Old.costounitario;      
    if (New.costopromedio <> 0) then      
       begin        
         select avg(costonuevo) from historicocostos           
            where codigoproducto = New.codigo          
            into :Valor;         
         New.CostoPromedio = Valor;      
       end      
     else      
       begin         
         New.costopromedio = New.costounitario;      
       end   
    endend
Saludos
Responder Con Cita
  #3  
Antiguo 11-06-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
pues aparentemente asi si funciona, pero no sabia que no se podia tomar el valor desde el select.

Muchas gracias
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 11-06-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

Y no seri amejor asi.
Código SQL [-]
...
select avg(costonuevo) from historicocostos where codigoproducto = new.codigo into New.CostoPromedio;
...
Bueno digo.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #5  
Antiguo 12-08-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por rastafarey Ver Mensaje
Y no seri amejor asi.
Código SQL [-]
...
select avg(costonuevo) from historicocostos where codigoproducto = new.codigo into New.CostoPromedio;
...
Bueno digo.
lo acabo de probar y funciona perfectamente...
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
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
Name not unique in this context mrnovice OOP 2 02-06-2008 18:55:42
BDE - Name not unique in this context FerPetrei Conexión con bases de datos 0 14-06-2007 09:57:22
help context y d2006 chux Varios 1 14-06-2006 09:04:19
Error «illegal line ""» en extensión DLL que accede a Firebird Al González PHP 2 19-09-2005 15:16:07
!'the name not unique in this context'.. ! Tequila Providers 2 20-11-2004 01:21:39


La franja horaria es GMT +2. Ahora son las 00:55:40.


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