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)
-   -   trigers (https://www.clubdelphi.com/foros/showthread.php?t=94258)

GINMARMENOR 23-10-2019 00:34:19

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.







[

ecfisa 23-10-2019 04:59:07

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 :)

Casimiro Noteví 23-10-2019 10:12:23

Cita:

Empezado por GINMARMENOR (Mensaje 534053)
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.

GINMARMENOR 26-10-2019 22:58:24

Gracias Ecfisa, funciona a la perfección a la primera, sois unos cracks.

Casimiro tienes razón.


Saludos.

GINMARMENOR 09-02-2020 23:13:18

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.

manelb 10-02-2020 07:48:57

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


La franja horaria es GMT +2. Ahora son las 02:19:46.

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