Ajuda co nm Trigger

Firebird

23/03/2006

Gostaria de fazer uma trigger , que quando a tabela DISCRICAO , for gravada bo Banco de dados , o Valor do Saldo de um produto em outra Tabela < PRODUTO > Seje atualizado

To fazendo assim no IBEXPERT , mas confesso que sou fraquinho para isto

CREATE TRIGGER DESCRICAO_AI0 FOR DESCRICAO
ACTIVE AFTER INSERT POSITION 0
AS
begin
update 
  produto
set
    Produto.saldo=Produto.saldo -  :qtdevenda;
where 
  Produto.cod_produto= :icodProduto;
  /* Trigger text */
end


Ta tudo errado , pois como eu disse antes sou fraquinho para isto... :cry:

A Tabela produto tem os Campos: Cod_Produto Saldo A Tabela DESCRICAO tem os campos: Cod_Produto Quantidade


Assim ao Gravar Produto = 1 Qutantidade = 5 , automaticamente no D a se a baixa no estoque da Tabela PRODUTOS...

Muito obrigado


Marco Salles

Marco Salles

Curtidas 0

Respostas

Marco Salles

Marco Salles

23/03/2006

moloe mole mole

Não sei se a tecnica esta errada , mas fiz e assim e funfa


CREATE TRIGGER DESCRICAO_AI0 FOR DESCRICAO
ACTIVE AFTER INSERT POSITION 0
AS
begin
update produto set
PRODUTO.saldo= PRODUTO.saldo - DESCRICAO.quantidade
where
PRODUTO.cod_produto=DESCRICAO.cod_produto;
  /* Trigger text */
end



GOSTEI 0
Sremulador

Sremulador

23/03/2006

Assim Tb

CREATE TRIGGER DESCRICAO_AI0 FOR DESCRICAO
ACTIVE AFTER INSERT POSITION 0
AS
begin
update produto set
saldo=saldo - new.quantidade
where
cod_produto=new.cod_produto;
end


GOSTEI 0
Marco Salles

Marco Salles

23/03/2006

Assim Tb CREATE TRIGGER DESCRICAO_AI0 FOR DESCRICAO ACTIVE AFTER INSERT POSITION 0 AS begin update produto set saldo=saldo - new.quantidade where cod_produto=new.cod_produto; end


[b:58b79d558f]mas quem é este new.quantidade ??? com o banco ira reconhecer este valor ????[/b:58b79d558f]

Este saldo que voce esta se referindo é o saldo do campo da tabela Produto ???
Não precisa colocar Produto.Saldo nas istruçoes ???
É com se fosse o With do delphi :::


GOSTEI 0
Edilcimar

Edilcimar

23/03/2006

o new em sgdb é o novo registro do campo em questão


GOSTEI 0
Martins

Martins

23/03/2006

[quote:b79db9db38=´Marco Salles´]
Assim Tb CREATE TRIGGER DESCRICAO_AI0 FOR DESCRICAO ACTIVE AFTER INSERT POSITION 0 AS begin update produto set saldo=saldo - new.quantidade where cod_produto=new.cod_produto; end


[b:b79db9db38]mas quem é este new.quantidade ??? com o banco ira reconhecer este valor ????[/b:b79db9db38]

Este saldo que voce esta se referindo é o saldo do campo da tabela Produto ???
Não precisa colocar Produto.Saldo nas istruçoes ???
É com se fosse o With do delphi :::[/quote:b79db9db38]

[b:b79db9db38]Marco[/b:b79db9db38], tanto a palavra [b:b79db9db38]New[/b:b79db9db38] quanto [b:b79db9db38]Old[/b:b79db9db38] são variáveis.

[b:b79db9db38]Leia os trechos:[/b:b79db9db38]

Cria uma Trigger “Gatilho” para a tabela especificada. Trigger é um gatilho disparado após alguma ação ocorrida na tabela, isto é, podem existir Trigger de Insert, Update e Delete. As Trigger pode ser definidas como “Before-Antes” e “After-Depois”. Também pode ser definido um número onde indica qual a seqüência de tirareis a ser seguida. A Trigger só é disparada pela ação na tabela, não podendo ser disparada pela aplicação. Dentro da Trigger há duas formas de se referenciar as colunas das tabelas : [color=green:b79db9db38][b:b79db9db38]OLD[/b:b79db9db38][/color:b79db9db38].Coluna e [color=green:b79db9db38][b:b79db9db38]NEW[/b:b79db9db38][/color:b79db9db38].Coluna. Onde [b:b79db9db38]OLD[/b:b79db9db38]. referencia o valor anterior da coluna e [b:b79db9db38]NEW[/b:b79db9db38]. referencia o novo valor da coluna.


CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE ACTIVE AFTER UPDATE POSITION 0 AS BEGIN IF (old.salary <> new.salary) THEN INSERT INTO salary_history (emp_no, change_date, updater_id, old_salary, percent_change) VALUES ( old.emp_no, ´NOW´, user, old.salary, (new.salary - old.salary) * 100 / old.salary); END


No exemplo de trigger acima você pode ver nomes de campos precedidos das palavras “OLD” e “NEW”. No corpo de uma trigger o Firebird deixa disponíveis tanto o valor antigo como o novo valor de qualquer coluna, por exemplo old.salary e new.salary. Usando os valores OLD e NEW você pode facilmente criar registros de histórico, calcular o percentualde alteração de um valor numérico, encontrar em outras tabelas registros que combinem com o valor antigo ou novo de um campo ou fazer qualquer outra coisa que você precise fazer.


Boa sorte e manda ver na SQL.


GOSTEI 0
POSTAR