GARANTIR DESCONTO

Fórum Tratamento de mensagem de exclusão de registro com FK #58852

13/09/2007

0

Prezados colegas

estou com uma dúvida na hora de excluir um registro do qual existe uma referência por chave estrangeira em outra tabela. . Na verdade, a dúvida é no tratamento da mensagem de erro ..
Antes:

Uso para trabalhar com dbexpress:
1- SQLConexion;
2- SQLDataSet;
3- DataSetProvider;
4- ClienteDataSet;
5- DataSource;

tenho uma tabela de alunos e outra de matrícula q tem a foreign key id_alu para a tabela de aluno .. não deixa excluir o aluno se tiver matriculado ... Pois bem, o problema é q qdo o usuário tenta excluir esse aluno, dá uma mensagem de ferência a chave estrangeira... Qdo usava IbTables, dentro do try/except eu testava e dizia a mesagem q eu quisesse só com o application.messagebox .. agora não consigo mais... aguem tem alguma dica de como tratar esse erro ..

Toda vez que o usuário clicar para excluir o aluno, e esse aluno já estiver matriculado em um curso, queria a meneira correta para tratar essa situação!!


Cmtbravo

Cmtbravo

Responder

Posts

16/09/2007

Sremulador

Amigo estude o código, e adapete para os erros

Procedure TrataErroClient( E: EIBClientError );
Var
   SqlError: Integer;
   SQLMsg: String;
Begin
   SqlError := E.SQLCode;
   SQLMsg := ´´;
   Case SQLError Of
      16: SQLMsg := ´Voce não Tem permissão para realizar esta Operação.´;
    -206: SQLMsg := ´Coluna desconhecida para tabela.´;

   End;
   If SQLMsg <> ´´ Then
      ErroMsg:= Inttostr(SqlError) + ´ - ´ + SQLMsg;
end;


Procedure ErrorMsg(Sender: TObject; E: exception);
Begin
   If ( E Is EIBClientError ) Then
      TrataErroClient( E As EIBClientError )
       Else If ( E Is EIBInterBaseError ) Then
        TrataErro( E As EIBInterBaseError );

   ErroMsg:= e.Message;
End;



Procedure TrataErro( E: EIBInterBaseError );
Var
   SqlError: Integer;
   SqlMsg: String;
Begin
//   SqlMsg := ´Erro desconhecido´;
   SqlError := E.SQLCode;
   Case SQLError Of
          4 : SQLMsg := ´Tentativa de conversão de dados incorreta´;
       -104 : SQLMsg := ´Erro ao tentar passar comandos ao SQL´;
       -206 : SQLMsg := ´Coluna desconhecida para tabela.´;
       -913 : SQLMsg := ´Transação será revertida. Registro em Uso na Rede´;
       -530 : SQLMsg := ´Violação de Integridade Referencial Registro não foi encontrado.´;
       -902 : SQLMsg := ´Você não tem Acesso ao Banco de Dados. Erro Interno, contate o Administrador´;
       -625 : SQLMsg := ´Erro de Validação de Coluna´;
       -551 : SQLMsg := ´Você não tem permissão para esta Operação.Contate o Administrador´;
       -832 : SQLMsg := ´Este resgistro não pode ser excluído porque´ + #10 + ´Existem outros que dependem dele e que não foram excluídos´;
      12203 : SQLMsg := ´Base de Dados está fora do ar. Favor entrar´ + #10 + ´em contato com o responsável pela rede na ´ + 10 + ´localidade selecionada ou tente mais tarde.´;
       -803 : SQLMsg := ´Chave Primária ou única já existente. Registro não pode ser duplicado´;
     -10256 : SQLMsg := ´Erro no arquivo do banco de dados.´;
       -303 : SQLMsg := ´Erro na conversão de dados.´;
   End;
   If SQLMsg <> ´´ Then
      ErroMsg:= SQLMsg;
End;


verifique a classe [b:93e1b75ad4]EIBError[/b:93e1b75ad4]


Responder

Gostei + 0

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

Aceitar