Fórum Atualizar tabela através de tigger #54553
04/01/2006
0
Olá a todos
Tenho 2 tabelas, sendo que uma é Produtos a outra Movimento_Produtos.
Como posso fazer um trigger para atualizar a QTDE na tabela Produtos, cfe o valor digitado no Saldo da tabela Movimento_Produtos? Já fiz um insert e delete. Falta fazer um UPDATE, para quando o usuário só modificar o valor digitado. Seria + ou - assim:
CREATE TRIGGER NOME_TRIGGER FOR Movimento_Produtos
ACTIVE AFTER UPDATE POSITION 1
AS
BEGIN
IF (NEW.Saldo > OLD.Saldo ) THEN
begin
Update Produtos set Qtde= Qtde + (NEW.Saldo - OLD.Saldo)
where Produtos.CODIGO=Movimento_Produtos.CODIGO
end
else
begin
IF (NEW.Saldo < OLD.Saldo ) THEN
begin
Update Produtos set Qtde= Qtde - (OLD.Saldo - NEW.Saldo)
where Produtos.CODIGO=Movimento_Produtos.CODIGO
end;
end;
END
Podem me ajudar? :wink:
Tenho 2 tabelas, sendo que uma é Produtos a outra Movimento_Produtos.
Como posso fazer um trigger para atualizar a QTDE na tabela Produtos, cfe o valor digitado no Saldo da tabela Movimento_Produtos? Já fiz um insert e delete. Falta fazer um UPDATE, para quando o usuário só modificar o valor digitado. Seria + ou - assim:
CREATE TRIGGER NOME_TRIGGER FOR Movimento_Produtos
ACTIVE AFTER UPDATE POSITION 1
AS
BEGIN
IF (NEW.Saldo > OLD.Saldo ) THEN
begin
Update Produtos set Qtde= Qtde + (NEW.Saldo - OLD.Saldo)
where Produtos.CODIGO=Movimento_Produtos.CODIGO
end
else
begin
IF (NEW.Saldo < OLD.Saldo ) THEN
begin
Update Produtos set Qtde= Qtde - (OLD.Saldo - NEW.Saldo)
where Produtos.CODIGO=Movimento_Produtos.CODIGO
end;
end;
END
Podem me ajudar? :wink:
Ivonei
Curtir tópico
+ 0
Responder
Posts
05/01/2006
Afarias
set term ^ CREATE TRIGGER NOME_TRIGGER FOR Movimento_Produtos AFTER UPDATE POSITION AS BEGIN update produtos set qtde = qtde - old.saldo + new.saldo where codigo = new.codigo; END;
T+
Responder
Gostei + 0
06/01/2006
Ivonei
Muito Obrigado pela atenção, mas eu já havia resolvido.
Desculpem por não avisar. :lol:
Não sei se é o melhor método, mas tá aí embaixo para quem puder entender:
Desculpem por não avisar. :lol:
Não sei se é o melhor método, mas tá aí embaixo para quem puder entender:
AS DECLARE VARIABLE NOME VARCHAR(40); DECLARE VARIABLE SALDOOLD DOUBLE PRECISION; DECLARE VARIABLE SALDO DOUBLE PRECISION; DECLARE VARIABLE TOTAL DOUBLE PRECISION; begin if (new.codnfm <> old.codnfm) then begin update ESAPRO SET QTDPRO = QTDPRO - old.QTDNFM where CODPRO = old.CODNFM; Select qtdpro from esapro where CODPRO = old.CODNFM INTO :SALDOOLD; insert into ESAHIP (CLIHIP, CODHIP, DIGHIP, DATHIP, OPEHIP, TOPHIP, DOCHIP, QTDHIP, SALHIP, NOMHIP, SERHIP) values (ESANFM.FORNFM, old.CODNFM, old.DIGNFM, ´NOW´, ´COM´, ´EC´, ESANFM.NUMNFM, OLD.QTDNFM, :SALDOOLD, ´TROCA DE COD PROD NA NF ENTRADA´, ESANFM.SERNFM); update ESAPRO SET QTDPRO = QTDPRO + new.QTDNFM where CODPRO = new.CODNFM; Select qtdpro from esapro where CODPRO = new.CODNFM INTO :SALDO; Select NOMCLI FROM ESACLI where CODCLI = ESANFM.FORNFM INTO :NOME; insert into ESAHIP (CLIHIP, CODHIP, DIGHIP, DATHIP, OPEHIP, TOPHIP, DOCHIP, QTDHIP, SALHIP, NOMHIP, SERHIP) values (ESANFM.FORNFM, new.CODNFM, new.DIGNFM, ´NOW´, ´COM´, ´EA´, ESANFM.NUMNFM, NEW.QTDNFM, :SALDO, :NOME, ESANFM.SERNFM); end else begin if (OLD.qtdnfm <> NEW.qtdnfm) then begin if (OLD.qtdnfm < NEW.qtdnfm) then begin TOTAL= NEW.qtdnfm - OLD.qtdnfm; update ESAPRO SET QTDPRO = QTDPRO + :TOTAL where CODPRO = ESANFM.CODNFM; Select qtdpro from esapro where CODPRO = ESANFM.CODNFM INTO :SALDO; insert into ESAHIP (CLIHIP, CODHIP, DIGHIP, DATHIP, OPEHIP, TOPHIP, DOCHIP, QTDHIP, SALHIP, NOMHIP, SERHIP) values (ESANFM.FORNFM, ESANFM.CODNFM, ESANFM.DIGNFM, ´NOW´, ´COM´, ´EA´, ESANFM.NUMNFM, :TOTAL, :SALDO, ´ACRESCIMO DA QTDE DO PROD DA NF ENTRADA´, ESANFM.SERNFM); end else begin TOTAL= OLD.qtdnfm - NEW.qtdnfm; update ESAPRO SET QTDPRO = QTDPRO - :TOTAL where CODPRO = ESANFM.CODNFM; Select qtdpro from esapro where CODPRO = ESANFM.CODNFM INTO :SALDO; insert into ESAHIP (CLIHIP, CODHIP, DIGHIP, DATHIP, OPEHIP, TOPHIP, DOCHIP, QTDHIP, SALHIP, NOMHIP, SERHIP) values (ESANFM.FORNFM, ESANFM.CODNFM, ESANFM.DIGNFM, ´NOW´, ´COM´, ´EA´, ESANFM.NUMNFM, :TOTAL, :SALDO, ´REDUÇAO NA QTDE DO PROD DA NF ENTRADA´, ESANFM.SERNFM); end end end end
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)