Zufallsgenerator in Access
da.r00kie 16.08.2005 - 13:17 2560 3
da.r00kie
Big d00d
|
Sers alle zam! Hab folgendes Problem im Access: Hab eine Tabelle mit Teilnehmern für einen Wettbewerb - Tabelle heisst "climbers" - Primärschlüssel ist "ID". Jetzt möchte ich dass jeder Teilnehmer eine Startnummer per Zufallsgenerator zugelost bekommt ..... NUR WIE??
|
hctuB
Bloody Newbie
|
schreib ein makro welches eine Random nummer in die Tabelle (vorgegebenes Feld added? Bevor du zurückschreibst schaust du in der tabelle nach ob der Wert nicht bereits vorhanden ist.
|
malu
Big d00d
|
Hier ein kurzer denkanstoß: Sub PickRandom()
Dim db As Database
Dim tdf As TableDef
Dim fld As Field
Dim rst As Recordset
Dim strSQL As String
Dim strTableName As String
' 1: Create a new temporary table containing the required fields
strSQL = "SELECT tblStaff.Firstname, tblStaff.Lastname " & _
"INTO tblTemp " & _
"FROM tblStaff;"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
' 2: Add a new field to the new table
Set db = CurrentDb()
Set tdf = db.TableDefs("tblTemp")
Set fld = tdf.CreateField("RandomNumber", dbSingle)
tdf.Fields.Append fld
' 3: Place a random number in the new field for each record
Set rst = db.OpenRecordset("tblTemp", dbOpenTable)
rst.MoveFirst
Do
Randomize
rst.Edit
rst![RandomNumber] = Rnd()
rst.Update
rst.MoveNext
Loop Until rst.EOF
rst.Close
Set rst = Nothing
' 4: Sort the data by the random number and move the top 25 into a new table
strTableName = "tblRandom_" & Format(Date, "ddmmmyyyy")
strSQL = "SELECT TOP 25 tblTemp.Firstname, tblTemp.Lastname " & _
"INTO " & strTableName & " " & _
"FROM tblTemp " & _
"ORDER BY tblTemp.RandomNumber;"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
' 5: Delete the temporary table
db.TableDefs.Delete ("tblTemp")
End Sub
hth mlu
|
malu
Big d00d
|
rst![RandomNumber] = Rnd()rnd() erzeugt eine pseudo zufallszahl zw. NULL (!) und 1. diese kannst du dann noch mit deinem maxwert multiplizieren. das ganze baust in dein macro ein. und fertig! wie hctuB schon richtig geschrieben hat musst halt erst testen obs die zahl nicht schon gibt. also so ca: with DataRS
.movefirst
.findfirst (.[DEINEZAHL]=Randomzahl)
if .nomatch then
'EINTAGEN
end if
end with
|