Ver Mensaje Individual
  #15  
Antiguo 01-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Finalmente, la opción que va a funcionar en cualquier versión de Interbase o Firebird, por antigua que sea (ya que utilizamos la sintaxis más básica y común) es crear tres triggers, uno para cada operación que se puede hacer en la tabla:

Código SQL [-]
SET TERM ^ ;

CREATE TRIGGER RECALCULAR_STOCK_AI for DETALLE_P
active after insert position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
  WHERE ID_ARTICULO = new.CODIGO, old.CODIGO;
end
^

CREATE TRIGGER RECALCULAR_STOCK_AU for DETALLE_P
active after update position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
  WHERE ID_ARTICULO = new.CODIGO;


  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
  WHERE ID_ARTICULO = old.CODIGO;
end
^

CREATE TRIGGER RECALCULAR_STOCK_AD for DETALLE_P
active after delete position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
  WHERE ID_ARTICULO = old.CODIGO;
end
^

SET TERM ; ^

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita