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-10-2019
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
trigers

Hola de nuevo,

Queria hacer mi primer Triggers dentro IbExpert, he visto muchos ejemplos pero a veces la nomenclatura ó sintaxis es distinta, y no llego a aclararme, por que lo hago y me da error, lo que quiero hacer es bien sencillo dispongo de una tabla llamada PedidosAmpliacion donde hay un campo llamado partidas ninguna repetida y otro campo llamado BandejasDisponibles cada partida tiene un número de BandejasDisponibles y por otro lado tengo otra tabla llamada albaranes donde voy vendiendo poco a poco bandejas de cada una de las partidas de la tabla PedidosAmpliacion.

Al hacer el albarán pongo la partida y las bandejas que vendo de la TablaPedidosAmpliacion.

Con lo cual esa cantidad que vendo quiero que se me reste de las Bandejas Disponibles de cada partida que vendo. y saber así las BandejasDisponibles que me quedan de cada partida en la tabla PedidosAmpliacion.

He creado en IbExpert un trigger llamado Albaranes_AI0 que se ejecutaria después de Insertar de la Tabla Albaranes con la siguiente sintaxis pero da error en la línea del END:
Código Delphi [-]

AS
begin
  /* Trigger text */
  update pedidosampliacion set pedidosampliacion.bandisponible=pedidosampliacion.bandisponible-albaranes.bandejas
  where albaranes.partida=pedidosampliacion.partida

end

Sé que debe ser muy sencillo, pero la sintaxis es muy variada en los distintos ejemplos que he visto en internet y ninguno ha funcionado y como último recurso recurro a vosotros que siempre dais solución a todo, gracias.







[
Responder Con Cita
  #2  
Antiguo 23-10-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Fijate si de este modo hace lo que buscas:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER TRIGGER ALBARANES_A10 FOR ALBARANES
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  UPDATE PEDIDOSAMPLIACION PA
  SET PA.BANDISPONIBLE = COALESCE(PA.BANDISPONIBLE - NEW.BANDEJAS, 0)
  WHERE PA.PARTIDA = NEW.PARTIDA;
END^

SET TERM ; ^

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 23-10-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por GINMARMENOR Ver Mensaje
Hola de nuevo,[
Sigue la respuesta de ecfisa, sabe de lo que habla.
Y para otra ocasión no olvides poner títulos descriptivos, "trigers" no describe el problema que quieres resolver. Recuerda nuestra guia de estilo. Saludos.
Responder Con Cita
  #4  
Antiguo 26-10-2019
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Gracias Ecfisa, funciona a la perfección a la primera, sois unos cracks.

Casimiro tienes razón.


Saludos.
Responder Con Cita
  #5  
Antiguo 09-02-2020
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
triger delete y update

Hola utilizo este mismo hilo pra que siguierais el historial, he estado un tiempo inoperativo el Trigger de insertar me funciona a la perfeccon estoy intentando hacer los mismo con Triggers delete y otro Trigers Update, cuando borro un registro o lo modifico pero no consigo dar con la sintaxis cuando quero borrar un registro.


Así al borrar ALBARANDETALLE quiero que las bandejas que había vendido por error en una partida, se vuelvan a sumar al campo BANDEJAS DISPONIBLES y quede la partida como antes de hacer el albarán, intento hacer esto con un Triger 'AFTER - DELETE' llamado ALBARANDETALLE_AD0



Código SQL [-]
CREATE trigger albarandetalle_ad0 for albarandetalle
active after delete position 0
AS
begin
  /* Trigger text */
  UPDATE PEDIDOSAMPLIACION PA
  SET PA.BANDISPONIBLE = COALESCE(PA.BANDISPONIBLE + NEW.BANDEJAS, 0)
  WHERE PA.PARTIDA = NEW.PARTIDA;
end


Pero da error, he buscado en internet pero la SINTAXIS es distinta, debe ser algo sencillo pero no consigo que funcione.
Responder Con Cita
  #6  
Antiguo 10-02-2020
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 281
Poder: 8
manelb Va por buen camino
El problema lo debes tener en que en un trigger AfterDelete no puedes utilizar la "pseudo" variable NEW, igual que en un BeforeInsert no puedes utilizar el OLD.
Prueba con OLD.BANDEJAS i OLD.PARTIDA.

Entendiendo a los triggers
Cita:
NEW nos indica el valor que tiene una columna antes de ser insertada en la tabla.

OLD nos indica el valor que tiene actualmente la columna en la tabla. O sea el valor que está grabado en ella.

NEW y OLD son muy útiles para comparar el valor que queremos introducir en una columna con el valor que ya está guardado en esa columna.
Saludos
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
Registro desaparecen en Firebird con Trigers rogeriobeltran Firebird e Interbase 8 05-10-2007 18:48:13


La franja horaria es GMT +2. Ahora son las 09:51:45.


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