Tipps und Tricks zu Formularen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Access stellt Ihnen unterschiedliche Werkzeuge zur Verfügung, um die Eingaben des Anwenders zu kontrollieren und ggf. zu korrigieren. Die Kontrollmöglichkeiten sollten Sie intensiv einsetzen, wenn Sie einen sauberen Datenbestand in Ihrer Datenbank sicherstellen möchten.

Die einfachste Möglichkeit, die Eingaben zu überwachen, sind Gültigkeitsregeln für einzelne Datenfelder. Allerdings werden die Regeln bei jedem Feld separat hinterlegt und können nicht zentral an einer Stelle überprüft werden. Sie können ferner keine komplexen Regeln definieren, die sich zum Beispiel an den Eingaben des Benutzers orientieren.

Einfacher geht das Ganze mit Ereignisprozeduren auf Formularebene, in denen Sie die Regeln und Aktionen festlegen. Weitere Einsatzmöglichkeiten für die Ereignisprozeduren sind Gültigkeitsüberprüfungen,

Ereigniskette

Für den Einsatz der Ereignisse müssen Sie aber wissen, welche Sie wann am besten verwenden. Wichtig ist hierbei die Reihenfolge, in der Access die Ereignisse auslöst. Für die Erfassung und Speicherung eines Datensatzes gilt die folgende Ereigniskette:

Das Ereignis Vor Eingabe wird von Access ausgelöst, wenn Sie das erste Zeichen in einem neuen Datensatz eingeben. Der Datensatz ist dann noch nicht gespeichert.

Das Ereignis Vor Aktualisierung tritt ein, wenn Sie einen Datensatz verlassen oder speichern, aber bevor der Datensatz tatsächlich in der Datenbank aktualisiert wird. änderungen können jetzt noch rückgängig gemacht werden. Doch das Ereignis wird nur ausgelöst, wenn Sie mindestens in einem Datenfeld eine änderung durchgeführt haben.

Bild 1: Eingabeprüfung auf Formularebene

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me!Anzahl > 10 Then
        MsgBox "Die Anzahl ist zu groß"
        Cancel = True
    End If
End Sub

Quellcode 1

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim DoCancel As Boolean
    DoCancel = False
    If Me!AbschlussID.Column(2) = True Then
        If IsNull(ZertifikatErhaltenAm) Then
            MsgBox "Bitte geben Sie ein Datum ein.", vbExclamation, "Datum eingeben..."
            DoCancel = True
        End If
        If Nz(Me!Note, 0) = 0 Or Me!Note > Me!MindestNote Then
            MsgBox "Bitte geben Sie eine Note ein die" _                & " kleiner/gleich der Mindestnote " _                & " ist.", "Note eingeben..."
            DoCancel = True
            Me!Note.SetFocus
        End If
    End If
   ... 
   ''weitere Prüfungen
   ...
    Cancel = DoCancel
End Sub

Quellcode 2

Das Ereignis Nach Aktualisierung wird von Access ausgelöst, nachdem die geänderten Daten im Datensatz aktualisiert wurden, während das Ereignis Nach Eingabe nur nach Anlage eines neuen Datensatzes von Access ausgelöst wird.

Ereignisse abbrechen

Die Ereignisse Vor Eingabe und Vor Aktualisierung können Sie per Programmcode abbrechen und damit verhindern, dass die ausgeführten änderungen akzeptiert werden.

Hierzu verwenden Sie den Parameter Cancel der Ereignisprozeduren. Setzen Sie den Parameter auf True, wenn Sie den Einfüge- bzw. Aktualisierungsvorgang abbrechen möchten. Ein Beispiel finden Sie in Quellcode 1. Zunächst wird der Inhalt des Feldes Anzahl geprüft. Erfüllt der Wert nicht die definierte Bedingung, gibt die Prozedur eine Meldung aus und bricht den Vorgang ab. Der Benutzer muss also eine Zahl kleiner als oder gleich 10 eingeben, sonst kann der Datensatz nicht gespeichert werden.

Praxisbeispiel

Ein praktisches Beispiel für die Anwendung der beschriebenen Ereignisse erhalten Sie in der Musterlösung Schulungsverwaltung dieser Ausgabe.

Dort trägt der Anwender im Formular frmAbschluesseEingeben die Abschlussnote und das Datum des Abschlusses für die Teilnehmer einer Schulung ein (siehe Bild 1).

Private Sub Form_AfterUpdate()
    If Nz(Me!AbschlussID, 0) > 1 Then
        If MsgBox("Möchten Sie das Zertifikat jetzt drucken", _
            vbQuestion + vbYesNo, "Zertifikat drucken") = vbYes Then
            Zertifikatdrucken Me!KursteilnehmerID
        End If
    End If
End Sub

Quellcode 3

Das Ereignis Vor Aktualisierung (s. Quellcode 2) wird hier verwendet, um zu prüfen, ob der Benutzer das Datum eingegeben hat und ob die Note – falls erforderlich – kleiner oder gleich der Mindestnote ist.

Fehlt das Datum oder wird die Mindestnote nicht erreicht, gibt die Prozedur eine entsprechende Fehlermeldung aus und bricht den Speichervorgang ab.

Sind vom Anwender alle Eingaben den Regeln entsprechend ausgeführt worden, wird das Ereignis Nach Aktualisierung ausgelöst. Hier können nun weitere Aktionen folgen, die sich auf die Feldwerte des aktualisierten Datensatzes beziehen.

Im Beispiel wird in diesem Ereignis geprüft, ob der Kurs als bestanden eingegeben wurde (AbschlussID > 1) und der Anwender das passende Zertifikat direkt drucken möchte (s. Quellcode 3).

Mit diesem Ereignis lässt sich der Prozess Zertifikat drucken automatisieren, ohne dass der Anwender noch auf eine weitere Schaltfläche klicken muss.

In großen Anwendungen mit vielen Formularen ist es fast unumgänglich, dass einige Unterformulare in mehreren unterschiedlichen Hauptformularen verwendet werden.

Das ist auch dann der Fall, wenn es sich um ein Unterformular handelt, das die Zwischentabelle einer n:m-Beziehung in Listenform darstellt. Solche Unterformulare werden meist in zwei Hauptformularen – aber mit unterschiedlichen Anzeigefeldern – benötigt.

In diesem Tipp erfahren Sie, wie Sie es vermeiden, zweimal dasselbe Formular mit ggf. nur geringen Abweichungen anzulegen und statt dessen nur ein Formular zu verwenden.

Beispielformular

Als Beispiel wird wieder die Musterlösung Schulungsverwaltung herangezogen. Das Formular frmTeilnahmenachweiseSubform zeigt in Datenblattansicht die Kursteilnehmer und die Anwesenheit der Teilnehmer an.

Das Unterformular wird in zwei Hauptformularen verwendet. Zum einen kommt es in den Stammdaten der Kurse vor. Dort dient es nur der Information und ist schreibgeschützt.

Zum anderen erscheint das Unterformular bei der Erfassung der Anwesenheit, wo das Formular auf keinen Fall schreibgeschützt sein darf.

Der einfachste, aber nicht eleganteste Weg wäre nun, wie oben beschrieben, einfach zwei Versionen des Formulars anzulegen und die entsprechenden Eigenschaften direkt in die jeweiligen Formulare zu setzen.

Die Formulare könnten frmTeilnahmenachweiseSubformAnzeige und frmTeilnahmenachweiseSubformEingabe heißen.

Wenn Sie das Formular allerdings noch in einem weiteren Hauptformular benötigen, müssten Sie eine dritte Version des Formulars speichern.

Eines für alle

Private Sub Form_Open(Cancel As Integer)
    If Me.Parent.Form.Name = "frmTeilnahmenachweise" _        Then
        Me!WarAnwesend.Enabled = False
        Me!WarAnwesend.Locked = True
        Me.AllowEdits = False
    ElseIf Me.Parent.Form.Name = _        "frmTeilnahmenachweisEingeben" Then
        Me!WarAnwesend.Enabled = True
        Me!WarAnwesend.Locked = False
        Me.AllowEdits = True
    End If
End Sub

Quellcode 4

Bild 2: Ein Formular, zwei Ansichten

Statt dessen manipulieren Sie das Unterformular je nachdem, von welchem Hauptformular aus es aufgerufen wird. Um den Namen des Hauptformulars herauszufinden, verwenden Sie die Parent-Eigenschaft des Formulars:

Den Namen müssen Sie jetzt nur noch beim öffnen des Unterformulars abprüfen und entsprechend reagieren (s. Quellcode 4).

Im Beispiel wird je nach Hauptformular die Bearbeitung über die Eigenschaft AllowEdits gesperrt oder zugelassen. Außerdem wird das Feld WarAnwesend aktiviert bzw. deaktiviert.

Wenn Sie das Unterformular in weiteren Formularen verwenden möchten, können Sie einfach in der Prozedur den Namen des Formulars ergänzen und die Eigenschaften entsprechend setzen oder andere Aktionen ausführen.

Formulare in der Einzelansicht sind besonders zur Datenerfassung geeignet. Um eine übersicht über die Daten zu erhalten oder schnell einen Datensatz zu finden, eignen sich Listen am besten.

In der Regel reicht der Platz auf einem Formular nicht aus, um beide Ansichten sinnvoll nebeneinander darzustellen. Besonders die Listen geraten in solchen Formularen fast immer zu flach oder zu schmal. Im ersten Fall sieht der Anwender nur wenige Datensätze, im zweiten Fall meist nur die erste Spalte, wodurch gleichermaßen der Vorteil einer Auswahlliste ad absurdum geführt wird.

Ideal wäre es, die gesamte Formularbreite- und höhe sowohl für die Auswahlliste als auch für die Einzelansicht zu nutzen. Das erreichen Sie, indem Sie die beiden Elemente wechselweise einblenden. In Abbildung 2 sehen Sie ein Formular, das die zwei Ansichten nutzt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar