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 21-08-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 21-08-2003
Avatar de SCORDOBA
SCORDOBA SCORDOBA is offline
Miembro
 
Registrado: ago 2003
Ubicación: Llano de Brujas. Murcia
Posts: 37
Poder: 0
SCORDOBA Va por buen camino
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
__________________
Ven a Murcia y no solo pasaras calor.
Responder Con Cita
  #3  
Antiguo 21-08-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Hola SCORDOBA!

Gracias por las respuestas.
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


La franja horaria es GMT +2. Ahora son las 18:27:17.


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