Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Endlos Schleife (https://www.delphipraxis.net/178119-endlos-schleife.html)

ngott2 18. Dez 2013 14:03

Endlos Schleife
 
Hallo, liebe Community.
Ich habe eine Schleife gebaut die aus irgend einem Grund eine Endlosschleife ist.
Die Bedingung bei einer While Schleife geht. Aber er muss leider mindestens einmal Durchlaufen.
Habe ich irgendwo einen Denkfehler.


Code:
repeat
    DokumentID.ID := Query.FieldByName('DID').AsInteger;  // DID =DocumentID
    DokumentID.ID := Query.FieldByName('CID').AsInteger; // CID = CompanyID
    Result.Add(DocumentID);
    query.Next
  until (not query.Eof);
Hier ist noch meine Sql Anweisung
Code:
Query.SQL.Text := 'Select ID As DID ,CompanyID As CID from [Document] Where Status = 1 and LoadForEmployee = false Order By CompanyID';
Danke im Voraus.

Mikkey 18. Dez 2013 14:05

AW: Endlos Schleife
 
nehme ein "not" heraus, dann wird ein Schuh draus

DeddyH 18. Dez 2013 14:07

AW: Endlos Schleife
 
Zitat:

Delphi-Quellcode:
until (not query.Eof);

Ob das so stimmt?

sirius 18. Dez 2013 14:07

AW: Endlos Schleife
 
Delphi-Quellcode:
until (query.Eof);
Bei einem oder keinem Eintrag wird das sonst zu einer Endlosschleife.

DeddyH 18. Dez 2013 14:10

AW: Endlos Schleife
 
Wobei ich mich frage, ob der Fußschleifenansatz generell richtig sein kann. Was sollen denn die Felder enthalten, wenn die Datenmenge leer ist?

Mikkey 18. Dez 2013 14:10

AW: Endlos Schleife
 
nehme ein "not" heraus, dann wird ein Schuh draus


edit:

Besser:

Delphi-Quellcode:
var fldDID, fldCID: TField;
...
    fldDID := Query.FieldByName('DID'); // DID =DocumentID
    fldCID := Query.FieldByName('CID'); // CID = CompanyID
    repeat
      DokumentID.ID := fldDID.AsInteger; // DID =DocumentID
      DokumentID.ID := fldCID.AsInteger; //<== dies ist dasselbe Feld/Property, gewollt?????
      Result.Add(DocumentID);
      query.Next
    until query.EOF;

sirius 18. Dez 2013 14:11

AW: Endlos Schleife
 
Zitat:

Zitat von DeddyH (Beitrag 1240252)
Wobei ich mich frage, ob der Fußschleifenansatz generell richtig sein kann. Was sollen denn die Felder enthalten, wenn die Datenmenge leer ist?

Vielleicht ist die Datenmenge per Definition nicht leer. Was durchaus woanders bereits abgefragt werden könnte, weil sonst die Ausführung des gesamten Programms keinen Sinn macht. ;-)

DeddyH 18. Dez 2013 14:12

AW: Endlos Schleife
 
Wenn die Datenmenge generell nicht leer ist, wird sie auch mit einer Kopfschleife mindestens einmal durchlaufen ;)

sirius 18. Dez 2013 14:15

AW: Endlos Schleife
 
Zitat:

Zitat von DeddyH (Beitrag 1240255)
Wenn die Datenmenge generell nicht leer ist, wird sie auch mit einer Kopfschleife mindestens einmal durchlaufen ;)

Stimmt. Dann vielleicht ..... Trigger? Stored Procs? Entführung von einem Alien? ...:?:

baumina 18. Dez 2013 14:27

AW: Endlos Schleife
 
Ich würde bevor ich zu einem Alien greifen würde, lieber eine while-Schleife draus machen...

ngott2 18. Dez 2013 14:31

AW: Endlos Schleife
 
Zitat:

Zitat von baumina (Beitrag 1240260)
Ich würde bevor ich zu einem Alien greifen würde, lieber eine while-Schleife draus machen...

Hatte ich und habe ich wieder. Ich habe vergessen das ich in der Sql abfrage eine Bedingung schon eingbaut habe (So waren es immer zu wenig Datensätze) und habe die ganze zeit gedacht das die Schleife nicht geht :)


Ich danke euch allen für die Antworten. Einen Schönen Tag noch.

Aphton 18. Dez 2013 16:34

AW: Endlos Schleife
 
[OT]
Ein Kommilitone hat neuerdings auch Probleme mit einer nicht terminierenden Schleife gehabt.
Nach der Vereinfachung der hochkomplexen und langen Schleifenbedingung, die kaum leserlich war, - btw. boolsche Algebra ftw! - bin ich draufgekommen, dass es sich um eine Tautologie handelt :-D
Ich hätte nie gedacht, dass ich jemals boolsche Algebra praktisch verwenden würde :cyclops:
[/OT]

Perlsau 18. Dez 2013 19:15

AW: Endlos Schleife
 
Gewöhnlich iteriert man durch eine Datenbanktabelle mit einer While-Schleife, die bei Beginn prüft, ob sich der Datensatzzeiger bereits am Ende der Tabelle (eof) befindet:
Delphi-Quellcode:
Dataset.first;
While not Dataset.Eof do
begin
  ...
  Dataset.Next;
end;
Wenn sich kein Datensatz in der Tabelle befindet, wird die While-Schleife auch nicht durchlaufen.


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