Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Endlosschleife??? (https://www.delphipraxis.net/35354-endlosschleife.html)

luzifer 6. Dez 2004 02:13


Endlosschleife???
 
isch glaube ich werd hier bekloppt! :wall: Vielleicht kann hier mal jemand einen Blick drauf werfen. Ich find´s einfach nicht.
Die Schleife läuft immer unendlich. Hab aber doch nur 4 Testdatensätze drin.... :gruebel:

Code:
Table1.Active:=true;
   Table1.Open;
   Table1.First;
     while not Table1.Eof DO
       begin
       if Table1Lauf1.Text<Table1Lauf2.Text then
        begin
           Table1.Edit;
           Table1Bestzeit.Text:= Table1Lauf1.Text;
           Table1.Post;
        end;
          Table1.Next;
      end;
Bitte um Hilfe. Ich bin den Quellcode schon 1000mal hoch und runter marschiert und find einfach nicht.

omata 6. Dez 2004 02:34

Re: Endlosschleife???
 
Moin,

wieso machst du ein Active:=true und dann ein Open? (das ist doch das Selbe) und dann ein First, nach dem Öffnen ist man immer auf dem ersten Datensatz.

Na gut, das nur nebenbei.

Hast du mal deine IF-Bedingung ausgeklammert? Machst du eventuell etwas im AfterPost-Ereignis?

Kannst ja nochmal mehr schreiben.

MfG
Thorsten

Jasocul 6. Dez 2004 07:20

Re: Endlosschleife???
 
So eine Sache würde ich mit einem Update-SQL-Statement machen. Dann ist die ganze Schleife hinfällig und dürfte auch sehr viel schneller sein.
Das geht mit einem TQuery. Das SQL-Statement dürfte etwa so aussehen:
SQL-Code:
update <Tabellenname>
set Bestzeit = Lauf1
where Lauf1 < Lauf2
Abschließend das Statement mit Query1.ExecSQL ausführen

luzifer 6. Dez 2004 17:32

Re: Endlosschleife???
 
Hallo,

das mit Active und Open, da hab ich nur vergessen einen zu löschen.

Die IF-Bedingung hab ich hier auch schon mal ausgeklammert, bleibt das selbe.
Ich hab das ganze auch schon mit Haltepunkte durchgelaufen macht ja alles soweit richtig, aber die Schleife bleibt beim letzten Datensatz hängen und läuft den letzten Datensatz unendlich mal durch.

Die Schleife brauch ich schon. Die soll ja Datensatz für Datensatz, den jeweils kleineren Wert aus Lauf1 und Lauf2, in Bestzeit eintragen.

IngoD7 6. Dez 2004 18:24

Re: Endlosschleife???
 
Jedenfalls scheinst du nicht der einzigste zu sein, der das Malheur kennt ....

Suche mal per Google nach TTable + Eof.

Und wenn alle Brücken brechen, probiere mal ob - wie auch in der Online-Hilfe vorgeschlagen - die Verwendung von TTable.DisableControls und TTable.EnableControls was bringt.

Hansa 6. Dez 2004 18:37

Re: Endlosschleife???
 
Edit, Post und Next innerhalb der Schleife, das ist immer gefährlich. Wo ist der Filepointer vor dem Edt, oder nach dem Post ? Wenn er auf dem letzten Datensatz ist, wo ist er dann nach dem Next ?

Ich vermute, das EOF wird übersprungen und das ergibt dann eben Endlosschleife. Eventuell aber auch nicht immer. Die Konstruktion sieht etwas wackelig aus. 8)

Jasocul 6. Dez 2004 18:56

Re: Endlosschleife???
 
Zitat:

Zitat von luzifer
Die Schleife brauch ich schon. Die soll ja Datensatz für Datensatz, den jeweils kleineren Wert aus Lauf1 und Lauf2, in Bestzeit eintragen.

Das würde mit dem SQL-Statement auch gemacht. Nur benötigst du dann eben die Schleife nicht.

luzifer 6. Dez 2004 20:37

Re: Endlosschleife???
 
Zitat:

Zitat von IngoD7
Jedenfalls scheinst du nicht der einzigste zu sein, der das Malheur kennt ....

Suche mal per Google nach TTable + Eof.

Und wenn alle Brücken brechen, probiere mal ob - wie auch in der Online-Hilfe vorgeschlagen - die Verwendung von TTable.DisableControls und TTable.EnableControls was bringt.

Danke IngoD7, :thumb:

mit google schauen war ne gute Idee, :pale: hätt ich ja och selber drauf kommen können.
Und zwar hab ich bei Delphi-Source.de was gefunden.

Wen´s interessiert: http://www.delphi-source.de/tutorials/dbteil2/?page=8

Also der Tip mit TTable.DisableControls und TTable.EnableControls war gut. Ich wusst ja nicht das graphische Komponenten da ne Auswirkung drauf haben.

:coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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-2025 by Thomas Breitkreuz