Navigation durch einen Recordset ◦ ?

Der folgende Code illustriert die Verarbeitung mehrerer Sätze eines Recordset am Beispiel der Öffnungsprozedur des Formulars FrmStart von Access_Quiz.mdb. Aufgabe von FrmStart ist unter anderem die Initialisierung der Basistabelle SCORESMC (Scores der Multiple Choice-Aufgaben). Deren Attribute sollen die folgenden Startwerte enthalten:

- Der Fragenschlüssel wird aus der Aufgabentabelle QuizMehrfachwahl kopiert

- Alternativenschlüssel wird (analog zu QuizMehrfachwahl) von 1 bis 4 durchnummeriert

- Die Matrikelnummer ist bei Selbstkorrektur -1

- Der Testschlüssel ist bei Selbstkorrektur -1

- Die Benutzerlösung ist False (was einem leeren Kontrollkästchen entspricht)

### Entwurf

Wer eine Basis- oder Ergebnis tabelle satzweise verarbeiten will, muss einen Recordset öffnen und ihm den Tabellennamen übergeben. Der folgende Entwurf der Ereignisprozedur Form_Open öffnet einen Recordset der Basistabelle SCORESMC und initialisiert jeden Satz mit den Identifikationsattributen Fragenschlüssel und Alternativenschlüssel. Die Matrikelnummer des Quizteilnehmers wurde bei Testbeginn vom Teilnehmer eingegeben, und der Testschlüssel stammt aus der Tabelle QuizTEST der Aufgabenbank QUIZ_BACKEND.

>     Bilde aus der leeren Tabelle SCORESMC einen leeren Recordset rstSCORESMC
>     Bilde aus dem Fragenschlüssel und dem Alternativenschlüssel von
>       QuizMEHRFACHWAHL einen zweiten Recordset rstSCORESMCSchlüssel
>     Solange rstSCORESMCSchlüssel nicht fertig
>       Füge einen Satz mit den folgenden Feldern an rstSCORESMC:
>         Fragenschlüssel = Fragenschlüssel von rstSCORESMCSchlüssel
>         Alternativenschlüssel = Alternativenschlüssel von rstSCORESMCSchlüssel
>         Matrikelnummer = Matrikelnummer des Quizteilnehmers
>         Testschlüssel = Testschlüssel
>         Benutzerlösung = False                               'später mit Benutzereingabe überschreiben
>       Gehe zum nächsten Satz von rstSCORESMCSchlüssel
>     Schliesse rstSCORESMC und rstSCORESMCSchlüssel

### Implementation

Der folgende VBA-Code ist länger als der Entwurfscode, weil er Entscheidungen enthält, die nichts mit der Programmlogik zu tun haben. Zum Beispiel beeinflussen die folgenden Schlüsselwörter die Sicherheit und Effizienz der Recordset-Verarbeitung: dbOpenForwardOnly erlaubt nur die vorwärtslesende Navigation, während dbOpenDynaset auch das schreibende Durchlaufen ermöglicht.

>     ...
>     '-- Objektvariablen, welche auf die beiden Recordsets zeigen
>     Set rstSCORESMC = .OpenRecordset(_
>       "SCORESMC", _
>       dbOpenDynaset)
>     Set rstSCORESMCSchlüssel = .OpenRecordset( _
>       "SELECT QuizMEHRFACHWAHL.Fragenschlüssel,QuizMEHRFACHWAHL.Alternativenschlüssel " & _
>         "FROM QuizMEHRFACHWAHL;", _
>       dbOpenForwardOnly)

>     '-- SCORESMC-Skelett erstellen
>     '   --------------------------
>     With rstSCORESMC
>       Do While Not rstSCORESMCSchlüssel.EOF
>         '- Satzskelett jeweils an das Ende von SCORESMC fügen
>         .AddNew
>           !Fragenschlüssel = rstSCORESMCSchlüssel!Fragenschlüssel
>           !Alternativenschlüssel = rstSCORESMCSchlüssel!Alternativenschlüssel
>           !Matrikelnummer = Matrikelnummer_des_Pb  'Pb heisst Proband (Teilnehmer)
>           !Testschlüssel = Testschlüssel_des_Pb
>           !Benutzerlösung = False                  'später mit Benutzereingabe überschreiben
>         .Update                                    'Änderungen endgültig speichern
>         rstSCORESMCSchlüssel.MoveNext
>       Loop
>       rstSCORESMCSchlüssel.Close
>       Set rstSCORESMCSchlüssel = Nothing
>       .Close                                       'Tabelle SCORESMC speichern
>     End With
>     Set rstSCORESMC = Nothing
>     ...

Satzverarbeitung unter DAO
Verarbeitung eines einzigen Satzes unter DAO