Como Tratar as Exceções

Delphi

08/06/2004

Eu tenho este código para guardar no banco todas as exceções da aplicação, a intenção era saber onde o erro estava ocorrendo, porém quando ocorre um Access Violation ou numa consulta quando registro não foi encontrado e me mostra a mensagem, a aplicação tratar isto como uma exceção também, tem como filtrar as exceções se é realmente um erro ou não.

procedure TfrmQForm.Captura_Erros(Sender: TObject; E: Exception);
var
qryInsere_Log_Erros : TQuery;
Tela, Controle, Mensagem, Usuario : string;
Email : TNMSMTP;
begin
Tela := Screen.ActiveForm.Name;
Controle := Screen.ActiveControl.Name;
Mensagem := E.Message;
Usuario := TUsuario_Unesc(AppAcad.Usuario).Login;
if Trim(Usuario) <> ´´ then
begin
qryInsere_Log_Erros := TQuery.Create(nil);
qryInsere_Log_Erros.DatabaseName := ´GLOBAL´;
qryInsere_Log_Erros.SQL.Text := ´INSERT INTO LOG_ERROS_SISTEMA ´
+ ´(DESC_ERRO, NOME_FORM, NOME_CONTROLE, DT_ERRO, LOGIN, SIT_LOG_ERRO) ´
+ ´ VALUES ´
+ ´(:DESC_ERRO, :NOME_FORM, :NOME_CONTROLE, GETDATE(), :LOGIN, :SIT_LOG_ERRO)´;
try
qryInsere_Log_Erros.ParamByName(´NOME_FORM´).AsString := Tela;
qryInsere_Log_Erros.ParamByName(´NOME_CONTROLE´).AsString := Controle;
qryInsere_Log_Erros.ParamByName(´DESC_ERRO´).AsString := Mensagem;
qryInsere_Log_Erros.ParamByName(´LOGIN´).AsString := Usuario;
qryInsere_Log_Erros.ParamByName(´SIT_LOG_ERRO´).AsInteger := SIT_LOG_ERRO_NAO_VISUALIZADO;
qryInsere_Log_Erros.ExecSQL;

{ Enviando e-mail }
try
Email := TNMSMTP.Create(nil);

Email.Charset := ´us-ascii´;
Email.EncodeType := uuMime;
Email.Port := 25;
Email.ReportLevel := 0;
Email.TimeOut := 0;

if Email.Connected then
Email.Disconnect;

Email.Host := ´smtp.<dominio>.br´;
Email.UserID := AnsiLowerCase(Usuario) + ´@<dominio>.br´;
Email.Connect;

if Email.Connected then
begin
Email.ClearParams := True;
Email.SubType := mtPlain;
Email.PostMessage.FromAddress := AnsiLowerCase(Usuario) + ´@<dominio>.br´;
Email.PostMessage.FromName := AnsiUpperCase(TUsuario_Unesc(AppAcad.Usuario).Nome);
Email.PostMessage.ToAddress.Add(´fcolli@<dominio>.br´);
//Email.PostMessage.ToAddress.Add(´aoliveira@<dominio>.br´);
//Email.PostMessage.ToAddress.Add(´mjuliani@<dominio>.br´);
Email.PostMessage.Body.Text := ´Ocorreu a seguinte execeção no sistema ´ + #1310 +
´Erro : ´ + Mensagem + 1310 + ´Formulário : ´ + Tela + 1310 +
´Controle : ´ + Controle + 1310 + ´Usuário : ´ + Usuario;
Email.PostMessage.Subject := ´Log de Erro do Sistema´;
Email.PostMessage.Date := DateToStr(Data_servidor);
Email.SendMail;
Email.Disconnect;
end;
Email.Free;
except
AppAcad.QMessageDlg(Pchar(E.Message), mtInformation, [mbok]);
Exit;
end;

//AppAcad.QMessageDlg(Pchar(´Ocorreu o seguinte erro : ´ + E.Message + ´.´ + #1310 + ´O(s) administrador(es) do sistema estão avisados por e-mail assim ´
// + 1310 + ´ que a mensagem for fechada e estarão analizando uma solução para o problema.´), mtWarning, [mbok]);
AppAcad.QMessageDlg(Pchar(E.Message), mtWarning, [mbok]);
except
AppAcad.QMessageDlg(PChar(´Ocorreu o seguinte erro : ´ + E.Message + ´.favor entrar em contato com os administradores do sistema.´), mtWarning, [mbok]);
end;
qryInsere_Log_Erros.Free;
end;
end;


Fabio Colli

Fabio Colli

Curtidas 0
POSTAR