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)
-   -   Crear Trigger Interbase - Ayuda (https://www.clubdelphi.com/foros/showthread.php?t=50645)

BlueSteel 23-11-2007 19:59:45

Crear Trigger Interbase - Ayuda
 
Hola amigos...

tengo una consulta.. tengo el sgte trigger que funciona en SQL Server 2005, y lo quiero traspasar al Interbase 6... como nunca realicé triggers en Interbase (salvo el de generar autonumericos).. no conosco muy bien las sentencias y como se deben declarar..

podrian ayudarme a traspasar desde el SQL Server 2005 al Interbase 6

Código SQL [-]
ALTER TRIGGER [TRIGG_DFACTURA_IN] ON [dbo].[DFACTURA]
FOR INSERT
AS
begin
    Declare @Codigo Int
    Declare @Precio Float
    Select @Codigo = Pro_Codigo From Inserted
    Select @Precio = DFa_Precio From Inserted
 
   if ((Select Pro_Precio From Prodcuto Where Pro_Codigo=@Codigo) < @Precio) 
   Begin
         Update Producto Set Pro_Precio=@Precio
        Where Producto.Pro_Codigo = @Codigo
   End;
End


Lo que hace ese trigger es cuando se inserta un Item en la Tabla DFactura (Productos Vendidos en una Factura), que actualice el precio de la Tabla Producto, pero siempre que el Precio del Producto sea menor al que se esta vendiendo...

Como los productos (en el sistema que hice), lo manejan sin precio (una estupides --- pero no mia...:D), cuando ingresen el codigo del producto en la factura, quieren que aparesca el valor máximo.. y que ellos ahí realicen algun descuento al respecto....

espero que me hallan entendido... y gracias de antemano:D:p

jhonny 23-11-2007 20:35:29

Puedes crear lo que tienes en un procedimiento almacenado, asi:
Código SQL [-]
CREATE PROCEDURE SP_DFACTURA_IN (
    codigo integer,
    precio integer)
as
declare variable v_pro_precio double precision;
begin
  select Pro_precio from Producto where Pro_Codigo=:Codigo
  into :v_pro_precio;

  if (:v_pro_precio < :Precio) then
  Begin
    Update Producto Set Pro_Precio=:Precio
    Where Producto.Pro_Codigo = :Codigo;
  End
end

Y un Trigger en la tabla DFACTURA que ejecute dicho procedimiento, asi:

Código SQL [-]
CREATE trigger trigg_dfactura_in for dfactura
active after insert position 0
AS
begin
  execute procedure SP_DFACTURA_IN(Pro_Codigo, DFa_Precio);
end


Espero te sirva ;).

RONPABLO 23-11-2007 20:52:06

Depronto así también puede funcionar
Código SQL [-]
CREATE trigger trigg_dfactura_in for dfactura
active after insert position 0
AS
begin 
if ((Select Pro_Precio From Prodcuto Where Pro_Codigo = new.Pro_Codigo) < New.DFA_Precio)  then
   Begin
         Update Producto Set Pro_Precio=new.DFa_Precio
        Where Producto.Pro_Codigo = New.Pro_Codigo;
   End;
end

jhonny 23-11-2007 21:03:44

Cita:

Empezado por RONPABLO (Mensaje 248065)
Depronto así también puede funcionar

Sinceramente no creo que Interbase 6.0 admita el hecho de comparar el valor sin pasarlo a una variable, por lo que creo que existe mas probabilidad de que funcione el siguiente, aunque tampoco estoy muy seguro de que sea capaz de ejecutarlo:

Código SQL [-]
CREATE trigger trigg_dfactura_in for dfactura
active after insert position 0
AS
declare variable v_Pro_Precio double precision;
begin
  Select Pro_Precio From Producto Where Pro_Codigo = new.codigo
  into :v_pro_precio;

  if (:v_pro_precio < new.DFA_Precio) then
  begin
    update Producto Set Pro_Precio=new.DFa_Precio
    where Producto.Pro_Codigo = new.Pro_Codigo;
  end 
end

jhonny 23-11-2007 21:20:18

Bueno, creo que una opción mejor que la que propuse inicialmente sería la siguiente:
Código SQL [-]
CREATE trigger trigg_dfactura_in for dfactura
active after insert position 0
AS
begin
  update Producto Set Pro_Precio=new.DFa_Precio
  where Producto.Pro_Codigo = new.Pro_Codigo and Pro_Precio < new.DFa_Precio; /*Solo lo actauliza si el precio de la tabla producto es menor al insertado en la factura*/
end

Estuve pensandolo un poco y si lo que quieres es actualizar la tabla producto cuando dicho precio sea menor al que seleccionaron en la factura, pues... para eso es el sql :D.

RONPABLO 24-11-2007 04:43:55

y hablando de todo un poco.... Porque no trabaja mejor con FireBird en vez de InterBase 6... pues... no tiene que hacer migración, solo hacer backup desde InterBase y restablecer en Firebird y queda con una que otra nueva y mejor características

jhonny 27-11-2007 22:08:59

¿Al fin que sucedio con este problema, funciono alguna de las soluciones?


La franja horaria es GMT +2. Ahora son las 09:20:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi