Autor Beitrag
Nomis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Sa 02.11.02 23:35 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
3:
4:
repeat
  Zahl := random(127) + 1;
  table1.Locate('ID', zahl, [loCaseInsensitive]);
until table1.FieldByName('okay').AsInteger = 0;


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Nomis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: So 03.11.02 12:55 
Danke dir manchmal kommt man eben nicht auf die einfachsten sachen
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...