Tratando erros de sistemas

Todo bom sistema deve ter um tratamento adequado de erros, os quais sempre poderão acontecer.

Esse artigo mostrará como tratar todos erros que acontecem em um sistema desenvolvido com Delphi, de uma forma bem simples, utlizando o componente ApplicationEvents.

Bem vamos à prática. Siga os passos abaixo:

1 - Adicione ao formulário principal da aplicação um componente ApplicationEvents, disponível na paleta de componentes Additional.

2 - Com o componente ApplicationEvents1 selecionado, acesse o Object Inspector, sua aba Events e de um clique duplo no evento OnException.

3 - Adicione as seguintes variáveis ao evento:

var

mensagem: string;

Pos1, Pos2: integer;

4 - Codifique o evento conforme a listagem abaixo:

if Pos(UpperCase('is not a valid date'), UpperCase(E.Message)) <> 0 then

mensagem:='Data inválida, proceda a correção.'

else if Pos(UpperCase('must have a value'), UpperCase(E.Message)) <> 0 then

begin

Pos1:=Pos('''', E.Message);

mensagem:=E.Message;

Delete(mensagem, Pos1, 1);

Pos2:=Pos('''', mensagem);

mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);

mensagem := 'É obrigatório o preenchimento do campo '+ mensagem + '.';

end

else if Pos(UpperCase('key violation'), UpperCase(E.Message)) <> 0 then

mensagem := 'Houve violação de Chave. Registro já incluido.'

else if Pos(UpperCase('is not a valid time'), UpperCase(E.Message)) <> 0 then

mensagem := 'Hora inválida, proceda a correção.'

else if Pos(UpperCase('is not a valid float'), UpperCase(E.Message)) <> 0 then

begin

Pos1 :=Pos('''', E.Message);

mensagem :=E.Message;

Delete(mensagem, Pos1, 1);

Pos2 := Pos('''', mensagem);

mensagem :=copy(E.Message, Pos1 + 1, Pos2 - Pos1);

mensagem := 'O valor '+ mensagem + ' não é válido.';

end

else if Pos(UpperCase('field value required'), UpperCase(E.Message)) <> 0 then

begin

Pos1 :=Pos('column ', E.Message) + 7;

Pos2 :=Pos(',', E.Message);

mensagem :=copy(E.Message, Pos1, Pos2 - Pos1);

mensagem := 'Campo ' + mensagem + ' deve ser preenchido.';

end

else if Pos(UpperCase('ATTEMPT TO STORE DUPLICATE VALUE'), UpperCase(E.Message)) <> 0

then

mensagem := 'Não é permitido valor duplicado. '

else if Pos(UpperCase('FOREIGN KEY'), UpperCase(E.Message)) <> 0 then

mensagem := 'Operação não permitida, registro vinculado em outra tabela está faltando.'

else if Pos('VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT', UpperCase(E.Message)) <> 0

then

mensagem := 'Registro Duplicado'+#13#10+Copy(UpperCase(E.Message),Pos('VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT',UpperCase(E.Message))+47,100)

else if (Pos(UpperCase('MUST APPLY UPDATES BEFORE REFRESHING DATA'),

UpperCase(E.Message)) <> 0) then

mensagem := 'É necessário aplicara as alterações antes de atualizar os dados.'

else if (Pos(UpperCase('INVALID INPUT VALUE'), UpperCase(E.Message)) <> 0) then

mensagem := 'Valor digitado não é valido conforme a máscara.'

else

mensagem := 'Ocorreu o seguinte erro: ' + #13 +UpperCase(E.Message);

MessageDlg(mensagem, mtError, [mbOk], 0);

ABORT;

Com isso você estará tratando a maioria dos erros que ocorrem durante a exeução de sistemas. Fique a vontade para adicionar novas mensagens.

Lembrando que executando o sistema pelo Delphi, ainda serão exibidas mensagens em Inglês devido ao modo de debug. Para testar o tratamento o ideal é executar o sistema por fora do Delphi.