Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Beim Zufallsgenerator Wiederholung vermeiden?

Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 18:58:00
OlliB
Hallo liebe Forumsgemeinde...
ich hoffe, mir kann hier bei einem kleinen Problem geholfen werden.
Mittels Button in einer UF wird in einer Access-Datenbank zuerst in Spalte "Gewinn" nach einem bestimmten Wert gesucht. Die Anzahl der Treffer hier sehr unterschiedlich (bis zu 50). In dieser Trefferliste soll nun per Zufallsgenerator eine Zeile ausgewählt werden und die Inhalte werden dann in der UF angezeigt. So weit so gut...das hab ich mit dem untenstehenden Code realisieren können.
Problem ist, wenn der Button danach wieder betätigt wird, soll der Zufallsgenerator bereits ausgewählte Zeilen nicht mehr erneut anzeigen, sprich, er soll erkennen, dass die ID-Nummer in der 1. Spalte der Access-Datenbank bereits einmal aufgerufen wurde. Und dies soll er sich so lange merken, wie die aktuelle Sitzung andauert.
Das bekomme ich nicht hin....bzw. nur über Umwege. Könnte die ID-Nummern zwar in ne Tabelle speichern und darüber dann prüfen, aber es gibt bestimmt einen eleganteren und einfacheren Weg, oder?
Wäre top, wenn mir wer helfen könnte....
Hier mal ein Auszug aus dem Code:
Dim lastrec As Long, z As Integer
Dim i As Integer, dummy As Integer
Dim wahl: wahl = Array(1, 2, 3, 4)
Dim FrageNr As Long
Dim db As DAO.Database, tbl As DAO.TableDef, rs As DAO.Recordset
GetSQLData
On Error Resume Next
Set db = OpenDatabase(ThisWorkbook.Path & dbfile, True, True)
dbTable = Mid(dbQry, InStr(dbQry, "FROM") + 5)
Set tbl = db.TableDefs(dbTable)
ReDim GestellteFrage(tbl.RecordCount)
Set rs = db.OpenRecordset(dbQry & " WHERE (FZ1=""Thema"");")
rs.MoveFirst
'Filtern nach Spielstufen
Set rs = db.OpenRecordset(dbQry & " WHERE ((" & dbTable & ".Min = " & Gewinn(Spielstufe) & "));")
If Err.Number 0 Then MsgBox Err.Description: Exit Sub
On Error GoTo 0
rs.MoveLast
lastrec = rs.AbsolutePosition
If rs.RecordCount 'Auswahl nach Zufallsprinzip
Randomize Timer
z = 0: Do
FrageNr = Int(Rnd * lastrec)
rs.MoveFirst
rs.Move FrageNr
z = z + 1
Loop Until GestellteFrage(rs![Id]) = 0 Or z > lastrec Or lastrec = 0
GestellteFrage(rs![Id]) = FrageNr

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 19:21:00
Nepumuk
Hallo Olli,
ein Beispiel:
Public Sub Beispiel()
    Const TEST_KEY = "Test"
    Dim intIndex As Integer
    Dim objDict As Object
    Set objDict = CreateObject("Scripting.Dictionary")
    For intIndex = 1 To 2
        If Not objDict.Exists(TEST_KEY) Then
            objDict.Add TEST_KEY, TEST_KEY
        Else
            MsgBox "Gibt's schon"
        End If
    Next
End Sub

Einfach mal mit F8 durchsteppen, damit du siehst wie es funktioniert.
Gruß
Nepumuk

Anzeige
AW: Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 19:49:00
OlliB
Hallo Nepumuk,
prima....werd ich gleich mal testen und dann noch einmal melden..auf jeden Fall schon mal DANKE ;O)
Gruß
Olli

AW: Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 22:53:41
OlliB
Hallo..
hab mich mal an dem Code nun versucht...grds. versteh ich ihn auch, aber ich komme dennoch irgendwie da nicht weiter...
Die Konstante muss sich bei jedem Button-Klick erweitern, also um die jeweilige ID-Nr. Und die anschl. Prüfung muss dann alle Constanten einzeln durchgehen. Da die Anzahl aber variable ist, komme ich da nicht weiter...
Vielleicht noch zum Hintergrund, warum ich eine Lösung benötige:
Wenn ich bspw. "nur" 4 Zeilen in der abgefragten Kategorie hab, dann liegt die Wahrscheinlichkeit, dass der Zufallsgenerator nur einen der ersten beiden Zeilen auswählt merkwürdigerweise bei 100 %. Die Zeilen 3 und 4 wählt er gar nicht aus. Egal, wie oft der Button den Zufallsgenerator neu startet. Daher der Gedanke bzgl. Ausschluss bereits aufgerufener ID (=Zeilen)
Über eine Hilfe bezogen konkret auf meinen Code würde ich mich echt freuen.

Anzeige
AW: Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 23:16:00
Nepumuk
Hallo Olli,
du hast den Sinn des Beispiels nicht verstanden. Die Konstante ist doch nur dazu da, damit du siehst, dass es nicht möglich ist eine Schlüsseleintrag zweimal anzulegen. An Stelle der Konstanten kommt natürlich deine ID.
Bei VBA - gut sollte das umsetzen in deinen Code kein Problem sein. Du musst doch nur eine Do - Loop - Schleife um die Auswahl zu legen. So lange Schlüssel gefunden werden, die schon benutzt wurden bleibst du in der Schleife, sobald du einen unbenutzen findest trägst du ihn ein und verlässt du sie.
Gruß
Nepumuk

AW: Beim Zufallsgenerator Wiederholung vermeiden?
04.06.2008 08:08:58
OlliB
Hallo Nepumuk,
na ja...das mit der Selbsteinschätzung ist immer so ne Sache...ich dachte zumindest, meine Kenntnisse wären gut ;O)
Ich versuch mich noch einmal dran, vielleicht war es gestern einfach nur schon zu spät für mich. Wenn es nicht klappt, dann melde ich mich noch einmal
Gruß
Olli
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige