Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

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

6.5.1 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 Berichts beim Öffnen verändern können. Voraussetzung ist der Bericht rptGruppierungenTauschen aus Abbildung 6.16. 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 Eigenschaften einzustellen:

  • Name des Beschriftungsfeldes im Berichtskopf: lblUeberschrift
  • Name des LieferantID-Kopfbereichs: Gruppenkopf0
  • Name des Beschriftungsfeldes im LieferantID-Kopfbereich: lblUeberschrift Gruppierung0
  • Name des Textfeldes im LieferantID-Kopfbereich: txtUeberschriftGruppierung0
  • Name des KategorieID-Kopfbereichs: Gruppenkopf1
  • Name des Beschriftungsfeldes im KategorieID-Kopfbereich: lblUeberschrift Gruppierung0
  • Name des Textfeldes im KategorieID-Kopfbereich: txtUeberschriftGruppierung1
  • Abbildung 6.16: Bericht mit zwei Gruppierungsebenen

    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.

    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:

    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 6.1: Diese Prozedur sortiert die Gruppierungen nach den Vorgaben im Öffnungsargument

    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 strGruppierungen.

    Warum so umständlich und gleich fünf Parameter mit OpenArgs übergeben? Die Reihenfolge 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 ein Grundsatz, den Sie bereits in Kapitel 4, Abschnitt 4.6, »Von Formular zu Formular«, kennen gelernt haben: Je weniger Abhängigkeiten zwischen zwei Objekten bestehen, desto besser. Und weniger Abhängigkeit, als alle notwendigen Informationen beim Öffnen zu übergeben, ist fast nicht möglich.

    Die folgende For Next-Schleife wird genau zweimal durchlaufen - für jede Gruppierung einmal. Die erste Anweisung weist zunächst dem Beschriftungsfeld der äußeren Gruppierung die erste Gruppierungsbezeichnung zu - in diesem Fall »Kategorie«. Die zweite Anweisung legt das Feld fest, nach der die äußere Gruppierung erfolgen soll - hier »KategorieID«. Das gleiche Spiel wiederholt die Schleife noch für die innere Gruppierung - fertig! Mit dem obigen DoCmd.OpenReport-Befehl erhalten Sie eine nach Kategorien und Lieferanten gruppierte Artikelliste. Lediglich die Angabe der aktuellen Kategorie beziehungsweise des aktuellen Lieferanten im Kopfbereich der Gruppierungen fehlt noch. Dazu verwenden Sie die folgenden Prozeduren und erhalten gleichzeitig ein gutes Anwendungsbeispiel für den Einsatz des Ereignisses Beim Formatieren:

    Private Sub Gruppenkopf1_Format(Cancel As Integer, FormatCount As Integer)
        Me!txtUeberschriftGruppierung1 = _
            Me(Me.GroupLevel(1).ControlSource).Text
    End Sub

    Private Sub Gruppenkopf0_Format(Cancel As Integer, FormatCount As Integer)
        Me!txtUeberschriftGruppierung0 = _
            Me(Me.GroupLevel(0).ControlSource).Text
    End Sub

    Listing 6.2: Einstellen der Überschriften in den Gruppierungsköpfen

    Wie oben erwähnt, können Sie von der Beim Formatieren-Ereignisprozedur aus auf den Inhalt des ersten Detaildatensatzes der Gruppierung zugreifen, was hier sehr nützlich ist: Auf diese Weise lässt sich leicht der angezeigte Text der Felder KategorieID und LieferantID auslesen. Wenn Sie die Priorität der Gruppierung ändern möchten, verwenden Sie einfach die folgende Anweisung zum Anzeigen des Berichts:

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

    Wenn Sie den Bericht mit geänderter Gruppierung aufrufen möchten, müssen Sie ihn zuvor schließen. Ein Wechsel in die Entwurfsansicht reicht nicht aus.

    Den Aufruf können Sie übrigens in einem Formular wie dem in Abbildung 6.17 unterbringen. Weitere Details finden Sie in der Beispieldatenbank zu diesem Kapitel (\Kap_06 \Berichte.accdb).

    Abbildung 6.17: Formular zum Anzeigen von Berichten mit flexibler Gruppierungsreihenfolge (»frmGruppierungenTauschen«)

    Nächster Abschnitt:

    6.5.2 Bei Aktivierung und Bei Deaktivierung: Berichtsabhängige Funktionen ein- und ausschalten

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.