Tratamento de exclusão de registro em uma tabela relacionada
Boa tarde
Como poderia fazer o tratamento de registro em uma tabela relacionada... Tipo: no cadastro de frota eu tenho a placa MGQ 9491 cadastrado por exemplo...Em manutenção de frota eu tenho a movimentação dessa placa..
Então não posso deletar do cadastro essa placa porque tenho uma movimentação para a mesma..
No banco de dados, na tabela MANFRO (Manutenção de frota) tenho a chave estrangeira da placa que é chave primária no cadastro de frota....(Ambas estão relacionadas.) Como poderia fazer um tratamento para naõ deixar excluir ???? A princípio pensei em criar uma função para fazer um select na tabela de MANFRO para verificar se essa placa existe.. (SIMPLES). Mas o campo está relacionado com outras tabelas também....
Como poderia fazer ????
Trabalho com Delphi 2010 + dbx + firebird 2.1
Fico no aguardo
Rogério
Rogerio Santos
Curtidas 0
Respostas
Timuio
08/02/2011
Cria a função como pensou e coloque no BeforeDelete de seu Dataset
Ex:
Função RegRefenrenciado: Boolean;beginDataset.Sql.Add(' SELECT 1 AS RESULTFROM RDB$DATABASEWHERE EXISTS ( SELECT 1 FROM MANFRO WHERE ( IdPlaca = 'MGQ 9491' ) ) ')if not ( Dataset.IsEmpty ) then result :=true;end;
if RegReferenciado thenbegin MessageDlg( 'Você não pode excluir este Registro pois existem referências !', mtinformation, [mbok], 0 ); abort;end;GOSTEI 0
Silvio Caetano
08/02/2011
Se você não configurou a sua chave para OnDelete CASCADE, o próprio banco lança uma excessão.
Aí é só você tratá-la com Try... Except e mandar uma mensagem para o usuário.
Se não quiser fazer assim, a sua opção é bastante válida.
Aí é só você tratá-la com Try... Except e mandar uma mensagem para o usuário.
Se não quiser fazer assim, a sua opção é bastante válida.
GOSTEI 0
Marco Salles
08/02/2011
vc esta usando o NestedDataSet ??? Ai tem maneiras mais fácil
GOSTEI 0
Rogerio Santos
08/02/2011
Ok, eu vi o seu código, mas se o campo placa está relacionado com mais de uma tabela ???
Não estou usando o NestedDataset
Rogério
GOSTEI 0
José
08/02/2011
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0