Beim Zufallsgenerator Wiederholung vermeiden?
03.06.2008 18:58:00
OlliB
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