Buscar

Traduzir erros

Código

//Obs: As procedures serao criadas no public do form principal
{
1) No evento OnCreate do form principal coloque a rotina que ira
disparar outra procedure sempre que ocorrer qualquer tipo de erro na
aplicacao.}


procedure TF_Menu.FormCreate(Sender: TObject);
begin
Application.OnException := ErrorMsg;
end;

{
2) Crie outra procedure no form principal que ira filtrar o tipo de
erro para depois trata-lo. Por enquanto eu so estou tratando os do
tipo EDBEngineError.
}

if e is EDBengineError then
TrataErro(E as EDBengineError)
{ if e is EMathError then
Showmessage(E.message);
if e is EFCreateError then
Showmessage(E.message);
if e is EFilerError then
Showmessage(E.message);
if e is EFOpenError then
Showmessage(E.message);
if e is EInOutError then
Showmessage(E.message);
if e is EIntError then
Showmessage(E.message);
if e is EListError then
Showmessage(E.message);
if e is EMenuError then
Showmessage(E.message);
if e is EComponentError then
Showmessage(E.message);
if e is EWriteError then
Showmessage(E.message);
if e is EStreamError then
Showmessage(E.message);
if e is EStringListError then
Showmessage(E.message);
if e is EConvertError then
Showmessage(E.message);
if e is EParserError then
Showmessage(E.message);
if e is ERangeError then
Showmessage(E.message);
if e is EReadError then
Showmessage(E.message);
if e is EReportError then
Showmessage(E.message);
if e is EStreamError then
Showmessage(E.message);}

else
application.showException(E);

end;

{
3) Crie a seguinte procedure no form Principal que ira tratar o erro
(traduzi-lo). No meu caso, eu utilizo Delphi/Oracle e os erros
DBEngineError disparados pelo Oracle possuem codigos que sao os
descritos dentro desta rotina. Creio que cada banco de dados deva ter
seus proprios codigos.
}

procedure TF_Menu.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;
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 28/12/04
Por: Vivacon
Visualizada: 6462 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009