Berichtsereignisse: Beim Öffnen

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Berichtsereignisse: Beim Öffnen

Neben den verschiedenen Bereichen und Steuerelementen liefern Berichte auch eine Reihe von Ereigniseigenschaften, für die Sie wie bei Formularen Ereignisprozeduren hinterlegen können. Eines dieser Ereignisse wird beim Öffnen des Berichts ausgelöst. Es ist eine gute Gelegenheit, verschiedene Dinge zu prüfen und darauf zu reagieren. Beispiele sind das Auswerten von Öffnungsargumenten oder das Abbrechen des Öffnungsvorgangs.

Beispiele für den Einsatz der Berichts- und Bereichsereignisse in der Seitenansicht

Die Berichtsereignisse lassen sich teilweise für recht spezielle Aktionen einsetzen. In diesem und weiteren Beiträgen finden Sie einige Beispiele, damit Sie ein Gefühl für das richtige Einsetzen der Berichtsereignisse erhalten.

Beim Öffnen: Auswertung von Öffnungsargumenten

Der richtige Zeitpunkt zum Auswerten eines Öffnungsarguments ist das Ereignis Beim Öffnen. Mit dem Öffnungsargument der DoCmd.OpenReport-Anweisung lässt sich beispielsweise ein Parameter zum Filtern der Datensatzquelle übergeben.

Da dies aber relativ langweilig ist, finden Sie nachfolgend ein Beispiel, wie Sie die Gruppierung eines Be­richts beim Öffnen verändern können. Voraussetzung ist der Bericht rptGruppierungenTauschen, der wie in Bild 1 aufgebaut ist.

Bericht mit zwei Gruppierungen, die dynamisch getauscht werden sollen

Bild 1: Bericht mit zwei Gruppierungen, die dynamisch getauscht werden sollen

Der Clou an diesem Bericht ist, dass Sie mit wenigen Zeilen Code die Gruppierungsebenen vertauschen können. Dazu sind folgende, in der Abbildung nicht sichtbare Ei­gen­schaf­ten einzustellen:

  • Name des Beschriftungsfeldes im Berichtskopf: lblUeberschrift
  • Name des LieferantID-Kopfbereichs: Gruppenkopf0
  • Name des Beschriftungsfeldes im LieferantID-Kopfbereich: lblUeberschrift Grup­pie­rung0
  • Name des Textfeldes im LieferantID-Kopfbereich: txtUeberschriftGruppierung0
  • Name des KategorieID-Kopfbereichs: Gruppenkopf1
  • Name des Beschriftungsfeldes im KategorieID-Kopfbereich: lblUeberschrift Grup­pie­rung0
  • Name des Textfeldes im KategorieID-Kopfbereich: txtUeberschriftGruppierung1

Wie bringen Sie nun Dynamik ins Spiel? Betrachten Sie den reinen Ablauf, so rufen Sie den Bericht auf und übergeben mit dem Öffnungsargument Informationen über die im Bericht anzuzeigenden Daten. Das sieht etwa folgendermaßen aus (in einer Zeile):

DoCmd.OpenReport "rptGruppierungenTauschen", View:=acViewPreview, ?OpenArgs:="Artikel nach Kategorien
    und Lieferanten;KategorieID;LieferantID;Kategorie; Lieferant"

Das Öffnungsargument enthält sogar mehrere Argumente, die durch Semikola voneinander getrennt sind. Das erste enthält den Text, der im Berichtskopf als Überschrift angezeigt werden soll, das zweite und dritte enthalten die Beschriftungen der Bezeichnungsfelder in den beiden Gruppenköpfen und das vierte und fünfte die Felder der Datensatzquelle, nach denen gruppiert werden soll.

Bericht mit zwei Gruppierungsebenen

Fehlt noch eine Routine, die diese Informationen auseinandernimmt und den entsprechenden Eigenschaften zuweist. Diese wird – wer hätte es gedacht – durch das Beim Öffnen-Ereignis des Berichts ausgelöst.

Diese Prozedur sortiert die Gruppierungen nach den Vorgaben im Öffnungs­argu­ment.

Die Prozedur Report_Open zerlegt zunächst die im Öffnungsargument übergebene Liste mit der Split-Funktion und speichert die einzelnen Elemente in einem Array namens str­Grup­pierungen (s. Listing 1).

Private Sub Report_Open(Cancel As Integer)
     Dim strOpenArgs As String
     Dim strGruppierungen() As String
     Dim i As Integer
     If IsNull(Me.OpenArgs) Then
         Exit Sub
     End If
     strGruppierungen() = ?Split(Me.OpenArgs, ";")
     Me!lblUeberschrift.Caption = strGruppierungen(0)
     For i = 1 To 2
         Me("lblUeberschriftGruppierung" & i - 1).??Caption = strGruppierungen(i + 2)
         Me.?GroupLevel(i - 1).?ControlSource = strGruppierungen(i)
     Next i
End Sub

Listing 1: Auswertung der Öffnungsargumente zum Einstellen der Gruppierung

Warum so umständlich und gleich fünf Parameter mit OpenArgs übergeben? Die Rei­hen­folge der Gruppierungen wird doch in einem Formular festgelegt und da könnte man beim Öffnen des Berichts die Einstellungen des Formulars auslesen und entsprechend reagieren.

Dagegen spricht allerdings folgender Grundsatz: Je weniger Abhängigkeiten zwischen zwei Objekten bestehen, desto besser. Und weniger Ab­hän­gig­keit, als alle notwendigen Informationen beim Öffnen zu übergeben, ist fast nicht mög­lich.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]