Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abbruch in einer Schleife ermöglichen (https://www.delphipraxis.net/103686-abbruch-einer-schleife-ermoeglichen.html)

harfes 20. Nov 2007 06:22


Abbruch in einer Schleife ermöglichen
 
Ich habe eine Suchfunktion für eine Datenbank geschrieben, die solange in einer Schleife läuft, bis ein Ergebnis gefunden wurde oder der letzte Datensatz erreicht wurde (repeat...until). Da die Datenbank aber mittlerweile recht gross geworden ist, dauert die Suche manchmal sehr lange, so dass der Wunsch entsteht, die Suche abzubrechen (um z.B. mit neuen Parametern anders oder schneller etwas ztu finden). Kann mir jemand sagen, wie ich das realisieren muss? Sowiet ich mich eriinern kann, gab's da was mit application.processmessages damit man eine eingabe mitbekommt - wenn das richtig ist, wie komme ich dann weiter?

Hartmut

angos 20. Nov 2007 06:47

Re: Abbruch in einer Schleife ermöglichen
 
Guten Morgen,

du kannst zum Beispiel eine Variable vom Typ Boolean deklarieren und diese bei bedarf abfragen. Ich zeige dir mein Beispiel, damit sich das verdeutlicht.

Lege die ein Formular mit 2 Buttons und einem Edit an

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    btn1: TBitBtn;
    btn2: TBitBtn;
    edt: TEdit;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    bBreak: Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  i: Integer;
begin
  bBreak := False; // Initialiserung
  for i := 0 to 1000000 do
  begin
    if bBreak then Break; // wenn die Abbruchbedingung gesetzt ist, Schleife abbrechen
    edt.Text := IntToStr(i);
    Application.ProcessMessages; // Sorgt dafür, dass Nutzereingaben empfangen werden können.
  end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  bBreak := True; // Wenn auf den Abbruch-Button geklickt wird, wird die Abbruchbedingung auf wahr gesetzt
end;

Gruß
Ansgar

mkinzler 20. Nov 2007 06:48

Re: Abbruch in einer Schleife ermöglichen
 
Einen privaten Classmember vom Typ Boolean hinzufüge, den als weiteres Abbruchkriterium in Schleife einbauen. im Button-clickevent o.ä. den auf True setzen.

harfes 20. Nov 2007 07:06

Re: Abbruch in einer Schleife ermöglichen
 
Hallo Ansgar,

danke für das Beispiel - so geht's!

Gruss,

Hartmut

Jelly 20. Nov 2007 07:08

Re: Abbruch in einer Schleife ermöglichen
 
@Hartmut,

hast du dich schon mal in SQL eingearbeitet? Warum läufst du die gesamte Datenmeng zu Fuss durch?


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