Stored procedure para atualizar outra tabela
Ola amigos. Venho aqui pedir mais uma vez sua ajuda.
bom é assim. tenho meu banco em interbase e utilizo para conexao componentes da palheta dbexpress.
Meu sistema é para controle de estoque de peças.
Tenho 2 tabelas. a primeira serve para mim cadastrar as peças.
a segunda é onde eu registro os movimentos de entrada ou saída, informando o codigo da peca e quantidade.
Quero que quando eu fizer um lançamento de entrada de peças, atualize o estoque desta determinada peça na outra tabela. e quando eu fizer um lançamento de saída de peças, atualize os estoque subtraindo a quantidade que foi dada baixa.
Qualquer duvida por favor podem perguntar. Obrigado a todos.
bom é assim. tenho meu banco em interbase e utilizo para conexao componentes da palheta dbexpress.
Meu sistema é para controle de estoque de peças.
Tenho 2 tabelas. a primeira serve para mim cadastrar as peças.
a segunda é onde eu registro os movimentos de entrada ou saída, informando o codigo da peca e quantidade.
Quero que quando eu fizer um lançamento de entrada de peças, atualize o estoque desta determinada peça na outra tabela. e quando eu fizer um lançamento de saída de peças, atualize os estoque subtraindo a quantidade que foi dada baixa.
Qualquer duvida por favor podem perguntar. Obrigado a todos.
Wagsilvasilva
Curtidas 0
Melhor post
Emerson Nascimento
05/12/2005
eis uma sugestão:
uma forma de executá-la seria através de triggers:
como você não informou nada sobre a estrutura das suas tabelas, eu utilizei:
pecas -> cadastro de pecas, que contém o saldo em estoque no campo SALDO, tendo como referência ao produto o campo ID_Produto
movimento -> onde constam os lançamentos no estoque, também com referência ao produto pelo campo ID_Produto e tendo ainda o campo Quantidade, onde consta a quantidade movimentada e o campo TIPO, onde é informado o tipo de movimento (´E´ para entrada ou ´S´ para saída).
create procedure atualiza_estoque ( id_produto integer, tipo_mov char(1), quantidade numeric(10,2)) returns ( movimento_ok boolean) as begin if tipo_mov = ´E´ then update pecas set saldo = saldo + :quantidade where id_produto = :id_produto else update pecas set saldo = saldo - :quantidade where id_produto = :id_produto; if (rows_affected = 0) then movimento_ok = false else movimento_ok = true; suspend; end
uma forma de executá-la seria através de triggers:
create trigger tgINCLUI_MOVIMENTO for movimento active after insert position 0 as begin atualiza_estoque( new.id_produto, new.tipo, new.quantidade ); end
create trigger tgEXCLUI_MOVIMENTO for movimento active after delete position 0 as begin if old.tipo = ´E´ then atualiza_estoque( old.id_produto, ´S´, old.quantidade ) else atualiza_estoque( old.id_produto, ´E´, old.quantidade ); end
como você não informou nada sobre a estrutura das suas tabelas, eu utilizei:
pecas -> cadastro de pecas, que contém o saldo em estoque no campo SALDO, tendo como referência ao produto o campo ID_Produto
movimento -> onde constam os lançamentos no estoque, também com referência ao produto pelo campo ID_Produto e tendo ainda o campo Quantidade, onde consta a quantidade movimentada e o campo TIPO, onde é informado o tipo de movimento (´E´ para entrada ou ´S´ para saída).
GOSTEI 2
Mais Respostas
Hermeson Gonçalves
05/12/2005
boa noite. Gostei do seu exemplo. Gostaria de saber se esses comandos são para firebird ou que banco? pq estou tentando fazer pelo FB mas está dando erro.
GOSTEI 0
Emerson Nascimento
05/12/2005
Hermeson, o exemplo é para FB, sim. Na época creio que era FB 1.5.
Publique o erro que está sendo apresentado para podermos ajudar na solução.
Aquela forma é prática, porque não é preciso preocupação com a atualização do saldo: basta incluir a movimentação que o próprio banco de dados faz o resto.
Publique o erro que está sendo apresentado para podermos ajudar na solução.
Aquela forma é prática, porque não é preciso preocupação com a atualização do saldo: basta incluir a movimentação que o próprio banco de dados faz o resto.
GOSTEI 1
Hermeson Gonçalves
05/12/2005
Obrigado Emerson pela rápida resposta. Você tem algum tutorial para gerar as SP e Triggers? Por exemplo, uma vez criadas, onde eu implemento no Delphi? ou simplesmente o banco faz isso só? Sou um desenvolver intermediário, mas nessa parte de Banco, comecei a estudar a pouco tempo, especialmente essas regras. Obrigado mais uma vez.
GOSTEI 0
Emerson Nascimento
05/12/2005
Da forma como está apresentado na resposta, basta incluir o registro de movimentação (entrada ou saída) e o banco de dados faz a atualização do saldo automaticamente.
Você também pode chamar a procedure "atualiza_estoque()" manualmente, no momento em que achar conveniente.
Infelizmente não tenho qualquer tutorial, mas você encontra com facilidade na internet. caso não encontro algo específico para sua necessidade, pergunte aqui no fórum. temos muitos colegas solidários que irão ajudar.
Você também pode chamar a procedure "atualiza_estoque()" manualmente, no momento em que achar conveniente.
Infelizmente não tenho qualquer tutorial, mas você encontra com facilidade na internet. caso não encontro algo específico para sua necessidade, pergunte aqui no fórum. temos muitos colegas solidários que irão ajudar.
GOSTEI 1