Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Sobre Triggers (https://www.clubdelphi.com/foros/showthread.php?t=3092)

mosorio 21-08-2003 10:09:18

Sobre Triggers
 
Hola compañeros!

Tengo una inquietud con respecto a los trigger y los momentos de su activación.
Está claro que las tareas internas se ejecutan Antes y Despues,segun la acción, pero trabajando en una aplicación Delphi 6, componentes DBExpress Fireibird 1.5 CR4; Estoy intentando hacer en la misma BD un trigger, de hecho lo he acabado y funciona con el motor, pero la duda que me resalta es que como el trigger esta hecho para que me calcule unos valores del mismo registro que se esta insertando y los inserte en otros campos del mismo, que tanto tiempo de respuesta se tenga para que los resultados se reflejen en los componentes delphi.

El trigger se ejecuta despues de insertar, no he probado si funciona antes de insertar, esta es la duda que tengo si lo hago antes o despues.
Colocaré el trigger para que sea más claro y me den una evaluación del mismo:

Cita:

CREATE TRIGGER "NUEVO_ARTICULO" FOR "ARTICULOSPROVEEDOR"
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE IVA DECIMAL(5,2);
BEGIN
SELECT
1 + (SUM(I.PJEIVA + I.PJERECEQ) /100)
FROM
TIPOIVA I
WHERE
I.IDTIPOIVA = NEW.IDTIPOIVA INTO :IVA;

UPDATE ARTICULOSPROVEEDOR
SET PVENTA = (NEW.PCOSTO * (1 + (NEW.GANANCIA / 100))),
PVENTAIVA = NEW.PCOSTO * (1 + (NEW.GANANCIA / 100)) * :IVA
WHERE IDARTICULO = NEW.IDARTICULO AND
IDPROVEEDOR = NEW.IDPROVEEDOR;
END
Lo que hago en este trigger es tomar los valores nuevos que se insertan del campo PCOSTO y aplicarle la GANANCIA para obenter el PVENTA e igualmente con el PVENTAIVA, lógicamente tomando los valores del IVA del registro correspondiente.
Ahora si: El trigger se ejecuta despues de insertar y claro esta que los valores calculados de los otros campos no se ingresaran, pero no quiero colocar los controles y dejarlos inactivos ya que la idea es que el usuario puede colocar valores en esos campos EJ PVENTA sin necesidad de GANANCIA o PCOSTO.

Espero que me haya dado a entender, es un poco liado el teledramon.

Gracias de antemano.

SCORDOBA 21-08-2003 13:16:45

Hola:

Yo lo haria en el befor insert

CREATE TRIGGER "NUEVO_ARTICULO" FOR "ARTICULOSPROVEEDOR"
ACTIVE before INSERT POSITION 0
AS
DECLARE IVA DECIMAL(5,2);
BEGIN
SELECT
1 + (SUM(I.PJEIVA + I.PJERECEQ) /100)
FROM
TIPOIVA I
WHERE
I.IDTIPOIVA = NEW.IDTIPOIVA INTO :IVA;

new.PVENTA = (NEW.PCOSTO * (1 + (NEW.GANANCIA / 100)));
new.PVENTAIVA = NEW.PCOSTO * (1 + (NEW.GANANCIA / 100)) * :IVA;

si necesitas estos valores en el cliente. Tendras que refrescar la fila.

END

mosorio 21-08-2003 13:36:24

Hola SCORDOBA!

Gracias por las respuestas.


La franja horaria es GMT +2. Ahora son las 22:45: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