Access-o-Mania

Access-Forum => Access Programmierung => Thema gestartet von: Lemmy84 am Juli 05, 2018, 12:47:29

Titel: Schleife mit Zufallsgenerator
Beitrag von: Lemmy84 am Juli 05, 2018, 12:47:29
Private Sub Formular_Fragenkatalog_2_Öffnen_Click()
    falsch = 0
    b = 0
    i = 0
    w = 0
   
    For i = 1 To 18
        Do
            DoCmd.OpenForm "Fragen aus Kategorie 2", acNormal
            b = Int(Rnd * 8) + 1
            DoCmd.GoToRecord , , acGoTo, b
            If Wiederholung = True Then
                w = 1
            End If
        Loop Until w = 0
            i = i + 1
    Next
    MsgBox "Du hast " & falsch & " Fehler!", vbOKOnly
End Sub

Folgender Code:
Nach Betätigung des Button "Formular_Fragenkatalog_2_Öffnen_Click" soll eine Schleife starten. Erster Durchlauf = Zufallszahl ausspucken und Datensatz mit der der Zufallszahl = ID anzeigen lassen. Sollte jetzt ein Kästchen "Wiederholung" = True sein, dann ist w=1 und die Schleife soll von vorne beginnen. Solange suchen bis Kästchen "Wiederholung" = False ist, w=0. Der Datensatz kann nun bearbeitet werden und über ein weiteren Button "Next" soll die Schleife wieder gestartet werden. Der durchlauf der Schleife soll so lange sein bis i = 18 ist und somit 18 Datensätze bearbeitet wurden.
Somit sollte ein Wiederholtes Aufrufen eines Datensatzes nicht mehr möglich sein.

Leider läuft meine Schleife komplett durch und macht nicht das was ich möchte. Ich hoffe es kann mir jemand weiterhelfen. Schleifen sind nicht mein Ding, Sorry.
Titel: Re: Schleife mit Zufallsgenerator
Beitrag von: DF6GL am Juli 05, 2018, 13:47:47
Hallo,

was in aller Welt hast Du denn vor?

Was ist der Sinn dieses Zufall-Gehoppses?

Soll das Erinnerungsvermögen zur Reihenfolge der Fragen getestet werden?


Lösung könnte sein, das Form mit acDialog zu öffnen (Code wird angehalten) und die Zufallszahl als Where-Condition für die ID mitzugeben....


Zudem sollte die Schleife über einen Recordset gehen, weil Gotorecord (in desem Fall) auf das aktuelle Form wirkt, in dem der Code abläuft. Im Fall von acDialog, kommt der Code zum entspr. Zeitpunkt gar nicht zum Tragen.




Titel: Re: Schleife mit Zufallsgenerator
Beitrag von: Lachtaube am Juli 05, 2018, 14:27:10
Gegenvorschlag: Erstelle ein ungebundenes Listen- oder Komfeld in dem Formular, in dem Du die 18 zufälligen Datensätze bearbeiten willst. Bei eingeschaltetem Assistenten wird das Steuerelement so vorkonfiguriert, dass es bei entsprechend gewählter Option zum darin ausgewählten Datensatz im Formular navigiert. Zum Schluß musst Du nur noch die Datensatzherkunft tunen, so dass nur 18 Datensätze angezeigt werden und diese von zufälliger Reihenfolge sind. Ich gehe hier vereinfacht von einem Feld FrageID und einem Feld Frage aus (erstes Feld ist ausgeblendet).
SELECT TOP 18
       FrageID,
       Frage
FROM   Tabellenname
ORDER  BY Rnd(FrageID);

Wenn ein Requery auf das Steuerelement abgesetzt wird, erscheinen natürlich 18 andere zufällige Datensätze.
Titel: Re: Schleife mit Zufallsgenerator
Beitrag von: Frank77 am Juli 06, 2018, 19:32:45
Hallo!

Public Function ZufallsZahl(ByVal Untergrenze As Long, _
                            ByVal Obergrenze As Long) As Long
    Dim zahl As Long                            ' Zufallszahl
    Randomize
    zahl = CLng((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    ZufallsZahl = CLng(zahl)
End Function

Private Sub Formular_Fragenkatalog_2_Öffnen_Click()
    Dim frm As Form
    Dim strFrm As String
    strFrm = "Fragen aus Kategorie 2"
    DoCmd.OpenForm strFrm, acNormal
    Set frm = Forms(strFrm)
    With frm
        .Recordset.FindFirst "ID = " & ZufallsZahl(1, .Recordset.RecordCount)
    End With
End Sub