Integridade Referencial (tratar exclusão de registros)

Delphi

07/08/2007

Olá amigos
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

Cgomesnet

Curtidas 0

Respostas

Romulocpd

Romulocpd

07/08/2007

Olá,

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
Cgomesnet

Cgomesnet

07/08/2007

Olá, 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.


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
Romulocpd

Romulocpd

07/08/2007

Olá,

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
POSTAR