Controle as exceções do seu sistema

 

Neste artigo nos veremos como tratar as exceções que podem a vir acontecer inesperadamente no seu sistema de maneira geral. Nós faremos isso com um componente que esta presente no Delphi desde a versão 5: TApplicationEvents. Ele herda as funcionalidades do objeto TApplication, porém, o objeto TApplication não é visual, o que não é o caso do componente TApplicationEvents. Ele é visual e pode ser encontrado na paleta de componentes Aditional.

 

Qualquer aplicação esta sujeito a erros, seja ele originado por uma quebra de integridade do banco de dados ou qualquer outro motivo. Por tanto ao invés de criarmos um bloco try..except em cada procedimento do sistema, nós vamos criar um único procedimento que fará o tratamento de todas as exceções que possam ser gerados pelo sistema.

 

Essa rotina será de fácil implementação, visto que o componente TApplicationEvents possui o evento OnException. Este evento é disparado quando qualquer exceção for gerada pelo seu sistema. OnException possui dois parâmetros. Veja abaixo:

 

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);

 

Sender: TObject

Objeto que chamou este evento.

E: Exception

            Este parâmetro possui as informações da exceção gerada, como por exemplo, a mensagem de erro.

 

Agora nos veremos um exemplo bem simples, onde ao ocorrer uma exceção, será verificado se foi um erro da conversão de um valor para o tipo data. Para este exemplo vamos encarar que a única exceção prevista no seu sistema, era a possibilidade de o usuário digitar uma data invalida e que qualquer outra exceção será tratada como desconhecida.

 

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);

begin

  {O if abaixo verifica se a frase is not a valid date existe dentro da  mensagem de erro gerada pela exceção. Caso a frase exista, significa que foi gerado um erro de conversão para data}

  if Pos(UpperCase(is not a valid date), UpperCase(E.Message))>0 then//se for um erro de conversão para data

  begin

    ShowMessage(A data digitada não é válida. Tente novamente com outra data.);

  end

  else

  begin

    ShowMessage(O sistema encontrou gerou uma exceção inesperada e será fechado);

    Halt(0);//finaliza o programa

  end;

end;

 

No exemplo acima caso a exceção não seja conhecida o sistema emite um aviso do problema e logo em seguida finaliza o programa. O que nos vamos fazer agora é testar se a exceção é conhecida e caso ela não seja, iremos fazer com a exceção seja apresentada ao usuário sem tratamento algum.

 

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);

begin

  {O if abaixo verifica se a frase is not a valid date existe dentro da  mensagem de erro gerada pela exceção. Caso a frase exista, significa que foi gerado um erro de conversão para data}

  if Pos(UpperCase(is not a valid date), UpperCase(E.Message))>0 then//se for um erro de conversão para data

  begin

    ShowMessage(A data digitada não é válida. Tente novamente com outra data.);

  end

  else

  begin

    {caso seja uma exceção desconhecida, a linha de código abaixo ira recriar exceção sem fazer tratamentos algum}

    raise Exception.Create(E.Message);

  end;

end;

 

A técnica aprendida neste artigo pode ser utilizada para diversas finalidades. Você pode, por exemplo, fazer com que seu sistema registre cada exceção gerada por ele e que esses registros sejam enviados a você para análise e correção do mesmo. Desta maneira antes mesmo que o usuário possa reclamar de alguma coisa você já o terá corrigido.