Tratamento de mensagem de exclusão de registro com FK
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!!
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
Curtidas 0
Respostas
Sremulador
13/09/2007
Amigo estude o código, e adapete para os erros
verifique a classe [b:93e1b75ad4]EIBError[/b:93e1b75ad4]
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]
GOSTEI 0