Fórum Tratamento de exclusão #327444

14/08/2006

0

Pessoal !!!

Preciso de uma dica de alguém que possa me ajudar..
Como poderia fazer o tratamento de exclusão quando é excluído um registro da tabela mestre sendo que tem relacionamento com a tabela detalhe. Na tabela detalhe tem um FK que relaciona com a tabela mestre pelo PK. Ex: Tenho o cadastro de regiões e cidades, então a tabela de regiao e mestre e a tabela de cidade é detalhe tenho que fazer um tratamento indicando que tem registros na tabela detalhe, impedindo a exclusão. Será que devo usar o evento onreconcilierros do ClientDataset ??

Estou usando o Delphi 7 + Interbase 6.0 + conexão dbexpress

Aguardo retorno

Rogério


Rogeranalista

Rogeranalista

Responder

Posts

15/08/2006

Marco Salles

Será que devo usar o evento onreconcilierros do ClientDataset ??


é uma opção... Mas acho que outros fatores devam ser levados em conta... Qaundo voce criou esse relacionamentos , qual a opção que voce escolheu para [b:8ea6ba3f56]Delete Rule[/b:8ea6ba3f56]... ?????

Se for [b:8ea6ba3f56]CASCADE[/b:8ea6ba3f56] < procure aqui mesmo no forum> a eliminação do registro Mestre automaticamente eliminara os escravos e neste caso nenhum exceção sera lançada

O Padrão Para Delete Rule e [b:8ea6ba3f56]NO ACTION[/b:8ea6ba3f56]... -->> Nesse caso uma exceção sera lançada e não sera possivel a elimação do Registro Mestre

:idea: :idea: :idea:
porem voce disse que esta usando DbExpress e portanto acredito que clientDataSet..

Quando voce elimina , com o cds trabalha com Buffer , aparentemente nada ocorrera.. Somente na hora que voce der um ApplyUpdates é que
a exceção sera lançada e voce podera tratar no evento ReconcileError

Tipo Isto:

if pos(´violation of FOREIGN KEY constraint´,e.Message) > 0 Then
 showmessage(´neca de catibiriba´)


esta mensagem [b:8ea6ba3f56]´violation of FOREIGN KEY constraint´ [/b:8ea6ba3f56], escrita dessa maneira é para o firebird , eu não sei , qual a mensagem é para o Interbase 6.0 .. Mas isto voce mesmo pode descobrir fazendo Um
Showmessage(e.message) no evento ReconcileError

Outro ponto que deve ser destaque é que a mensagem de informação , tem mais destaque exceutando a aplicação via executável e não pelo delphi (F9) a não ser que voce desabilite algumas opçoes da IDE. em outras palavras , [b:8ea6ba3f56]para testar use o executável[/b:8ea6ba3f56]

espero que tenha lhe ajudaddo.


Responder

Gostei + 0

15/08/2006

Rogeranalista

Colega, obrigado por responder...

Quando ao relacionamento usei a script normal para criar a fk e no final coloquei update cascade

Ex:
ALTER TABLE ´ENDERECO_COBRANCA´ ADD CONSTRAINT ´FKENDCOBBAIRROCDBAIRRO´ FOREIGN KEY (´CODBAI_END_COBRANCA´) REFERENCES BAIRRO (´COD_BAIRRO´) ON UPDATE CASCADE;

Rogério


Responder

Gostei + 0

16/08/2006

Marco Salles

Quando ao relacionamento usei a script normal para criar a fk e no final coloquei update cascade

então delete este relacionamento e façao outro usando NO ACTION no Lugar de CASCADE..

mas mesmo com CASCADE , voce pode impedir que registos da TABELA MÃE sejam excluidos... so que nesse caso , é a aplicação que controlaria isto , e não mais o BANCO..

por exemplo no evento beforeDelete do DataSet voce deveria ´pesquisar´ se existe algum registro na tabelaFilha caso afirmativo gere uma exceção , e caso negativo prosiga com a exclusão


Responder

Gostei + 0

16/08/2006

Marco Salles

Quando ao relacionamento usei a script normal para criar a fk e no final coloquei update cascade


então delete este relacionamento e façao outro usando NO ACTION no Lugar de CASCADE..

[b:23c4e77263]mas [/b:23c4e77263]mesmo com CASCADE , :arrow: voce pode impedir que registos da TABELA MÃE sejam excluidos... so que nesse caso , é a aplicação que controlaria isto , e não mais o BANCO..

por exemplo no evento beforeDelete do DataSet voce deveria ´pesquisar´ se existe algum registro na tabelaFilha caso afirmativo gere uma exceção , e caso negativo prossiga com a exclusão


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar