[firebase-br] Re: Cantu, TRIGGER funciona!!!
Carlos H. Cantu
listas em warmboot.com.br
Seg Maio 16 09:59:01 -03 2005
Sugiro que nesse caso você faça a remoção dos registros em triggers
before_delete e deixe a regra de integridade sem o DeleteCascade.
[]s
Cantu
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br
E> Esses dias eu postei uma mensagem dizendo que as
E> trigger as vezes não era disparada, quando o registro
E> era disparado em cascata... Mas como o Cantu respondeu
E> realmente é disparada, e com o exemplo que eu coloquei
E> funciona perfeitamente (eu tentei simplificar o exemplo).
E> Deixa eu ver se consigo explicar o que eu fiz e não funcionou
E> (é um pouco grande).
E> Eu estava fazendo um controle de nota fiscal e entrega da
E> mercadoria... então eu tinha a table SAIDAS, SAIDAS_ITENS e
E> SAIDAS_ITENS_BAIXA.
E> Saidas
E> codigo (pk)
E> data
E> saidas_itens
E> codigo (pk)
E> codigo_saidas (fk)
E> codigo_item (fk)
E> quantidade
E> saidas_itens_baixas
E> codigo (pk)
E> codigo_saidas_itens (fk)
E> data
E> quantidade
E> Entendeu até aqui?
E> Então quando eu faço o lançamento na table Saidas_Itens não
E> da baixa no estoque, vai dar baixa somente quando lanço na
E> Saidas_Itens_Baixa. Então eu fiz:
E> TRIGGER after post table saidas_itens_baixas
E> /*Encontrando o codigo do item */
E> select saidas_itens.codigo_item
E> from saidas_itens
E> where saidas_itens.codigo = new.codigo_saidas_itens
E> into :va_codigo_item
E> update itens
E> set itens.estoque = itens.estoque - new.quantidade
E> where itens.codigo = :va_codigo_item
E> até ai blz... fiz tb outra TRIGGER
E> before delete table saidas_itens_baixas
E> /*Encontrando o codigo do item */
E> select saidas_itens.codigo_item
E> from saidas_itens
E> where saidas_itens.codigo = old.codigo_saidas_itens
E> into :va_codigo_item
E> update itens
E> set itens.estoque = itens.estoque + old.quantidade
E> where itens.codigo = :va_codigo_item
E> Agora vem a questão, se eu deletar o registro da table
E> Saidas_Itens_Baixas então volta para o estoque blz...
E> Agora quando é deletada a table Saidas_Itens em cascata
E> a Saidas_Itens_Baixas é deletada, mas vem o problema...
E> a TRIGGER before delete da table Saidas_Itens_Baixas é
E> ativada.
E> /*Encontrando o codigo do item */
E> select saidas_itens.codigo_item
E> from saidas_itens
E> where saidas_itens.codigo = old.codigo_saidas_itens
E> into :va_codigo_item
E> /* nesse momento a :va_codigo_item vai estar null, então o
E> update abaixo não vai funcionar... */
E> update itens
E> set itens.estoque = itens.estoque + old.quantidade
E> where itens.codigo = :va_codigo_item
E> Ai eu pergunto Cantú, o firebird deleta primeiro os registros
E> do Pai para depois apagar os arquivos filhos? E se apaga os Pai
E> Primeiro como irá saber quais os filhos se já apagou os filhos?
E> E o FireBird sabe então o select não deveria funcionar?
E> Agradecido.
E> Eliomar,
E> ICQ - 167715482
E> MSN - eliomar0910 em hotmail.com
E> Soft-Data Softwares Administrativos
E> hptt://www.promediconet.com.br
Mais detalhes sobre a lista de discussão lista