Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit Schleife und Zufallszahl (https://www.delphipraxis.net/169429-problem-mit-schleife-und-zufallszahl.html)

Privateer3000 19. Jul 2012 06:50

Delphi-Version: 2006

Problem mit Schleife und Zufallszahl
 
Hallöchen,
für mein "Bürospielchen" ärgert mich folgendes Problem:
Delphi-Quellcode:
auslosung(ausquer:TADOQuery;auskw,jahr:String;anzahl:Integer)
...
if gefun > 3 then begin
i:=0;
...
while (i < anzahl) do begin
   Randomize;
   gezog:=Random(gefun-1);//zufälliger DS
   ausquer.RecNo:=gezog;// DSZeiger setzen
   auswahl.Add(ausquer.fieldbyname('Kollege').AsString+'  '+ausquer.fieldbyname('Phrasenschwein').AsString);
   inc(i);
  end;
Hin und wieder kommt dann eine Fehlermeldung
"Die Argumente sind vom falschen Typ,liegen außerhalb des Gültigkeitsbereiches oder
sind miteinander unvereinbar"
Nun habe ich per Test eingegrenzt dass die Schleife der Übeltäter ist.
Aus einer DB werden DS ermittelt und aus diesen zufällig anzahl x gezogen.
Die Variablen:
anzahl wird der procedure übergeben
gefun ist ein Recordcount
auswahl ist TStrings

Warum klappt das mehrfach dann aber wieder knallts???
Hat jemand eine Idee?

PS: ich weiß, ja ich hab Langeweile....

Furtbichler 19. Jul 2012 06:57

AW: Problem mit Schleife und Zufallszahl
 
Na, was für einen Wert hat denn 'gezog', 'gefun' und 'ausquer.Recordcount' wenn der Fehler kommt?
Tipp:
Delphi-Quellcode:
while (i < anzahl) do begin
    Randomize; // <<<<<< sowieso überflüssig hier
    gezog:=Random(gefun-1);//zufälliger DS
    try
      ausquer.RecNo:=gezog;// DSZeiger setzen
      auswahl.Add(ausquer.fieldbyname('Kollege').AsString+' '+ausquer.fieldbyname('Phrasenschwein').AsString);
{*}  except
{*}   ausquer.RecNo:=gezog;// <<<<<<<< Breakpoint auf diese Stelle
{*}   auswahl.Add(ausquer.fieldbyname('Kollege').AsString+' '+ausquer.fieldbyname('Phrasenschwein').AsString);
{*} end;
    inc(i);
   end;
Aber ei viel wicht Frag ist do, wies besteh dei Varnam nu au den ers Silb? :stupid: (Rethorische Frage)

mkinzler 19. Jul 2012 06:58

AW: Problem mit Schleife und Zufallszahl
 
In welcher Zeile?

DeddyH 19. Jul 2012 06:59

AW: Problem mit Schleife und Zufallszahl
 
Man sollte Randomize nur einmalig aufrufen, und Random kann auch 0 zurückgeben. Wenn man da 1 subtrahiert, welchen Datensatz liest Du denn dann aus?

Furtbichler 19. Jul 2012 07:03

AW: Problem mit Schleife und Zufallszahl
 
Menno, Spielverderber. Er sollte selber drauf kommen.

Privateer3000 19. Jul 2012 18:38

AW: Problem mit Schleife und Zufallszahl
 
Viel Dank Leute,
ihr habt natürlich Recht.
Recordcount -1 ist Unsinn.
Randomize wird nun vor der Schleife initialisiert.
Exception ist natürlich besser,
wie macht man dass ungültiges übersprungen wird
so das auf jeden Fall anzahl x wiederholt wird?

Viele Grüße

DeddyH 19. Jul 2012 18:41

AW: Problem mit Schleife und Zufallszahl
 
Schließ doch Ungültiges von vornherein aus, das ist doch besser als eine Exception.


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