Bom Dia pessoal... estou com um probleminha... estou tentando fazer o tratamento de erros que vem do banco (Oracle) para que o Usuário possa entender corretamente, com isso estou fazendo da seguinte Maneira....
procedure TPrincipal.TrataErro(E: EDBengineError); var nSQLError : integer; cSQLMessage : string; cTable : string; x : integer; begin nSQLError := 0; cSQLMessage := ''; for x:=0 to e.ErrorCount -1 do if e.errors[x].NativeError <> 0 then begin nSQLError := e.errors[x].NativeError; cSQLMessage := e.errors[x].message; end; if nSQLError <> 0 then begin cTable := ''; x := pos('tabela',cSQLMessage); if x > 0 then begin cTable := copy(cSQLMessage,x+7,20); x := pos('"',cTable); if x > 0 then cTable := copy(cTable,1,x-1); end; messagebeep(0); case nSQLError of 1 : showmessage('Este registro já está cadastrado.'); 2292 : showmessage('Este resgistro não pode ser excluído porque'+#10+ 'existem outros que dependem dele e que não foram excluídos'); 12203 : begin showmessage('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.'); Application.Terminate; end; 2067 : showmessage('Ocorreu um erro no Banco de dados. Favor'+#10+ 'entre em contato com o responsável pelo sistema '+#10+ 'e informe o código "ORA-2067 Rollback requerido."'); 2049 : showmessage('Tempo de resposta excedido. Anote este erro '+#10+ 'e contacte o responsável pelo sistema. Erro: ORA-2049. '); 2063 : begin showmessage('Erro com a base de dados da localidade. Comunique o responsável'+#10+ 'pelo sistema e informe o erro: ORA-2063. '); Application.Terminate; end; 1017 : begin showmessage('Usuário e/ou Senha incorretos. Informe novamente. Comunique o responsável'+#10+ 'pelo sistema e informe o erro: ORA-1017. '); Application.Terminate; end; 942 : showmessage('Erro ao tentar acessar uma tabela não autorizada'+#10+ 'para o usuário.'); 904 : showmessage('Houve erro no processamento. Existe um nome de coluna'+#10+ 'inválida para a tabela on consulta referenciada neste módulo.'); 12154: begin showmessage('Nome do Servidor de Banco de Dados está incorreto ou não existe.'); Application.Terminate; end; 6550 : showmessage('A rotina que executa este processamento não está criada no Banco de Dados.'+#10+ 'Informe ao responsável os códigos: ORA-06550 e PLS-00201.'); else showmessage('Anote esta mensagem: '+cSQLMessage); end; end else showmessage('Erro desconhecido. Comunique o responsável pelo Sistema'); end; procedure TPrincipal.ErrorMsg(Sender : TObject; E: exception); Begin if e is EDBengineError then TrataErro(E as EDBengineError) else application.showException(E); end; procedure TPrincipal.FormCreate(Sender: TObject); begin Application.OnException := ErrorMsg; end; Sendo que não está mostrando o erro corretamente... está sendo mostrado o erro que realmente vem do banco... Se alguem puder me ajudar... me fala por favor... Desde já agradeço.... Att, Ribamar Sousa Filho Flickr agora em português. Você cria, todo mundo vê. http://www.flickr.com.br/ [As partes desta mensagem que não continham texto foram removidas]