Randomize

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Ik heb de volgende vraag over willekeurig record uit een query halen:

Ik heb een tabel gemaakt met de volgende velden:
ID : autonummering
Vraag:
Antwoord1
Antwoord2
Antwoord3
Antwoord4
Juiste antwoord:

Vervolgens een query gemaakt van deze velden.
Nu wil ik dat iedere keer als de query wordt geopend er andere 10 vragen worden egsteld. Ik heb dit gedaan door bij eigenschappen de Topwaarde in te stellen op 10. Vervolgens in de query toevoegen : RND([ID])

Ik krijg nu keurig iedere keer 10 vragen. De volgende keer wederom 10andere vragen enz. Dus het lijkt prima te werken, maar als ik het programma afsluit, opnieuw opstart krijg ik vervolgens weer precies dezelfde setjes vragen van 10 vragen als de vorige keer.

Dus ik start op krijg vragen 1-6-8-12-20-100.
De volgende set: 38-96-193-213-14. enz.

Ik sluit af en vervolgens start het programma weer opnieuw: De bovenstaande setjes worden precies weer het zelfde samen gesteld.
Dus weer:
Dus ik start op krijg vragen 1-6-8-12-20-100.
De volgende set: 38-96-193-213-14. enz.

Wie kan mij helpen.

Groet
 
Willekeurige getallen lukt door de systeem tijd er bij te betrekken.
informatie microsoft

Jammer is wel dat ik niet precies weet hoe je dit zonder vba doet in acces.
Mogelijk door now() of nu()
RND(NOW())


mvg leo
 
Hallo,

Bedankt voor de snelle reactie maar de expressie van mij dus: rnd([id])
heeft dezelfde werking als de Uw ook steeds dus dezelfde setje vragen



id= nummer van de vraag
 
Randomize initialiseren zorgt voor willekeurige nummers, maar zoals eerder gezegd, ik weet helaas niet hoe je dit in een query verwerkt.
Misschien lukt het beter om rnd zonder getal te gebruiken en met upper en lower aan te geven wat de range is.
informatie (engels)
 
Ik heb een standaard code voor random, het willekeurige getal is GIntTeller. Dit is overigens wel in VBA.
De boven grens = maximaal mogelijke getal
De ondergrens = laagst mogelijke getal.

Code:
Dim GIntTeller As Integer
GIntTeller = 1

    'Genereer getal
    'Int((Bovengrens - Ondergrens + 1) *RND+ondergrens)
Randomize
GIntTeller = Int((100 - 1 + 1) * Rnd + 1)
 
Hallo

Ja ik ken die code wel. Maar ik haal uit een query van 1000 records, 10 willekeurige records, dus vragen halen die uiteraard steeds wisselen. Dus als ik het formulier opstart hangt de query met de 10 vragen eraan.
Ik krijg steeds 10 setje vragen diewel steeds veranderen, maar als ik afsluit en daarna weer opnieuw komen precies dezelfde setjes weer langs
 
De enige oplossing die ik kan bedenken is door gebruik te maken van een array in een loop (loop van 1- 10) waarna je het resultaat in een tijdelijke tabel wegschrijft.
Ik moet dit binnenkort voor mezelf gaan maken (ik ben nog niet zo handig met arrays dus ik kan het niet 1-2-3 uit vingers kloppen), als het me lukt dan laat ik wel weten.
 
Ik heb er nog even over nalopen denken:

-Tel het totaal aantal records (eventueel door ze in een array te plaatsen). het getal wat hier uit komt is je max (intMax). Minimum weet je al (dat is 1).
- maak via de query builder een query waarin je een vraag toevoegt naar je (tijdelijke) tabel, plaats daar voor het gemak een filter in, bijv. 50 om vraag 50 te zien. De SQLcode van deze query plaatsen we in de string strSql. het getal 50 vervang je naderhand door de integer intFilter

De code zou er ongeveer zo uit moeten zien (ik heb hem hier ter plekke geschreven).
Code:
Dim strSql as string
Dim intFilter as integer
Dim intLoop as integer

intloop = 0 'voor de zekerheid

Do while intloop < 9 'Start loop

intFilter =   Int((intMax - 1 + 1) * Rnd + 1) 'random getal raden
strSql = "plaats hier de sqlcode van je query" WHERE vraagID = intFilter

DoCmd.SetWarnings False 'Waarschuwing uit
DoCmd.RunSQL StrSql 'sql update of toevoeg uitvoeren
DoCmd.SetWarnings True 'waarschuwing aan

intLoop = intLoop + 1 'teller loop ophogen
Loop 'Eind loop
 
Laatst bewerkt:
Hallo,

Heb inmiddels de oplossing voor 95 procent namelijk

Dim ID
Randomize Timer
id2 = Int(Rnd * xx + 1) 'xx=berekend de telkens de aantal vragen [/COLOR]in de database
ID = id2
DoCmd.GoToRecord , , acGoTo, ID, 'gaat naar de vraag die getrokken is

Het enige probleem wat ik nu nog heb is om te voorkomen dat gedurende 1 sessie dezelfde vraag voorkomt.


Vriendelijke groet
 
Query voor andersdenkenden

Ik heb het eens nagebootst:
Ik heb een tabel stblLookup met 13 records. Door rnd in de where op te nemen
Code:
WHERE (((stblLookup.luID)=Int(Rnd()*13)))
Genereert de query iedere keer een ander record. Als je 10 willekeurige records wilt dan herhaal je de query 10 keer gekoppeld met het union statement. De kans bestaat natuurlijk dat een record tweemaal voorkomt door UNION worden de dubbele records verwijderd en als je gaten hebt in je nummering dan kan je een record selecteren dat niet bestaat. Veel mogelijkheden om je probleem op te lossen dus.

Code:
SELECT stblLookup.luID, stblLookup.luType, stblLookup.luData
FROM stblLookup
WHERE (((stblLookup.luID)=Int(Rnd()*13)))

union

SELECT stblLookup.luID, stblLookup.luType, stblLookup.luData
FROM stblLookup
WHERE (((stblLookup.luID)=Int(Rnd()*13)))

union

SELECT stblLookup.luID, stblLookup.luType, stblLookup.luData
FROM stblLookup
WHERE (((stblLookup.luID)=Int(Rnd()*13)))

union

SELECT stblLookup.luID, stblLookup.luType, stblLookup.luData
FROM stblLookup
WHERE (((stblLookup.luID)=Int(Rnd()*13)))

union

SELECT stblLookup.luID, stblLookup.luType, stblLookup.luData
FROM stblLookup
WHERE (((stblLookup.luID)=Int(Rnd()*13)));
Bovenstaande sql geeft 5 willekeurige records in een tabel van 13.
 
Mensen allemaal erg bedankt en ik heb het met jullie hulp voor elkaar gekregen. Heb in het programma nog 1 probleempje.

Als men een keuze maakt door bijv. Op knop A(antwoord a) te drukken zegt het programma dat het antoowrd goed of fout is en wat het juiste antwoord is. Men kan hier 5 seconden naar kijken en dan komt automatisch de volgende vraag. Het probleem nu is dat gedurende die 5 seconden de toetsen kan worden ingedrukt en ik zou graag willen zien dat gedurende die 5 seconden de toetsen werden geblokkerd.

Nogmaals hartelijk dank
 
Je kan je buttons disablen (me.cmdKnop.enabled = False)

Enjoy!
 
Nogmaals ook bedankt voor de laatste tips. Ik heb de enable functie gebruikt en werkt prima.

De application. Wait functie werkt niet misschien kan iemand mij de volledige beschrijving geven.

En dan word ik vervelend want heb nog een vraag. Als er een vraag gesteld wordt kan ik met het muiswel door de vragen scrollen, hetgeen niet de bedoeling is. Hoe kan ik het muiswiel uitschakelen in thet programma. Ik heb bij het laden van het furmulier de eigenschap muiswiel genomen en de functie enabled gebruikt als volgt:

Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
Me.vraag.enabled = False
End Sub

Helaas werkt het niet
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan