Fórum Integridade Referencial (tratar exclusão de registros) #344201
07/08/2007
0
Tenho uma grande dúvida (para o meu nível de conhecimento). Estou efetuando o registro em banco através do uso de DATASET e consultas com IBQUERY, o banco de dados utilizado é o firebird 2.0, minha dúvida consiste em como devo tratar as exceções ao se tentar excluir um registro em uso por outra tabela (integridade referencial).
A regra de negócio
As tabelas com os registros não possuem um campo para definir o status A(ativo) e I(inativo), logo se este registro não estiver sendo utilizado por outra tabela e o usuário desejar efetuar a exclusão, o mesmo poderá ser excluído normalmente. Caso tenha sido gravado em outra tabela a exclusão deve ser negada e retornar uma mensagem do DELPHI informando a impossibilidade da operação (não poderá aparecer a mensagem em inglês do firebird).
Meu código de para exclusão do registro
Este é o código, observem que não está tratado para verificar problemas de integridade referencial pois é a minha dúvida.
if not DataModulo.IBDSFormPagto.IsEmpty then begin if Application.MessageBox(´Deseja Excluir o Registro?´, ´Excluir Registro´, MB_ICONQUESTION+MB_YESNO) = idyes then begin Datamodulo.IBDSFormPagto.Delete; DataModulo.IBTransacaoSCG.CommitRetaining; end; end else begin ShowMessage(´Não existe registros a serem excluidos ou não foi feita a seleção do registro!´); DBEFPagDesc.SetFocus; end;
Conto com a ajuda dos que puderem me ajudar.
Grato;
Cgomesnet
Curtir tópico
+ 0Posts
07/08/2007
Romulocpd
Utilizo ZEOSLIB no meu projeto e trato o erro pelo codigo mesmo. Fui causando os erros e verificando o ErrorNumber (nao lembro se émesmo este o nome da propriedade).
E no tratamento da excecao eu verifico o código do erro. No firebird é bem legal que a mensagem de erro é tipo assim:
Erro na foreign key FK_CLIENTE_PEDIDO on table PEDIDO.
No meu sistema eu tenho anotado todos nomes de tabelas e chaves e suas descrições. Dessa forma quando o usuario tenta excluir um produto por exemplo eu exibo a mensagem: ESTE PRODUTO NAO PODE SER EXCLUIDO POIS ESTA SENDO UTILIZADO NO MODULO: MOVIMENTACAO DE ESTOQUE. Pense nisso, em tratar as strings que vem do banco de dados. E no caso deste campo ATIVO que deseja trabalhar pode exibir a mensagem e fazer um simples UPDATE no registro.
Gostei + 0
07/08/2007
Cgomesnet
Olá Romulo
Você poderia explicar melhor esse ZEOS? Ele faz parte da biblioteca do Delphi 2007? É um componente de terceiros???
Eu tenho todas as minhas tabelas em um script sql que usei para criar o banco de dados, gostaria se possivel vc me indicar um tutorial para fazer uso da técnica/componente.
Aos demais colegas que conhecem outro meio pra fazer tratar erros de exceção, por favor postem, é muito importante pra mim.
Obrigado a todos.
Gostei + 0
07/08/2007
Romulocpd
O ZeosLib é um conjunto de componentes como o IBX ou DBExpress. Pesquise sobre ele no Google. Eu gosto do componente que além da total integração com o FireBird ele tem conexão para outros bancos como postgresql, mysql, sql server e outros. Realmente o componente é incrível.
Verifique sobre ele em www.zeoslib.net
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)