Zufallsdatensatz nur einmal ausgeben
Karl Donaubauer
Gesendet: 06.02.13 18:59
Betreff: RE: Zufallsdatensatz nur einmal ausgeben



Elite Veteran

Beiträge: 848
50010010010025
Ort: Wien
Hallo, Martin!

BetzMartin - 05.02.13
Möchte ein Frage/Antwortspiel erstellen! Die Fragen werden zufällig ausgewählt!

Ich habe dazu diesen Code verwendet:

Private Sub Form_Current()

Const csSQL = "SELECT TOP 1 ID FROM Fragen ORDER BY Rnd(ID)"
Me.Recordset.FindFirst "ID = " & CurrentDb().OpenRecordset(csSQL)(0)

End Sub

Soweit so gut! Jetzt möchte ich das die Fragen nur einmal gestellt werden und wenn alle Fragen durch sind eine kleine Zusammenfassung der Ergebnisse Gezeigt wird!

Bei der Auswertung der Antworten habe ich auch noch Probleme. Ich möchte, dass auch mehrere Antworten richtig sein können! Eventuell sogar richtig und falsch mit Farbe markiert!

Ich habe mein Beispiel als Zip-Datei angehängt!
...

Ich habe kurz rein geschaut. Ein paar Hinweise und Antworten auf einen Teil deiner Fragen:

1. Du solltest die explizite Variablendeklaration aktivieren. Damit wird der Code strukturierter, leichter lesbar und weniger fehleranfällig. D.h.

Im VBA-Editor einen Haken setzen bei: Extras - Optionen - Editor - Variablendeklaration erforderlich

In bereits vorhandenen Modulköpfen geht das nachträglich indem du nach

Option Compare Database
diese Zeile einfügst:
Option Explicit

Dann mal Debuggen - Kompilieren um alle nicht explizit deklarierten Variablen zu finden.

2. Statt des Codes "Beim Anzeigen" könntest du einfach eine Abfrage als Datenherkunft des Formulares verwenden, die alle DS zufällig liefert.
s.a. http://www.donkarl.com?FAQ3.17
Dann ersparst du dir den datenholenden Code beim Anzeigen und beim Klicken der Weiter-Schaltfläche.

3. DB-technisch wäre es besser (=3. Normalform) die Antworten als Datensätze in eine eigene Tabelle auszulagern, mit der FrageId als Fremdschlüssel. Dann tust du dir in Hinkunft mit dem Auswerten und Filtern leichter.

4. Damit die DS nur einmal kommen, könntest du in der Abfrage von Punkt 2 als Kriterium verlangen, dass alle Antwort-Felder einer Frage auf Nein stehen. Das geht eben schon leichter in der Struktur von 3., weil nur 1 Kriterium notwendig ist. Bei der Weiter-Schaltfläche machst du: Me.Requery

5. In der Struktur von 3. ist auch die Richtig-Bewertung und -Anzeige einfacher: Du erstellst bei den Antworten ein zusätzliches Ja/Nein-Feld "Richtig", das du für Erfolgsanzeigen und Auswertungen verwendest.

-----
Servus
Karl
*********
https://www.donkarl.com/devcon Access-Online-Konferenz 18.+19.4.
Access Forever: https://www.accessforever.org
Access News: https://www.youtube.com/playlist?list=PLVCeBbJIMDvdJ8ghMbEakJ6_EQyvy...
Access-Entwickler-Konferenz: https://www.donkarl.com/?aek
Top of the page Bottom of the page