Entwickler-Ecke

Datenbanken - Zufallszahlen aussparen


Nomis - Sa 02.11.02 23:35
Titel: Zufallszahlen aussparen
Bin gerade dabei einen Vokabeltrainer zu basteln und habe dabei eine BDE Tabelle. Dort gibt es unter anderem ein Feld "ID" und "okay".
Mit

zahl := random(127)+1;

und


Quelltext
1:
vokabel := table1.Locate('ID', zahl, [loCaseInsensitive]);                    


lasse ich mir per Zufall die Vokabeln anzeigen.
Nun will ich aber gerne nur die lernen die ich nicht kann und lasse mir in Okay bei richtigem Vergleich eine 1 Schreiben.

Jetzt hänge ich ein bisschen da ich bei random die Zahlen aussparen möchte, (ID) bei denen bei "Okay" eine 1 Steht hat da jemand eine Idee

Danke schon mal im Vorraus


LCS - So 03.11.02 09:21

Hi
wenn du den Datensatz gelesen hast, kannst du feststellen ob im Feld "Okay" eine 1 und wenn ja musst du das Ganze wiederholen:

Quelltext
1:
2:
3:
4:
repeat
  Zahl := random(127) + 1;
  table1.Locate('ID', zahl, [loCaseInsensitive]);
until table1.FieldByName('okay').AsInteger = 0;


Gruss Lothar


Nomis - So 03.11.02 12:55

Danke dir manchmal kommt man eben nicht auf die einfachsten sachen


Cashels - So 03.11.02 13:14

LCS hat folgendes geschrieben:
wenn du den Datensatz gelesen hast, kannst du feststellen ob im Feld "Okay" eine 1 und wenn ja musst du das Ganze wiederholen:


Nana, die Lösung find ich aber nicht so elegant. Stell dir ne Tabelle vor mit 1000 Einträgen wovon 999 als OK gekennzeichnet sind. Hats du da schon mal ausgerechnet Wie oft du deine Schleife durchläufst bevor du diesen letzten Eintrag findest :lol:

Ich schlag deshalb lieber vor, erst mit einer SQL Abfrage die gesuchten Datensätze zu filtern, und nur auf dieser Ergebnismenge einen Zufallsdatensatz finden... Nur kannst du dann natürlich nicht mehr über Locate nach deinem ID Feld suchen, sondern könntest stattdessen mit RecordCound und RecNo arbeiten um deinen DB-Cursor zu positionieren.

Gruss
Tom


LCS - So 03.11.02 13:26

Hi
Cashels hat folgendes geschrieben:

Nana, die Lösung find ich aber nicht so elegant. Stell dir ne Tabelle vor mit 1000 Einträgen wovon 999 als OK gekennzeichnet sind. Hats du da schon mal ausgerechnet Wie oft du deine Schleife durchläufst bevor du diesen letzten Eintrag findest

Da hast du vollkommen Recht. Ich würde das auch nicht so machen. :wink: Aber das war ja auch gar nicht seine Frage. Da wäre er bestimmt noch selber draufgekommen.

Gruss Lothar