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)
-   -   problema con disparador FB (https://www.clubdelphi.com/foros/showthread.php?t=13009)

marrullas 03-08-2004 18:50:49

problema con disparador FB
 
Buenas, saludos a la comunidad
mi problema es el siguiente:
tengo un disparador "antes de insertar" en una tabla que debe hacer,

*selecionar otra tabla un valor relacionado con una dato por medio de un codigo de la tabla en la cual estoy insertado datos.
*despues dedo actualizar un valor de la tabla que seleccione haciendo una resta
Código:

CREATE TRIGGER TRIGGERCITO FOR TABLA1 ACTIVE
 BEFORE INSERT POSITION 10
 AS
          declare variable SALDO_ANTERIOR INTEGER;
 begin
 
 select TABLA2.SALDO from TABLA2 where TABLA2.CODIGO=new.CODIGO into :SALDO_ANTERIOR;
 
 update TABLA2 set SALDO =:SALDO-new.SALIDA where TABLA2.CODIGO=new.CODIGO;
 
 end

.

el problema es que la seleccion no me funciona con el dato new.CODIGO que pero si le pongo el dato explcitamente "001" si me funciona.
por aclarar me queda que he revisado y los datos existen. en un debuguer me sale new.CODIGO tiene el valor "001" pero no selecciona nada en cambio si pongo en ves de new.codigo el dato si me funciona.


de antemano les agradesco la ayuda que me puedan brindar :cool:

PD: antes lo he hecho y me ha funcionado

Carlos de Pablo 03-08-2004 22:41:59

Hola

Revise tu codigo y podrias corregir el error cambiando el BEFORE por AFTER para que una vez insertado el registro actualiza tambien la tabla relacionada.

CREATE TRIGGER TRIGGERCITO FOR TABLA1 ACTIVE
AFTER INSERT POSITION 0
AS
begin

update TABLA2 set SALDO = SALDO -new.SALIDA where TABLA2.CODIGO=new.CODIGO;

end

jachguate 03-08-2004 23:16:32

Cita:

Empezado por Carlos de Pablo
podrias corregir el error cambiando el BEFORE por AFTER

El código funcionaría exactamente igual en el before que en el after insert. Yo dejo regularmente las actualizaciones a otras tablas para el trigger after, para evitar trabajo innecesario en la BD en caso que el registro no cumpla con algún constraint o regla definida, pero eso es harina de otro costal.

Lo que se me ocurre es que pudieran haber varios triggers y el valor new.codigo se asigne después de la ejecución del que estamos tratando aqui.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 03:50:10.

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