AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Funktion nach except Block nicht verlassen
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion nach except Block nicht verlassen

Ein Thema von danielA · begonnen am 27. Nov 2003 · letzter Beitrag vom 28. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#1

Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 11:13
Hallo erstmal,

Wie schaffe ich es nach dem auslösen einer Exception nicht aus der Funktion zu fliegen.

Delphi-Quellcode:
Function Konvertiere : integer;
begin
  try
    Result:=strtoint('Hallo');
  except
    Result:=0;
  end;
  beep;
end;
Also das beep noch auszuführen.

Hintergrund der Sache ist natürlich nicht so ein einfaches Beispiel. Ich muß mich in einer Schleife mit mehreren DBServern verbinden. Sind die jedoch gerade heruntergefahren oder haben eine Störung bleibt mein System an der Stelle mit einer Exception stehen.

Schonmal Danke im vorraus.

Gruß Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#2

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 11:19
Eigentlich sollte er nach dem end ganz normal weiterlaufen, also nicht rausfliegen. Lass doch mal die echte Funktion sehen!
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 12:18
Hallo Nochmal

Delphi-Quellcode:
procedure Meinform.ConnectServer();
var i : integer;
begin
  for i:=0 to WriteServer.Count-1 do
  begin
    try
      TIbDatabase(WriteServer[i]).Connected:=True; // WriteServer ist ein TListObjekt
    except
    end;
  end;
  ReadServer.Connected:=true; // <--- hier kommt er nie an wenn einer der Server down ist
  ... // Fehler: I/O Error for File "MeineDatenbank"
                                // Error while trying to open file
                                // Das System kann die angegebene Datei nicht finden.
end;
Gruß und danke

Daniel
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 12:21
Kann es sein, dass das Verbinden zu den Servern nicht unmittelbar, sondern vielleicht sogar in einem eigenen Thread abläuft?
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 12:31
Wie wäre es wnen du zwei Funktionen/Proeduren draus machst.

Delphi-Quellcode:

procedure blabla();
var i : integer;
begin
  for i:=0 to WriteServer.Count-1 do
  begin
    try
      TIbDatabase(WriteServer[i]).Connected:=True; // WriteServer ist ein TListObjekt
    except
    end;
  end;
end;


procedure Meinform.ConnectServer();
begin
  BlaBla();
  ReadServer.Connected:=true; // <--- hier kommt er nie an wenn einer der Server down ist
  ... // Fehler: I/O Error for File "MeineDatenbank"
                                // Error while trying to open file
                                // Das System kann die angegebene Datei nicht finden.
end;
Spricht was dagegen?


Gruß
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 12:39
Hi,

mal in eine andere Richtung gefragt:
Kehrt Dein Aufruf
TIbDatabase(WriteServer[i]).Connected:=True; wieder zurück und Deine Function wird ohne Abarbeitung der Code-Zeilen hinter Deinem Except end Block verlassen?

Oder blockiert der benannte Aufruf bei failed deinen Programmablauf?

Bei letzterem hättest du dann kein Problem mit deinem Except-Block, sondern wie du bei fehlerhafter Connection weiterkommst.


Gruß oki
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 13:40
Hallo,

erstmal danke für die vielen Antworten.
Wenn das Connected fehlschlägt kehrt er zum Formular zurück. Oben genannte Funktion wird verschachtelt über eine Ereignissbehandlungsroutine aufgerufen welche wiederum Funktionen aufruft.
Eine dieser Funktionen ist diese ConnectServer Routine. Für das Programm ist nach der Exception das Ereigniss beendet (Also er springt nicht mal zu irgendeinem end irgendeiner dieser Funktion übergeordnetten Funktionen)
Also ich meine das etwa so.

Delphi-Quellcode:
...

Procedure Meinereigniss(Sender : TObject);
begin
  ...
  Startunterfunktion()
  ...
end; // <-- hier kommt er im Fehlerfall nicht hin

Procedure Startunterfunktion();
begin
  ...
  ConnectServer()
  ... // <-- hier kommt er im Fehlerfall auch nicht hin
end;


procedure Meinform.ConnectServer();
var i : integer;
begin
  for i:=0 to WriteServer.Count-1 do
  begin
    try
      TIbDatabase(WriteServer[i]).Connected:=True; // WriteServer ist ein TListObjekt
    except
    end;
  end;
  ReadServer.Connected:=true; // <-- hier kommt er im Fehlerfall nicht hin
  ...
end;
Das es, wie Mario schon sagte, in einem anderen Thread läuft kann sein. Aber wie macht man es dann ?

Gruß Daniel
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 13:42
Dann kannst Du es nicht da abfangen. Dann ist es aber gut möglich, dass der Server ein Ereigniss für Fehler hat. Alternativ kannst Du ja mal das Application.OnException probieren.
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#9

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 13:45
Ich hab jetzt ne Möglichkeit gefunden aber wirklich gefallen tut sie mir nicht.

Delphi-Quellcode:

procedure Meinform.ConnectServer(Posi : integer = 0);
var i : integer;
begin
  for i:=Posi to WriteServer.Count-1 do
  begin
    try
      TIbDatabase(WriteServer[i]).Connected:=True; // WriteServer ist ein TListObjekt
    except
      ConnectServer(i+1);
    end;
  end;
  ReadServer.Connected:=true; // <-- hier kommt er im Fehlerfall nicht hin
  ...
end;
Damit wird das nach der Schleife genau einmal aufgerufen egal wie oft der Fehler auftritt.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Funktion nach except Block nicht verlassen

  Alt 27. Nov 2003, 13:53
Hallo,

ich denke mal, was woanders passiert ist hier wurst.

Die Fragestellung impliziert doch hier die Annahme, das bei fehlerhaftem Connect eine Exception ausgelöst wird und das Problem darin besteht, dass der Code nach dem Except-Block ausgelassen wird.

Wenn das so ist, muß ich hier passen. Ich hatte zwar mal ähnliche Probleme, aber dort war es so, dass bei eigenen Threads oder fremden auf Grund des Fehlers andere richtige Probleme auftauchten (Stack im Schrott etc.). Dort mußte der Fehler an einer asnderen Stelle beseitigt werden. Die Ursache hatte dann aber nichts mit Fehlern an den Stellen zu tun, an denen alles den Bach runter ging. Das hat dann an dieser Stelle nur häftig reingeschmiert.

Gruß oki

PS: Vielleicht hab ich ja auch immer noch nicht die Frage verstanden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz