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 23-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Question 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...), 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
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-11-2007 a las 20:38:57.
Responder Con Cita
  #3  
Antiguo 23-11-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
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
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"

Última edición por RONPABLO fecha: 23-11-2007 a las 20:55:03.
Responder Con Cita
  #4  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por RONPABLO Ver Mensaje
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
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-11-2007 a las 21:38:18.
Responder Con Cita
  #6  
Antiguo 24-11-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
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
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #7  
Antiguo 27-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
¿Al fin que sucedio con este problema, funciono alguna de las soluciones?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Trigger y llamarlo desde Delphi BlueSteel Conexión con bases de datos 2 26-07-2005 20:53:47
Trigger en interbase afarenas Firebird e Interbase 2 04-12-2004 15:35:04
Ayuda con TRIGGER Programer Oracle 1 22-03-2004 05:45:16
Crear Trigger NickName Firebird e Interbase 2 02-07-2003 19:51:30
Trigger ... error al crear Tomás Firebird e Interbase 6 06-05-2003 21:00:56


La franja horaria es GMT +2. Ahora son las 00:22:05.


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