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!!
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
Curtir tópico
+ 0
Responder
Posts
16/09/2007
Sremulador
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]
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)