Toets in Access met random records

Status
Niet open voor verdere reacties.

dirkdrent

Gebruiker
Lid geworden
3 jan 2006
Berichten
382
Hallo,

Ik heb in mijn database simpel een aantal vragen gezet die ik uit mijn hoofd moet leren. Nu heb ik een formulier gemaakt waarbij ik de vraag op het scherm krijg te zien en op die manier er achter kom of ik de vraag al dan niet weet.

Wat me op is gevallen dat ik zo langzamerhand er achter ben gekomen welke vraag na welke vraag komt en dit wil ik eigen niet meer. Hij begint nu in het record bij ID1 en gaat dan als je op de knop volgende drukt naar ID2 enz.

Nu wil ik graag achter mijn aangemaakte knop van volgende een stukje code zetten die ervoor zorgt dat de volgende record niet het eerste volgende record wordt maar een ander record. Dus wanneer ik bezig ben met vraag 7 bijvoorbeeld (ID7) dat ik dan niet wanneer ik op de knop volgende druk naar vraag 8 (ID8) maar dat ik dan bijvoorbeeld ID 48 zie. (uiteraard moeten er dan wel 48 ID's in de database aanwezig zijn). Ik heb ongeveer 200 ID's in mijn database of wel vragen.
 
Heb je al eens gezocht op Random ?
Het aantal treffers in Helpmij is groot.
 
Heb ik wel opgezocht maar dan kom ik er nog niet uit... ik krijg wel random te zien maar dan ook voor excel etc. Eigenlijk wilde ik nog een stap verder gaan... want wanneer ik een vraag goed heb dat ik op goed klik en wanneer ik hem fout heb ik op foutknop kan drukken zodat deze dan wat vaker terug komt in de random.

Als u voor mij de link heeft dan graag want dan sluit ik deze topic....
 
Je kunt met een simpele (ach, wat heet simpel...) functie een Random functie maken, waarmee je willekeurige records kunt filteren.
Werkt als volgt:

In een module (maakt niet uit welke) zet je de onderstaande code:

Code:
Function Randomizer() As Integer
'Versie laatst bijgewerkt: 2-4-2008
Static AlreadyDone As Integer
        If AlreadyDone = False Then Randomize: AlreadyDone = True
    Randomizer = 0

End Function

Vervolgens maak je een query, waarmee je een willekeurig record ophaalt uit een tabel of een query.

Code:
SELECT TOP 1 tblNaam.*
FROM tblNaam
WHERE (Randomizer()=0)
ORDER BY Rnd(IsNull(tblNaam.Id)*0+1);

Het resultaat (in dit geval) is één willekeurig record. Deze code kun je rechtstreeks gebruiken in een Execute commando of je kunt de qeury opslaan, en met een knop laten uitvoeren. Wat je wilt!
 
De module is aangemaakt....

Alleen de query maken lukt niet:

Het volgende heb ik gedaan

1) In access heb ik bij het onderdeel Query gekozen voor: Query maken in ontwerpweergave
2) Heb de tabel gekozen van waaruit de ID's gerandomnized moeten worden in dit geval de tabel "ACCESS IMPORT"
3) Dan heb ik bij veld: rechtermuisknop aangeklikt en gekozen voor opbouwen en heb hier de volgende uw code geplakt zie onderstaand:

SELECT TOP 1 tblNaam.*
FROM tblNaam
WHERE (Randomizer()=0)
ORDER BY Rnd(IsNull(tblNaam.Id)*0+1);

4) Heb de "tblnaam" aangepast naar "ACCESS IMPORT"
5) Dus krijg je het volgende

SELECT TOP 1 ACCESS IMPORT.*
FROM ACCES IMPORT
WHERE (Randomizer()=0)
ORDER BY Rnd(IsNull(ACCES IMPORT.Id)*0+1);

6) geklikt op de knop OK
7) Bij het verlaten van het veld geeft hij de volgende melding:

Deze expressie bevat een subquery waarvan de syntaxis ongeldig is. Controleer de syntaxis van de subquery en plaats de subquery tussen haakjes.

8) Einde activiteiten

Heb ik iets verkeerd gedaan of wel wat kan ik doen om het toch werkend te krijgen?
 
Het zou moeten werken, maar misschien moet je rechte haken om de tabelnaam zetten: [ACCESS IMPORT]
 
Het is gelukt... de fout zat in de naam van de tabel... De tabelnaam is "ACCESS IMPORT" en hij komt denk in de war doordat er IMPORT in de tabelnaam staat. Doordat ik de tabelnaam het veranderd doet de query het wel.

Alleen heb ik nu de knop aangemaakt op het formulier en achter de knop heb ik aangegeven dat hij de query van bovenstaand uit kan voeren maar dan opent hij de tabel en geeft hij niet de gegevens in het formulier weer. Hoe kan ik zorgen dat dit wel werkt? Heb ook al het formulier op basis van de query gemaakt maar dan geeft hij wel 1 willekeurig record (ID) weer maar wanneer ik dan op volgende klik dan laat hij niets zien.
 
Laatst bewerkt:
Als je één random record opvraagt, zit er maar één record in de recordset, en dus ook maar één op het formulier. Je zult de recordset dus opnieuw moeten laten draaien voor een ander record.
Ik heb nu zo gauw geen voorbeeld voorhanden, maar je kunt het proberen met:
Me.Requery
achter het formulier te zetten, of achter een knop.
 
Bedoeld u het zo als onderstaand:

Private Sub Knop17_Click()
On Error GoTo Err_Knop17_Click

Dim stDocName As String

stDocName = "Willekeurig"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Me.requery

Exit_Knop17_Click:
Exit Sub

Err_Knop17_Click:
MsgBox Err.Description
Resume Exit_Knop17_Click

End Sub


Zoals bovenstaande werkt het niet?
 
Heb in de bijlage mijn database bijgevoegd... hij geeft een melding bij het uitvoeren van de code iets met een END Random... zie het voorbeeld????
 

Bijlagen

Ik heb de recordbron aangepast (willekeurig query ipv vragen tabel) en de dubbele functie verwijderd in vba.
Ik heb tevens ongeveer 100 keer op de knop gedrukt, maar geen error....

Misschien zo opgelost?
 
Laatst bewerkt:
Weet u zeker dat u de juiste db in de bijlage hebt geplaatst? Want ik kan de random knop hier niet vinden?
 
Perfect... het werkt uitstekend, als ik het dus goed begrijp zat de fout omdat ik per ongeluk 2x dezelfde code in VBA heb neergezet?
 
2x dezelfde functie declareren is gewoon niet correct.
Het functioneert op zich wel als je dit 2x hebt gedefinieerd in Form en module, net ook getest.

Maar het grootste probleem was dat je je "willekeurig" query niet gekoppeld had aan het formulier (Recordbron). Als je dus op Random drukte gebeurde er niks. Want een Me.Requery van het 1e record van tabel vragen, blijft het 1e record.

Kleine tip:
Er staat overigens in VBA nog allemaal code van knoppen die niet meer bestaan.
Ik zou dit nog even opruimen, scheelt je misschien later weer veel uitzoek werk.
Dit geldt zeker als je je knoppen geen naam geeft, bijvoorbeeld RandomKnop ipv Knop17.
 
Iedereen weer super bedankt voor deze geweldige tips en feedback... Tot het volgende vraagstuk :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan