[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