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]

Responder a