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.