Entwickler-Ecke

Sonstiges (Delphi) - Fehler Handling


Marduk - Di 24.09.02 12:24
Titel: Fehler Handling
Hi Leute,
Ich habe ein Programm geschrieben, welches 1 mal wöchentlich eine Datei downloaden soll. Das klappt auch wunderbar, solange eine Internetverbindung vorhanden ist (logisch :lol: ).
Ist keine Verbindung da, bekomme ich einen Socketfehler (auch noch klar). Da das Programm aber auf nicht überwachten Rechnern laufen soll, soll da nicht die Fehlermeldung ewig stehen bleiben sondern das Programm weiterarbeiten, also eine Woche später den nächsten Versuch starten.
Ich habe es mit try...except versucht bekomme es aber nicht hin.
Ich schreib jetzt hier mal das Stückchen Quelltext rein,denke das ist die richtige stelle.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var

desttext,url:string;
dest:tfilestream;
log:textfile;

begin
dest.free;
desttext:=edit1.text;
DeleteFile(desttext+'\update.zip');
zeit.Caption := FormatDateTime('d. mmmm yyyy  hh:mm:ss', Now);
statusbar1.SimpleText:='Bitte warten.Datei wird heruntergeladen';
url:=edit2.text;
dest:= tfilestream.create(desttext+'\update.zip',fmcreate,fmsharedenynone);
idhttp1.get(url,dest);
statusbar1.simpletext:='Download erfolgreich.';
dest.free;

Hab jetzt mal meine Versuche mit dem Fehlerhandling komplett rausgelassen. So wie es jetzt ist funzt das Programm, nur eben noch ohne Fehlerhandling :(


CenBells - Di 24.09.02 12:35

hi

probier das mal

Quelltext
1:
2:
3:
4:
5:
try
  idhttp1.get(url,dest); 
except 
  statusbar1.simpletext:='Download nicht erfolgreich.';
end;

wenn das noch nicht klappt musst du wahrscheinlich für die komponente idhttp1 noch das ausschmeißen der fehlermeldung deaktivieren.

Gruß
Ken


Marduk - Di 24.09.02 12:51

und wo geht das ?


Marduk - Di 24.09.02 14:02

Jetzt bekomme ich ständig eine Adress Violation.
Hier mein Quelltext:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
begin
idhttp1.get(url,dest);
statusbar1.simpletext:='Download erfolgreich.';
dest.free;
WinExec(PChar('unzip.exe -o '+desttext+'/update.zip -d '+desttext),
                     SW_HIDE);

  NMSMTP1.Host   := config.Items[7];
  NMSMTP1.UserID := config.Items[8];
  NMSMTP1.Connect;
  NMSMTP1.PostMessage.FromAddress       := config.items[9];
  NMSMTP1.PostMessage.ToAddress.Text    := config.items[10];
  NMSMTP1.PostMessage.Body.Text         := 'Festplatte: '+chr(10)+label11.caption+chr(10)+label12.caption+chr(10)+prozent.caption+chr(10)+'Festplattenbelegung: '+sternletext.caption+chr(10)+'Download URL:'+edit2.text+chr(10)+' Gespeichert nach: '+edit1.text+chr(10)+'Gesendet am '+zeit.caption+chr(10)+'Gesendet durch: '+name.caption;
  NMSMTP1.PostMessage.Subject           := domain.caption+' / '+zeit.caption+config.items[11];
  NMSMTP1.SendMail;
  Statusbar1.simpletext:='Download erfolgreich. Mail wurde verschickt!';
  NMSMTP1.Disconnect;
  AssignFile(log,'log.txt');
  Append(log);
  Writeln(log,zeit.caption+': Update durchgeführt. Mailversand an: '+config.items[10]+'.');
  CloseFile(log);
  DeleteFile(desttext+'\update.zip');
  end;

except
on EIdException do begin
   statusbar1.simpletext:='Download nicht erfolgreich. Vielleicht stimmen ihre Proxy-Einstellungen nicht.';
   AssignFile(log,'log.txt');
   Append(log);
   Writeln(log,zeit.caption+': Fehler beim Download der Datei');
   CloseFile(log);
   end;

end;

end;


Ausserdem verschwinden plötzlich meine Buttons für den Download :evil: beim draufdrücken. Aber erst seit ich das Fehlerhandling eingebaut hab.
Bitte helft mir.... :crying:


Marduk - Di 24.09.02 14:04

Hier nochmal die abgekürzte Version ohne überlange Zeilen

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
try
begin
idhttp1.get(url,dest);
statusbar1.simpletext:='Download erfolgreich.';
dest.free;
WinExec(PChar('unzip.exe -o '+desttext+'/update.zip -d '+desttext),
                     SW_HIDE);

  NMSMTP1.Host   := config.Items[7];
  NMSMTP1.UserID := config.Items[8];
  NMSMTP1.Connect;
  NMSMTP1.PostMessage.FromAddress       := config.items[9];
  NMSMTP1.PostMessage.ToAddress.Text    := config.items[10];
  NMSMTP1.PostMessage.Body.Text         := 'Festplatte: '+chr(10);
  NMSMTP1.PostMessage.Subject           := domain.....;
  NMSMTP1.SendMail;
  Statusbar1.simpletext:='Download erfolgreich. Mail wurde verschickt!';
  NMSMTP1.Disconnect;
  AssignFile(log,'log.txt');
  Append(log);
  Writeln(log,zeit.caption+': Update durchgeführt. Mailversand;
  CloseFile(log);
  DeleteFile(desttext+'\update.zip');
  end;

except
on EIdException do begin
   statusbar1.simpletext:='Download nicht erfolgreich. Vielleicht...; 
   AssignFile(log,'log.txt');
   Append(log);
   Writeln(log,zeit.caption+': Fehler beim Download der Datei');
   CloseFile(log);
   end;

end;

end;


CenBells - Di 24.09.02 15:28

an welcher stelle bekommst du denn nun genau die accessviolation?

Du solltest aber eher ShellExecuteEx oder sogar Createprocess verwenden anstelle von WinExec

Des weiteren brauchst du kein begin end zwischen try except