Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Frage zu Try Except (https://www.delphipraxis.net/5487-frage-zu-try-except.html)

Gambit 8. Jun 2003 20:45


Frage zu Try Except
 
Hallo und frohe Pfingsten!

Ich hab hier mal folgenden noch fehlerhaften Code:

Delphi-Quellcode:
procedure TForm1.BtnStoreClick(Sender: TObject);
var JobDone: Boolean;

begin
  JobDone:= false;

  Try
    Query1.Post ;
  except
    on EDatabaseError do
     Messagebox(0, 'Feld Genre darf nicht leer sein!', 'Warnung',16);
  End;

  SetButtons(1);
  activatePostEdit;
end;
Es soll so sein, dass SetButtons(1) und activatePostEdit erst ausgeführt werden, wenn man in das Feld 'Genre' auch wirklich etwas eingegeben hat(und damit die Exception nicht mehr ausgelöst wird).

Wie könnte ich das am besten bewerkstelligen?

Gruß

Gambit

P.S Das Feld Genre ist in der Paradoxtabelle mit 'Eingabe erforderlich' gekennzeichnet

sakura 8. Jun 2003 20:49

Re: Frage zu Try Except
 
Eine Möglichkeit wäre folgende Änderung:
Code:
procedure TForm1.BtnStoreClick(Sender: TObject);
var JobDone: Boolean;

begin
  JobDone:= false;

  Try
    Query1.Post ;
  except
    on EDatabaseError do
    [color=#f60000]begin[/color]
     Messagebox(0, 'Feld Genre darf nicht leer sein!', 'Warnung',16);
     [color=#f60000]Abort;
    end;[/color]
  End;

  SetButtons(1);
  activatePostEdit;
end;
Abort löst eine "stille" Exception aus, so daß keine weitere Fehlermeldung angezeigt wird, verhält sich ansonsten aber wie eine normale Exception -> Abbruch der Codefolge.

...:cat:...

MrSpock 8. Jun 2003 20:50

Hallo Gambit,

am besten mit einer repeat until Schleife.

Delphi-Quellcode:
 
fertig := false;
repeat
  Try
    Query1.Post ;
    fertig := true;
  except
    on EDatabaseError do
     Messagebox(0, 'Feld Genre darf nicht leer sein!', 'Warnung',16);
  End;
until fertig;
Aber Achtung, diese Schleife wird nur durch ein erfolreiches "Post" verlassen. Willst du das wirklich?

sakura 8. Jun 2003 20:54

Zitat:

Zitat von MrSpock
Aber Achtung, diese Schleife wird nur durch ein erfolreiches "Post" verlassen. Willst du das wirklich?

Ich hoffe doch nicht :mrgreen:

...:cat:...

Gambit 8. Jun 2003 21:01

Im Prinzip glaub ich schon. ich versteh das doch richtig, dass die Exception eintritt, wenn nicht erfolgreich "gepostet" werden kann. Es muss aber so sein, dass ich noch die Möglichkeit erhalte, etwas fürs Genre einzutragen. Ich probier das jetzt mal aus.

Danke erstmal

Gambit

Gambit 8. Jun 2003 21:08

Ne, so gehts doch nicht. So hab ich praktisch einen Endlos Loop, weil ich nicht die Gelegenheit erhalte, bei Genre etwas einzutragen. Die Exception wird ja ausgelöst, wenn bei Genre nichts eingetragen wird, weils in der Tabelle so markiert ist.

Gruß

Gambit

Nachtrag: Die Version mit dem Abort scheint gut zu funzen!!

CenBells 19. Jun 2003 23:22

ich würde halt die beiden aufrufe

SetButtons(1);
activatePostEdit;

direkt unter das Query.post setzen, also innerhalb von try..except.
Wenn das Post fehlschlägt, tritt der except fall ein und es wird nichts mehr versucht (try). Wenns funktioniert dann werden die beiden methoden halt auch noch ausgeführt.

Klar, das geht auch mit dem abort, allerdings finde ich das so schicker..

Gruß
Ken


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz