Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - try/except


Luncustaf - Di 22.04.03 15:12
Titel: try/except
hi,


ich hab hier den code


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   try
     openq.open;
   except
     AssignFile(f,'Log.txt');
     {$i-} {Append(f); {$i+}
     if IOResult <> 0 then Halt;
     Writeln(f,'No Connection to Openplan-Datebase at '+TimeToStr(time)+' on '+DateToStr(date));
     CloseFile(f);
   end;//try


wenn nun zb die datenbank nicht an ihrem platz ist kommt eine exception as die datenbank nicht da ist - aber weiso führt er mir mei nexcept nicht aus wenn das try net klappt?

kann ich die message auch irgendwie anners abfangen?


gr€€tz


a.C.k - Di 22.04.03 16:24

Probiere es mal so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
   try 
     openq.open; 
   except 
     begin
       AssignFile(f,'Log.txt'); 
       {$i-} {Append(f); {$i+} 
       if IOResult <> 0 then Halt; 
       Writeln(f,'No Connection to Openplan-Datebase at '+TimeToStr(time)+' on '+DateToStr(date)); 
       CloseFile(f);
     end; 
   end;//try


tommie-lie - Di 22.04.03 16:47

nein, daran liegt es nicht. Except braucht ein begin..end ebenso wenig wie ein try oder ein finally.
Aber woran es hier liegt, sehe ich auch nicht. Sicher, daß openq.open eine Exception auslöst?


GruppeCN - Di 22.04.03 17:01

Wie wäre es , wenn du dein Programm mal kompilierst und dann startest(nicht aus Delphi)???


Udontknow - Di 22.04.03 17:15

Hi!

Was ist denn, wenn du in den finally-Block einfach nur "ShowMessage('Eine Exception ist aufgereten!');" reinschreibst?
Ich vermute einfach mal, daß du aus Versehen eine weitere Exception innerhalb des except-Blocks auslöst (z.B. weil die Datei 'log.txt' nicht existiert).

Nachtrag: Sehe gerade, daß du den IO-Exception-Mechanismus abschaltest und statt dessen im Fehlerfalle das Programm per Halt beendest. Beendet sich denn das Programm?

Cu, :)
Udontknow


MSCH - Di 22.04.03 17:28

brrrr. Try/except Blöcke brauchen kein begin/end Statemant. Weiterhin würd ich den halt() Befehl aus dem Block nehmen, das ist wir Auto fahren mit 100 Sachen gegen die Wand.
grez. msch


Udontknow - Di 22.04.03 17:33

@MSCH: Full ACK. Zumindest eine Meldung sollte in irgendeiner Weise aufgeblendet werden.

Was sagen eigentlich die Breakpoints? Ist denn IOResult<>0?

Cu,
Udontknow


Luncustaf - Di 22.04.03 19:31

also mein problem ist das er gar nicht in den except block geht wenn ich durch debugge sonder bringtm ir beim open das er die db net finden kann - wenn ich den namen der db zb absichtlich verändere - das ist dann so gewollt und ich denke mir (hab noch net viel mit try/except gemacht) das er dann in den except teil sprigen muss.

das was im ecxept teil steht ersmal nicht weiter beachten -ä nder ich noch ab. mir gehts ersmal darum das er mir da gar net reingeht und ich mich frage wieso.

wenn ich try/ecxept richtig verstanden habe dann ist das grad für solche sachen das wenn ne meldung vom programm kommt wie zb database net gefunden das ich dann die ausgabe der fehlermeldung kontrolliere oder hab ich da was falsch verstanden


gr€€tz