Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine (einzige) Exception blocken (https://www.delphipraxis.net/124529-eine-einzige-exception-blocken.html)

ToFaceTeKilla 20. Nov 2008 14:46


Eine (einzige) Exception blocken
 
Hiho,

und zwar habe ich folgenden Code:
Delphi-Quellcode:
      try                    ///Wenn fm_SSFDI_GetJobs nicht existiert, Exception werfen
        FDBconnector.ExecuteStoredProcedure_NoOutput(DBConnectionMode_UserDB,nil,'fm_SSFDI_GetJobs',inparam,ErrorAction_Throw);
        Btn_Abgl_Koord.Enabled:= true;
        F_SPJobs_exists:= true;
      except
        on e: exception do
          begin
            Btn_Abgl_Koord.Enabled:= false;
            F_SPJobs_exists:= false;
          end;
      end;
Wie FDBconnector.ExecuteStoredProcedure vermuten lässt, handelt es sich um eine Funktion, die eine Stored Procedure ausführt.
Da die SP "fm_SSFDI_GetJobs" nicht in jeder meiner Datenbanken existiert und dann der Button "Btn_Abgl_Koord" jedesmal dem User eine Exception präsentieren würde, dachte ich mir, führe die Funktion vorher aus und wenn die SP nicht existiert, fang die Exception an der Stelle ab und disable den Button. Das funktioniert auch, nur kommt logischerweise in der IDE die Exception noch. Wie kann ich diese eine Exception abstellen? Da gibts doch bestimmt irgendeinen Schalter oder sowas, oder?

MfG

Nersgatt 20. Nov 2008 14:56

Re: Eine (einzige) Exception blocken
 
Unter D2006 ist das unter Tools - Options - Debugger Options - Borland Debuggers - Langugage Exceptions - Notify on Language Exceptions (Haken entfernen).

Aber kannst Du nicht aus den Systemtabellen der Datenbank auslesen, ob die SP exisitert? Würde ich für sauberer halten, als einfach zu probieren, ob es geht.

Gruß,
Jens

ToFaceTeKilla 20. Nov 2008 15:02

Re: Eine (einzige) Exception blocken
 
Sicher, geht auch. Hab ich auch schon vorm Threaderstellen ausprobiert.
Aber interessieren würdes mich dennoch mal, obs da nen Schalter gibt, so in der Art
Delphi-Quellcode:
{$ ShowExceptionsInIDE off}
try
...
except
...
end;
{$ ShowExceptionsInIDE on}

nicodex 20. Nov 2008 19:47

Re: Eine (einzige) Exception blocken
 
Zitat:

Zitat von ToFaceTeKilla
Da gibts doch bestimmt irgendeinen Schalter oder sowas, oder?

Nope, das kann man nur global in den Optionen einstellen.
Exceptions sind nunmal Ausnahmen, die man nicht unbekümmert in Kauf nehmen sollte.

Delphi-Quellcode:
try
  //...
except
  on E: Exception do
  begin
    //...
  end;
//else
//  raise; // wird niemals ausgeführt
end;
Hättest dir die Tipparbeit sparen können. Da alle Objekte, die durch eine Ausnahme erzeugt werden, Nachfahren von Exception sind, wird der Code danach (in diesem Falle ein implizites "else raise") nicht ausgeführt.

Es entspricht also der verbreiteten Unart:
Delphi-Quellcode:
try
  //...
except
  //...
end;

alzaimar 20. Nov 2008 21:22

Re: Eine (einzige) Exception blocken
 
Zitat:

Zitat von nicodex
Es entspricht also der verbreiteten Unart:
Delphi-Quellcode:
try
  //...
except
  //...
end;

... die bei Verwendung von zusammengefrickelten Fremdkomponenten (z.B. ADO :mrgreen: ) zu einer Zwangsmaßnahme gehört. Wenn angewandt, bitte ordendlich kommentieren!!!!!1!!!11!!!eins!!!elf!!!ELF!

ToFaceTeKilla 21. Nov 2008 09:34

Re: Eine (einzige) Exception blocken
 
Zitat:

Zitat von nicodex
Delphi-Quellcode:
try
  //...
except
  on E: Exception do
  begin
    //...
  end;
//else
//  raise; // wird niemals ausgeführt
end;
Hättest dir die Tipparbeit sparen können. Da alle Objekte, die durch eine Ausnahme erzeugt werden, Nachfahren von Exception sind, wird der Code danach (in diesem Falle ein implizites "else raise") nicht ausgeführt.

Es entspricht also der verbreiteten Unart:
Delphi-Quellcode:
try
  //...
except
  //...
end;

Meinst du mit Tipparbeit das
Delphi-Quellcode:
try
dosomething
except
on E: Exception do
  begin
    dosomethingelse
  end;
end;
weil das im Prinzip das gleiche ist wie einfach
Delphi-Quellcode:
try
  dosomething
except
  dosomethingelse
end;
?

edit:
Und wieso ist dass dann eine Unart (jetzt mal vorausgesetzt man lässt den except-block nicht leer)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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