DBGrid + Zufallsgenerator
-
So ich habe heute meinen Fragetag

1.Frage:
Ich möchte gern per Zufallsgenerator eine Zahl zwischen 1 und 10 bestimmen.
Wenn jetzt z.B. die 3 gewählt wird, soll aus einem DBGrid jeder 3. Eintrag gefiltert werden (also 3.,6.,9. usw.).
Der Zufallsgenerator ist ja kein Problem.
Nur finde ich keine richtige Lösung wie man den Filter dazu einstellen könnte.
Nach Namen o.ä. sortieren ist ja kein Problem aber nach Datensätzen.2.Frage:
Sollte das mit dem Filter irgendwie funktionieren:
Sollen die Datensätze in eine neue Tabelle kopiert werden. Es soll aber auch bei mehrmaligem Programmstart kein Datensatz 2mal ausgegeben werden.
Kann man Datensätze irgendwie markieren damit sie beim nächsten Mal übersprungen werden. Oder gibt es eine andere Lösung dazu ?Vielen Dank schonmal
-
Wie währe es wenn du den Index der Tabelle zu rate ziehst?
-
mediadealer,
einfache Lösungen gibt es da imho nicht. Du brauchst bestimmt ein oder zwei Hilfs-Felder in Deiner Tabelle. Desweiteren hängt es von der Datenbank(??) ab, wie kompliziert die Sache wird.
-
Hallo
das ist abhaengig von deiner DB
(zB Autoincrement)Ohne weitere Infos von deiner Seite ist es sehr schwer dir zu helfen
- welches DB
- wird in der Tabelle nur eingetragen oder auch geloeschtMfG
Klaus
-
O.K.
Kleine Projektbeschreibung:
Adressverwaltung
Mein Programm startet :-).
Man sieht ein paar Buttons, zum öffnen, beenden, tabelle leeren, drucken usw.
Außerdem ist da ein leeres DBGrid.
Der Benutzer wählt im Öffnen-Dialog eine Datenbank, bevorzugt dbase3, weil die sich "relativ" problemlos aus Excel-Tabellen erstellen lässt.
Dazu tippt er die Anzahl der gewünschten Datensätze ein (z.B. 5000).
Diese 5000 sollen im DBGrid angezeigt werden. Alles kein Problem.Bevor das Grid gefüllt wird sollen allerdings ,für den Benutzer nicht sichtbar,
einige Prozesse ablaufen.Ich lasse beim Programmstart versteckt einen Zufallsgenerator laufen, der eine Zahl zwischen 1 und 30 wählt und in eine Variable packt.
In der Datenbank ist eine Spalte die die Datensätze von 1 bis wasweißichwieviel
nummeriert.Ich versuche jetzt einen Filter zu schreiben der vor der Anzeige durchlaufen wird. Der Filter soll sich die Zufallszahl/Variable nehmen, z.B. die 5 und nur jeden 5. Datensatz anzeigen.
Es sollen nicht mehr als die gewünschten 5000 angezeigt werden.Datensätze die schoneinmal angezeigt wurden, sollen beim nächsten Programmstart übergangen werden.
Hmmm... das sollte es eigentlich grob gewesen sein.
Ich sitz wie gesagt momentan an dem Filter und versuche ihm die Variable zu übergeben, finde aber keinen befehl dazu. Egal wie ich es versuche, mit klammern, hochkommas usw. es kommt immer sowas wie Fehler: Field zufall Not Found.
Die Standardbeispiele wie "Vorname=Hans" usw helfen mir ja da nicht.Wie ich den Teil mit dem Übergehen der Datensätze umsetzen soll, weiß ich überhaupt nicht. Das ist aber erstmal nicht vorrangig.
Ich hoffe Ihr könnt mit dem Gestammel irgendwas anfangen

Danke schonmal
-
mediadealer,
Du könntest vielleicht auch mit zwei Tabellen arbeiten. Dann müßtest Du keine Hilfs-Felder einfügen oder mit abenteuerlichen Filter-Bedingungen jonglieren.Tabelle A: Ausgangs-Datenmenge
Tabelle B: für die Anzeige (die gefilterten Datensätze)Algorithmus:
- Zufallszahl z ermitteln
- alle Datensätze der Tabelle A durchlaufen und jeden z. Datensatz in Tabelle B verschieben (==> in Tabelle A verbleibt der Rest)
- Tabelle B anzeigen
- Tabelle B leeren
- weiter mit 1)
-
Hi,
daran hab ich auch schon gedacht.
Aber ich weiß nicht wie ich es hinbekommen soll das jeder z. Datensatz in eine
neue Tabelle verschoben wird.
Vielleicht steh ich im Moment auch bisschen daneben, sitz schon die ganze nacht dran
Also ich habe es jetzt hinbekommen das die Zufallszahl als Filter funktioniert.
Und zwar so:void __fastcall TForm2::Table1FilterRecord(TDataSet *DataSet, bool &Accept) { int Value = Table1->FieldByName("CUSTNO")->Value; Accept = (Value == zufall); }Jetzt müsste man es ja nur noch hinbekommen das zu zufall immer der eigene wert addiert wird und das auch dieses ergebnis dann angezeigt wird.
Nur er schreibt irgendwie immer nur einen Datensatz in das Grid.