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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-08-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Caso Trigger y orden de campos

Hola compañeros!

He detectado el siguiente caso curioso en Firbird, no se si es lo mismo en Interbase.
He creado una tabla con la siguiente estructura:
Cita:
ARTICULOPROVEEDOR
CREATE TABLE "ARTPROVEE"
(
"IDPROVEEDOR" INTEGER NOT NULL,
"IDARTICULO" VARCHAR(18) CHARACTER SET ISO8859_1 NOT NULL,
"EXISTENCIAS" INT64,
"PCOSTO" INT64,
"PVENTA" INT64,
"IDFAMILIA" INTEGER NOT NULL,
"IDTIPOIVA" INTEGER NOT NULL,
"DCTO" NUMERIC(9, 2),
"GANANCIA" INTEGER NOT NULL,
"PVENTAIVA" INT64 NOT NULL,
CONSTRAINT "PKARTPROVEE" PRIMARY KEY ("IDPROVEEDOR", "IDARTICULO")
);
Esta es la tabla correcta con el orden de los campos, pero si el orden de los campos es diferente en cuanto a GANANCIA, TIPOIVA, PCOSTE, es decir si ganancia esta después de pventa, no actualiza el dato o valor.

Y un trigger para cuando se efectue su actualización
Cita:
CREATE TRIGGER ACTUALIZA FOR ARTICULOPROVEEDOR AFTER UPDATE AS
BEGIN
SELECT 1 + (SUM(I.PJEIVA + I.PJERECEQ) /100)
FROM TIPOIVA I
WHERE I.IDTIPOIVA = NEW.IDTIPOIVA INTO :IVA;

IF (OLD.PCOSTO <> NEW.PCOSTO) THEN
BEGIN
UPDATE ARTICULOPROVEEDOR
SET PVENTA = (NEW.PCOSTO * (1 + (OLD.GANANCIA / 100))),
PVENTAIVA = NEW.PCOSTO * (1 + (OLD.GANANCIA / 100)) * :IVA
WHERE IDARTICULO = OLD.IDARTICULO AND
IDPROVEEDOR = OLD.IDPROVEEDOR;
END
END;
Quiero o mejor dicho si alguno de Uds. puede dar una explicación de esto, agradecería, ya que esta nueva tabla la he creado temporalmente para verificar lo sucedido y en efecto lo he encontrado, pero no encuentro explicación si el orden afecte, ya que las reglas matemáticas, una de ellas dice SUMA ó MULTI "El orden de los factores no afecta el producto", claro esta hablando de los factores que tengo y como se ven agrupados, ya que si alteramos las operaciones del porcentaje de ganancia sin los paréntesis dará otro valor.

Bueno espero que me aclaren esto, no solo ami sino a todos, ya que al hacer un procedure o un trigger donde se implemente alguna de estas operaciones.

PD: Espero que no me digan que por qué me complico que hay maneras más faciles; lo que necesito es aclarar esto ya que esta es la forma como quiero hacerlo y no implementarlo en el código del Front-End. Sin ofender a nadie, OK.

Gracias de antemano
Responder Con Cita
 



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:06:26.


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