Fórum Alguem me dah uma mão com Trigger!! #197398
27/11/2003
0
Tem que fazer uma trigger que quando tu mecher na tabela produção, ele vai procurar na tabela ingredientes os ingredientes que vão na receito do produto a ser fabricado, a outra ele vai passar essa movimentação de baixa de ingredientes e aumento de produtos na tabela produtos e registrar na tabela movimentação do estoque.
Tabelas: Produto
Campos: Código do produto
Nome do produto
Categoria do produto
Saldo estoque
Unidade produto
Preço do produto
Tabela: Movimentação do estoque
Campos: Código do produto
Código do vendedor
Código do cliente
Data
Quantidade
Valor total
Tipo de movimento
Movimento do preço total
Fornecedor cliente
Tabela: Receita
Campos: Código da receita
Nome da receita
Rendimentos
Tabela: Ingredientes
Campos: Código da receita
Código do produto
Quantidade
Tabela: Produção
Campos: Data da produção
Código da receita
Receita quantidade
Tabelas: Produto
Campos: Código do produto
Nome do produto
Categoria do produto
Saldo estoque
Unidade produto
Preço do produto
Tabela: Movimentação do estoque
Campos: Código do produto
Código do vendedor
Código do cliente
Data
Quantidade
Valor total
Tipo de movimento
Movimento do preço total
Fornecedor cliente
Tabela: Receita
Campos: Código da receita
Nome da receita
Rendimentos
Tabela: Ingredientes
Campos: Código da receita
Código do produto
Quantidade
Tabela: Produção
Campos: Data da produção
Código da receita
Receita quantidade
Marciobrignol
Curtir tópico
+ 0
Responder
Posts
27/11/2003
Frcjf
Aí
vai alguns exemplos de como baixa, adicionar usando trigger de uma estudada.
Flávio Campos
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ´BI_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE INSERT POSITION 0
as
begin
/* Testar se o produto existe, caso contrário gero excessão */
Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;
Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);
end
^
CREATE TRIGGER ´AU_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE AFTER UPDATE POSITION 0
as
Declare variable iReg smallint;
begin
iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = old.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;
/* Antes da alteração somo o valor anterior em Produto */
Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;
iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = old.CodigoProduto)
and (Lote = old.Lote) into :iReg;
/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;
Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);
iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = New.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;
/* Depois de alterar somo o valor novo*/
Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;
iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = New.CodigoProduto)
and (Lote = new.Lote) into :iReg;
/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;
Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);
end
^
CREATE TRIGGER ´BD_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE DELETE POSITION 0
as
begin
Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;
Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);
end
^
COMMIT WORK ^
SET TERM ;^
vai alguns exemplos de como baixa, adicionar usando trigger de uma estudada.
Flávio Campos
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ´BI_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE INSERT POSITION 0
as
begin
/* Testar se o produto existe, caso contrário gero excessão */
Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;
Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);
end
^
CREATE TRIGGER ´AU_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE AFTER UPDATE POSITION 0
as
Declare variable iReg smallint;
begin
iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = old.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;
/* Antes da alteração somo o valor anterior em Produto */
Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;
iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = old.CodigoProduto)
and (Lote = old.Lote) into :iReg;
/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;
Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);
iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = New.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;
/* Depois de alterar somo o valor novo*/
Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;
iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = New.CodigoProduto)
and (Lote = new.Lote) into :iReg;
/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;
Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);
end
^
CREATE TRIGGER ´BD_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE DELETE POSITION 0
as
begin
Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;
Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);
end
^
COMMIT WORK ^
SET TERM ;^
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)