"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Zufallsgenerator in Access

da.r00kie 16.08.2005 - 13:17 2560 3
Posts

da.r00kie

Big d00d
Avatar
Registered: May 2002
Location: sunnyOSTTIROL!!
Posts: 146
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?? :confused:

hctuB

Bloody Newbie
Avatar
Registered: Feb 2002
Location: Pampa LL
Posts: 2404
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
Avatar
Registered: Aug 2005
Location: vienna/ooe
Posts: 206
Hier ein kurzer denkanstoß: ;)

Code:
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
Avatar
Registered: Aug 2005
Location: vienna/ooe
Posts: 206
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:

Code:
with DataRS
   .movefirst
   .findfirst (.[DEINEZAHL]=Randomzahl)
   if .nomatch then
      'EINTAGEN
   end if
end with
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz