Jens Gyldenkærne Clausen skrev:
> Jeg har kørt en minitest af metoden, og den ser ud til at
> virke fint. Det vil dog nok være en god ide at tjekke hvordan
> den opfører sig ved lidt større datamængder.
Nu har jeg testet lidt mere.
Første omgang - datatabel med 50 poster, autoid fra 1-50 (ingen
huller i rækken).
Jeg kørte følgende VBA-kode:
Sub testme()
Dim i As Integer
For i = 1 To 100
CurrentDb.Execute _
"INSERT INTO stat ( tID ) " & _
"SELECT TOP 3 Tabel1.Id FROM Tabel1 " & _
"ORDER BY Rnd(id);"
Next
End Sub
Efter en kørsel havde to poster været udtrukket én gang (id 3 og
19), mens de to poster der havde været udtrukket flest gange var id
25 og 42 (13 gange). Ikke nogen særlig god fordeling - men alle
poster havde dog været udtrukket.
Efter yderligere 3 kørsler (1200 udtræk i alt) var de mindst
populære id-numre 12, 30, 41 og 48 med hver 15 trækninger. Mest
populære id-nummer var her nr. 17 med 34 trækninger.
Nyt forsøg - stadig med 50 rækker, denne gang med huller i id-
værdierne (laveste id = 3, højeste id = 83).
Første kørsel af koden (300 rækker): 4 id-numre udtrukket 2 gange
(laveste), 2 rækker udtrukket 11 gange (højeste). Alle rækker
udtrukket mindst én gang.
Efter fire kørsler (1200 rækker): Et id-nummer (43) med 16
trækninger (laveste). Et id-nummer med 35 trækninger (højeste).
Så vidt jeg kan vurdere er det ikke en overvældende god fordeling,
men hvis man kan leve med at alle poster ikke udtrækkes lige ofte,
så er det en nem og hurtig metode.
NB: For en ordens skyld bør jeg oplyse at resultaterne fra den
første omgang (med id fra 1-50) er opnået med en løkke på 101
forespørgsler (i = 0 TO 100) - det vil sige 303 og 1212 rækker i
stedet for 300 og 1200. Det ændrer dog ikke på det samlede billede.
Testen er foretaget på Access 2000 SP3 under Windows 2000.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på
http://usenet.dk/netikette/citatteknik.html