Home > Artikel > Ausgabe 6/2014 > Detailformulare aufrufen

Detailformulare aufrufen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Access-Anwendungen enthalten oft Übersichtsformulare, die alle Datensätze (oder eine Auswahl davon) in Listenform anzeigen, also beispielsweise in einem Unterformular in der Datenblattansicht oder in einem Listenfeld. Dieses ist dann üblicherweise mit einer Schaltfläche ausgestattet, um die Details zu einem solchen Datensatz in einem entsprechend gestalteten Formular anzuzeigen. Dieser Artikel zeigt, wie Sie das Öffnen eines solchen Formulars programmieren.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1406_DetailformulareAufrufen.mdb.

Übersichts- und Detailformular

Bei den folgenden Beispielen gehen wir davon aus, dass Sie ein Formular verwenden, dass die Daten einer Tabelle entweder in einem Unterformular, einem Listenfeld oder auch in der Endlosansicht anzeigt.

Wenn der Benutzer einen der Datensätze auswählt und dann etwa auf eine Schaltfläche mit der Beschriftung Details anzeigen klickt, soll der aktuelle Datensatz in einem Detailformular angezeigt werden.

Das Detailformular besteht aus einem Hauptformular namens frmArtikeluebersicht und dem Unterformular sfmArtikeluebersicht.

Das Unterformular verwendet die Tabelle tblArtikel als Datenherkunft und zeigt seine Daten in der Datenblattansicht an (siehe Bild 1).

Unterformular mit der Liste der Artikel

Bild 1: Unterformular mit der Liste der Artikel

Das Hauptformular frmArtikeluebersicht nimmt das Unterformular auf und zunächst eine Schaltfläche namens cmdDetailsAnzeigen (siehe Bild 2). Wenn Sie die Eigenschaften Navigationsschaltflächen, Datensatzmarkierer und Bildlaufleisten des Hauptformulars auf Nein und Automatisch zentrieren auf Ja einstellen, erscheint das Formular in der Formularansicht wie in Bild 3.

Haupt- und Unterformular in der Entwurfsansicht

Bild 2: Haupt- und Unterformular in der Entwurfsansicht

Haupt- und Unterformular in der Formularansicht

Bild 3: Haupt- und Unterformular in der Formularansicht

Das Formular zur Anzeige der Artikeldetails heißt frmArtikeldetails und verwendet die Tabelle tblArtikel als Datenherkunft – genau wie das Unterformular sfmArtikeluebersicht. Es enthält alle Felder der Tabelle tblArtikel sowie eine Schaltfläche namens cmdOK, um das Formular wieder zu schließen (siehe Bild 4).

Entwurf des Detailformulars

Bild 4: Entwurf des Detailformulars

Datensatz-ID per WhereCondition

Eine Art, eine Information von einem Formular zum nächsten zu übergeben, ist die Übergabe einer Bedingung per WhereCondition. Wenn Sie einen Datensatz im Unterformular des Formulars frmArtikeluebersicht markieren und dann auf die Schaltfläche mit dem Text Details anzeigen klicken, soll dies die Prozedur Listing 1 auslösen.

Private Sub cmdDetailsAnzeigen_Click()

     Dim lngArtikelID As Long

     lngArtikelID = Nz(Me!sfmArtikeluebersicht.Form!ArtikelID)

     If Not lngArtikelID = 0 Then

         DoCmd.OpenForm "frmArtikeldetails", WhereCondition:="ArtikelID = " & lngArtikelID

     Else

         MsgBox "Markieren Sie zunächst einen Artikel."

     End If

End Sub

Listing 1: Aufrufen des Detailformular mit entsprechendem Filter

Diese Prozedur speichert zunächst den Primärschlüsselwert des aktuell im Unterformular markierten Datensatzes in der Variablen lngArtikelID. Diesen ermittelt sie über den Ausdruck Me!sfmArtikeluebersicht.Form!ArtikelID. Me referenziert das aktuelle Formular, sfmArtikeluebersicht das Unterformular-Steuerelement, die Eigenschaft Form das darin enthaltene Unterformular (das ebenfalls sfmArtikeluebersicht heißt) und ArtikelID das Feld mit dem betreffenden Wert.

Befindet der Datensatzzeiger sich aktuell auf einem leeren, neuen Datensatz, liefert dieser Ausdruck den Wert Null. Wenn wir versuchen, diesen Wert in einer Long-Variablen wie lngArtikelID zu speichern, löst dies einen Fehler aus.

Also wandeln wir den Ausdruck zuvor vorsichtshalber mit der Funktion Nz in den Zahlenwert 0 um. Dies geschieht nur in dem Fall, dass der als erster Parameter der Funktion angegebene Ausdruck den Wert Null enthält – andernfalls liefert Nz den Wert aus dem ersten Ausdruck.

Die folgende If...Then-Bedingung prüft, ob lngArtikelID den Wert 0 enthält. Falls nicht, ruft sie das Formular frmArtikeldetails mit dem Wert "ArtikelID = " & lngArtikelID für den Parameter WhereCondition auf (siehe Bild 5).

Aufruf des Detailformulars für den aktuellen Eintrag im Unterformular

Bild 5: Aufruf des Detailformulars für den aktuellen Eintrag im Unterformular

Im Falle des Wertes 0 für die Variable lngArtikelID erscheint lediglich eine Meldung, dass der Benutzer zunächst einen der Einträge im Unterformular markieren soll.

Wenn der Benutzer nun zum Formular frmArtikeluebersicht zurückkehrt, einen anderen Datensatz markiert und erneut auf die Schaltfläche cmdDetailsAnzeigen klickt, wird das Formular frmArtikeldetails nicht erneut geöffnet. Stattdessen wird nur der Filter aktualisiert, was sich in der Anzeige des gewünschten Datensatzes äußert.

Filter auslesen

Wie sich die Übergabe eines Filterausdrucks mit dem Parameter WhereCondition auswirkt, haben wir ja nun gesehen. Was aber geschieht intern? Dies ermitteln wir, indem wir einmal über das Direktfenster auf die Eigenschaften des Formulars frmArtikeldetails zugreifen. Den Direktbereich rufen Sie vom Access-Fenster aus per Strg + G auf. Dies zeigt den entsprechenden Bereich dann im VBA-Editor an. Geben Sie hier den folgenden Befehl ein und betätigen Sie die Eingabetaste:

Forms!frmArtikeldetails.Filter

Das Fragezeichen ist übrigens die Kurzform des Befehls Debug.Print. Das Ergebnis ist der folgende Ausdruck:

ArtikelID = 2

Wie Sie sehen, stellt die Übergabe des Parameters WhereCondition die Eigenschaft Filter des Formulars auf den entsprechenden Wert ein. Außerdem ist noch die Eigenschaft FilterOn betroffen, die den Filter überhaupt erst aktiviert:

  Forms!frmArtikeldetails.FilterOn

Wahr

Immer den Datensatz aus dem Unterformular anzeigen

Wenn das Detailformular immer den aktuell im Unterformular des Übersichtsformulars ausgewählten Datensatz anzeigen soll, benötigen Sie eine weitere Ereignisprozedur. Diese wird durch das Ereignis Beim Anzeigen des Unterformulars ausgelöst.

Das Ereignis legen Sie an, indem Sie das Unterformular separat in der Entwurfsansicht öffnen, für die Eigenschaft Beim Anzeigen den Wert [Ereignisprozedur] auswählen und dann auf die Schaltfläche mit den drei Punkten rechts von der Eigenschaft klicken (siehe Bild 6).

Ausführen eines Ereignisses beim Markieren eines Datensatzes im Unterformular

Bild 6: Ausführen eines Ereignisses beim Markieren eines Datensatzes im Unterformular

Die dadurch ausgelöste Prozedur finden Sie in Listing 2. Die Prozedur nutzt eine kleine Hilfsfunktion namens IstFormularGeoeffnet, um zu prüfen, ob das Formular frmArtikeldetails überhaupt geöffnet ist. Der Filter des Detailformulars kann natürlich nur aktualisiert werden, wenn diese Formular bereits geöffnet ist.

Private Sub Form_Current()

     If IstFormularGeoeffnet("frmArtikeldetails") Then

         With Forms!frmArtikeldetails

             .Filter = "ArtikelID = " & Me!ArtikelID

             .FilterOn = True

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!