Entwickler-Ecke

Internet / Netzwerk - Fehlermeldung speichern


seddto - Di 01.06.04 14:53
Titel: Fehlermeldung speichern
Ich habe folgendes Probleme:
Ich verschicke mit den Indy Kompos eine eMail. Ich habe die "kritischen Anweisungsblöcke" mit "try...except" so eingeschlossen, das auch im Fehlerfall keine für den Anwender schwer verständlichen Fehlermeldungen ausgegeben werden, sondern im Except-Block nur eine Messagebox aufgeht, die besagt, das die Mail nicht gesendet wurde. Damit ich das Programm weiter verbessern kann möchte ich die vollständige fehlermeldung allerdings in einer Textdatei speichern. Ich habe es nit Syserrormessage(getlasterror) probiert, das funktioniert ja aber nur wenn es sich um einen System Error handelt wie zum Beispiel Computer ist nicht mit dem Internet verbunden oder ähnliches. Wenn aber ein anderer Fehler auftritt wie zb. Empfänger Adresse falsch oder Mailbox voll handelt es sich nicht um einen Systemerror und die im Fehler log steht dann sowas sinnvolles wie "Fehlermeldung: Der Vorgang wurde erfolgreich beendet." Weiss jemand wie ich die nicht-System-fehlermeldungen speichern kann?


FaTaLGuiLLoTiNe - Di 01.06.04 15:00

Die Klasse Exception besitzt eine Eigenschaft Message, die Dir Deine Fehlermeldung liefern sollte ...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
try
 ...
except
 On E.Exception
  do begin
   ShowMessage(E.Message);
  end;
end;


// edit: Dieser Code hat noch einen kleinen Fehler, den ich 2 Beiträge weiter unten korrigiert habe.


seddto - Di 01.06.04 15:19

mhh bei dem Aufruf gibts bei mir ne Fehlermeldung! Wie muss ich die Klasse Exception den deklarieren?


FaTaLGuiLLoTiNe - Di 01.06.04 15:27

Upps ... mein Fehler ... bin heute irgendwie wirsch ...

statt On E.Exception muss es heissen On E:Exception (mit Doppelpunkt)!

Extra deklarieren musst du die Klasse nicht, sie ist in der Unit SysUtils bereits vorhanden.


fuba - Sa 28.07.07 15:43

suche genau sowas auch, aber:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    RenameFile(ExtractFilePath(ParamStr(0)) + '2.txt', ExtractFilePath(ParamStr(0)) + '123?5.txt');
  except
    on E:Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;
end;


das ist mein code, nur ich bekomm keinen fehler zurrück.
Also ich bekomm GARNICHTS zurück, als würde ich nichts machen.


Mache ich das ganze aber so:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if NOT RenameFile(ExtractFilePath(ParamStr(0)) + '2.txt', ExtractFilePath(ParamStr(0)) + '123?5.txt'then
  RaiseLastOSError;
end;


bekomme ich das zurück:

Quelltext
1:
2:
Systemfehler.  Code: 123.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.


und genau das möchte ich im string format bekommen,
damit ich es in ne log file speichgern kann oder was auch immer.
müsste doch möglich sein oder?


jakobwenzel - Sa 28.07.07 18:04

Wenn du das Fragezeichen aus dem Dateinamen rausnimmst, sollte es schon gehen.


fuba - Sa 28.07.07 19:58

user profile iconjakobwenzel hat folgendes geschrieben:
Wenn du das Fragezeichen aus dem Dateinamen rausnimmst, sollte es schon gehen.


ok nochmal zum mitschreiben...
Dieses Thema umfasst "Fehlermeldung speichern"

lies bitte nochmal ALLES von ganz oben und antworte mir dann nochmal :D


GTA-Place - Sa 28.07.07 21:06

Guck dir mal das Ereignis Application.OnException in der Hilfe an.


jaenicke - Sa 28.07.07 22:46


Delphi-Quelltext
1:
2:
3:
  if not RenameFile(ExtractFilePath(ParamStr(0)) + '2.txt', ExtractFilePath(ParamStr(0)) + '123?5.txt'then
    ShowMessage('Systemfehler! Fehlercode: ' + IntToStr(GetLastError)
      + ', Fehlermeldung: ' + SysErrorMessage(GetLastError));


fuba - Do 30.08.07 19:38

user profile iconjaenicke hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
  if not RenameFile(ExtractFilePath(ParamStr(0)) + '2.txt', ExtractFilePath(ParamStr(0)) + '123?5.txt'then
    ShowMessage('Systemfehler! Fehlercode: ' + IntToStr(GetLastError)
      + ', Fehlermeldung: ' + SysErrorMessage(GetLastError));


Jup, genau so funzt es!
Danke dir!