Avatar billede ossian Nybegynder
12. december 2006 - 08:53 Der er 8 kommentarer og
2 løsninger

Lave random udtræk fra Access 2000 database

Hejsa,

Jeg har et problem jeg søger en løsning på. Jeg har søgt her på eksperten, men desværre ikke fundet noget der kunne hjælpe mig.

I forbindelse med opbygningen af et konkurrencemodul, skal jeg udtrække en tilfældig vinder, blandt de deltagere der har svaret korrekt.

Meget forenklet ser min SQL sådan her ud:

set findvinder = connection.Execute("SELECT * FROM deltagere WHERE svar = '" & strKorrektSvar & "'")

Under normale omstændigheder ville jeg kunne bruge VBScript til at generere et tal ml. højeste og laveste deltager id. Men da man som udgangspunkt må vurdere at er der er nogle der vil svare forkert - vil der altså være "huller" i rækken af ID'er..

En mulig løsning kunne være følgende:

- Loop gennem alle deltagere der har svaret korrekt og læg deres deltager id i et array
- Generer et tilfældigt tal indenfor antallet af rækker i mit array
- Gå til den valgte række i arrayet, træk deltager id'et ud og lav en ny SQL mod access

Hvad siger I til dette - Lyder det som en løsning? I må meget gerne komme med eksempler, da jeg ikke er så stærk i arrays..

På forhånd tak :-)
Avatar billede kinderaeg Nybegynder
12. december 2006 - 08:59 #1
Avatar billede ossian Nybegynder
12. december 2006 - 09:46 #2
Hej Kinderaeg,

Tak for dit input - dog har jeg brug for et kodeeksempel på ovenstående til at arbejde videre med. Det er ikke modellen, men koden jeg mangler.
Avatar billede radiohead Nybegynder
12. december 2006 - 09:48 #3
Noget i stil med måske?

While NOT rs.EOF
    strID = strID & "; " & rs("id")
rs.MoveNext
Wend

arrID = Split(strID, "; ")

MaxID = Ubound(arrID) - 1
MinID = Lbound(arrID) + 1

Randomize
  RandomNumber = Int((MaxID - MinID) * Rnd) + 1
   
    SQL = "SELECT * FROM tabel WHERE id=" & arrID(RandomNumber)
Avatar billede kinderaeg Nybegynder
12. december 2006 - 10:01 #4
Går du fra at du har et autonummereringsfelt, som i nedenstående eksempel hedder ID:

SELECT * FROM deltagere WHERE svar = '" & strKorrektSvar & "' Order By Rnd(Now())+Rnd(Right([ID],3))*100000
Avatar billede ldanielsen Nybegynder
12. december 2006 - 12:35 #5
SELECT * FROM deltagere WHERE svar = '" & strKorrektSvar & "' ORDER BY Rnd(ID)

- er nok. Stadig går vi ud fra at du har et autonummereringsfelt der hedder ID
Avatar billede ldanielsen Nybegynder
19. december 2006 - 11:39 #6
Skal denne tråd ikke lukkes?
Avatar billede ossian Nybegynder
21. december 2006 - 10:49 #7
Hej,

Jeg beklager mit sene svar..
Jeg har løst problemet selv efter den model jeg selv ridsede op. Dog giver jeg gerne mine point for jeres input.

Til Idanielsens forslag, så er der tale om Access 2000 som ikke understøtter ORDER BY Rnd, dette er først fra Access 2002.
Avatar billede ossian Nybegynder
21. december 2006 - 10:49 #8
Smid nogle svar :)
Avatar billede kinderaeg Nybegynder
22. december 2006 - 09:00 #9
Jamen svar, så ;)
Avatar billede ldanielsen Nybegynder
22. december 2006 - 16:07 #10
Rnd() er understøttet i Access 2000, og sikkert også før det ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester