Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi endlosschleifenfehler mit while (https://www.delphipraxis.net/111361-endlosschleifenfehler-mit-while.html)

5etH 2. Apr 2008 09:38


endlosschleifenfehler mit while
 
Hallo Zusammen,

ich habe ein Programmfragment was 2 Tabellen miteinander vergleicht, die gespeicherte, und die aktuell geänderte. Leider springt er nicht aus der Whileschleife raus, obwohl die Zählvariable über den Row bzw ColCount hinaus geht. Ich finde den Gehler nicht, vielleicht könnt ihr mir weiter helfen

hier einmal das Fragment:

Delphi-Quellcode:

procedure TForm2.Button5Click(Sender: TObject);
var i,x : Integer;
begin
  i := 1;
  x := 1;
  LoadStringGrid(form1.StringGrid2, 'c:\DB\DB.txt');
 
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;

if gespeichert = false then
  begin
    if MessageDlg('Fenster schließen ohne speichern!?',
    mtWarning, [mbYes, mbNo], 0, mbYes) = mrYes then
      begin
      form1.close;
      form2.close;
      end;
  end
  else
    begin
      form1.close;
      form2.close;
    end;
end;
schonmal vielen Dank für eure Hilfe

euer 5etH

Klaus01 2. Apr 2008 09:41

Re: endlosschleifenfehler mit while
 
Guten Morgen,

vielleicht läuft es so besser?

Delphi-Quellcode:
gespeichert := false;
while (not gespeichert) and (i <= form1.StringGrid1.rowcount -1) do
    begin
      while (not gespeichert) and (x <= form1.stringgrid1.ColCount -1) do
        begin
          if form1.stringgrid1.cells[i,x] = form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := true;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;
[edit]Code korregiert [/edit]

Grüße
Klaus

5etH 2. Apr 2008 09:45

Re: endlosschleifenfehler mit while
 
nein funktioniert leider nicht

TeronG 2. Apr 2008 09:45

Re: endlosschleifenfehler mit while
 
Nur so btw:
Tipps:
  • Prüfe nie auf '= true'! Wenn du das haben willst, lasse das '= true' einfach weg, das hat den selben Effekt.
  • Genauso ist es mit '= false', hänge dann einfach ein 'not' vor die Bedingung, z.B.: if not Checked then
[equote:f4204a376d="Warum?"]Hier findest du eine Antwort
[/equote:f4204a376d]

Klaus01 2. Apr 2008 09:48

Re: endlosschleifenfehler mit while
 
Zitat:

Zitat von 5etH
nein funktioniert leider nicht

Ich habe oben noch mal etwas geändert.
Hast Du immer noch die "Endlosschleife"?
Grüße
Klaus

DeddyH 2. Apr 2008 09:48

Re: endlosschleifenfehler mit while
 
Delphi-Quellcode:
while (gespeichert) and (i < form1.StringGrid1.rowcount) do
    begin
      while (gespeichert) and (x < form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;
So vielleicht?

[edit] <= in < geändert [/edit]

5etH 2. Apr 2008 09:49

Re: endlosschleifenfehler mit while
 
1. danke für den tipp wegen dem auf true und fals testen

2. wieso sollte ich vor der schleife gespeichert auf false setzen ? ... dann brauche ich sie nicht ... also jedesmal wenn ich die tabelle temporär speicher also nicht in einer datei wird gespeichter auf true gesetzt ... ich will erreichen, dass er abfragt beenden ohne speicher...

also im debugger zählt er die variable bis ins unendliche obwohl er ja abbrechen soll sobald die zahl größer als der row oder colcount ist.

NormanNG 2. Apr 2008 09:49

Re: endlosschleifenfehler mit while
 
Hi,

du muss die innere Zählvariable zurücksetzen:
Delphi-Quellcode:
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
     x := 1;  <--------------- hier
    end;

DeddyH 2. Apr 2008 09:51

Re: endlosschleifenfehler mit while
 
Auf jeden Fall ist das or falsch und muss durch and ersetzt werden.

5etH 2. Apr 2008 09:59

Re: endlosschleifenfehler mit while
 
schon aber er kommt aus der zweiter schleife wie makiert nicht heraus

Delphi-Quellcode:
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do <--------------- hier
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
     x := 1;  
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Seite 1 von 2  1 2      

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