Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi repeat - until abfrage (https://www.delphipraxis.net/11379-repeat-until-abfrage.html)

Snyderburn 5. Nov 2003 13:34


repeat - until abfrage
 
Hi, ich habe ein kleines Problem mit einer Abfrage. Hier ist erstmal der Quellcode:
Delphi-Quellcode:
        dm1.T_anschrift.First;
        repeat
        if idzumbearbeiten = dm1.T_anschrift.fieldbyname('ID_anschrift').asinteger then
          begin
            ....
            bearbeitenzaehler := idzumbearbeiten;
          end
          else
          begin
            dm1.T_anschrift.Next;
            bearbeitenzaehler := bearbeitenzaehler + 1;
          end;
        until idzumbearbeiten = bearbeitenzaehler;
diese Schleife funktioniert fast ohne Probleme. Wenn der "dm1.T_anschrift.Next" zeiger auf dem 20. Datensatz zeigt dann kommt eben eine Fehlermeldung: Allgemeiner SQL Fehler!. Bis zum 20. Datensatz läuft es ohne Probleme. Auch die "Wahr" Abfrage funktioniert bis dahin. Naja, wie gesagt, ab dem 20. DS passiert nix mehr ausser die Fehlermeldung.
Woran kann das liegen?!?!

mfg
Snyderburn

MrSpock 5. Nov 2003 13:56

Re: repeat - until abfrage
 
Hallo Snyderburn,

ich bin ziemlich sicher, dass du Next aufrufst, obwohl die EOF Bedingung schon True ist und das geht dann schief :mrgreen: .

Touchdown 5. Nov 2003 13:59

Re: repeat - until abfrage
 
Es fehlt auf jeden Fall ein 'or EOF', könnte ja, daß die ID in der Tabelle nicht vorhanden ist.

Snyderburn 5. Nov 2003 14:05

Re: repeat - until abfrage
 
Ich habe da jetzt ein EOF bei der Until anweisung eingestellt, aber der Fehler kommt immer noch. Der Fehler ist nämlich bei der dm1.t_anschrift.NEXT anweisung und nicht beim Until.

MrSpock 5. Nov 2003 14:49

Re: repeat - until abfrage
 
Hallo Snyderburn,

falls die EOF Bedingung schon beim Eintritt in die Schleife True wäre, erzeugst du auch eine exception. Und dass die exception bei dem Aufruf von Next ausgelöst wird, spricht dafür, dass die EOF Bedingung Schuld ist.

Touchdown 5. Nov 2003 15:47

Re: repeat - until abfrage
 
Für solche Fälle bevorzuge ich eine While-Scheife.

Delphi-Quellcode:
while (not dm1.T_anschrift.eof) and (idzumbearbeiten = bearbeitenzaehler) then
begin
  // ...
end;
Musste mal testen. So schießt man sich nicht so leicht in den Fuß! :wink:

Snyderburn 6. Nov 2003 07:42

Re: repeat - until abfrage
 
Hi!

EOF hat meiner Meinung nach nichts mit dem Fehler zu tun. Ich habe nämlich in der Datenbank gute 100 Datensätze drin und nach dem 20 Datensatz spricht er eine Fehlermeldung aus. Er liest also nicht den 21. Datensatz!!!!!!
Ich habe es auch mit der while schleife gemacht, hier ist aber derselbe Fehler.

Memo 6. Nov 2003 11:58

Re: repeat - until abfrage
 
Kannst du die Zeile in der der Fehler kommt mal zeigen?

Snyderburn 6. Nov 2003 13:14

Re: repeat - until abfrage
 
ja sicher kann ich dir die Zeile zeigen:

Delphi-Quellcode:
dm1.T_anschrift.Next;
Wenn Du dir oben den Code anguckst, den ich eingestellt habe, dort siehst Du die Zeile auch! Da kommt immer der Fehler.

markon 6. Nov 2003 13:20

Re: repeat - until abfrage
 
@ Snyderburn
in deinem aufgeführten beispiel wird der satzzeiger ja nur auf den nächsten satz gestellt wenn die bedingung in den else-zweig geht. bei "then" wird er ja gar nicht weiter gestellt. ist das absicht?
weil wenn der satzzeiger nicht weitergestellt wird dann greifst du ja immer auf den selben satz zu.


Delphi-Quellcode:
dm1.T_anschrift.First;
while (not dm1.T_anschrift.eof) and (idzumbearbeiten = bearbeitenzaehler)do bgein
  if idzumbearbeiten = dm1.T_anschrift.fieldbyname('ID_anschrift').asinteger
     then begin
           ....
           bearbeitenzaehler := idzumbearbeiten;
          end
     else begin
           // dm1.T_anschrift.Next; glaube hier nicht
           bearbeitenzaehler := bearbeitenzaehler + 1;
          end;
  dm1.T_anschrift.Next; // glaube hier muss das hin
end; {while}idzumbearbeiten = bearbeitenzaehler;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.
Seite 1 von 3  1 23      

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