Kapitel 30
Formulare für Berichte
658
Aktivieren Sie dann das Formular (Abbildg. 30.1), wählen Sie eine Woche aus und rufen Sie über
eine der beiden Schaltflächen den Bericht auf, wird der gewählte Wert im Listenfeld des Dialogfeldes
an die Abfrage übergeben.
Ein Nachteil der vorgestellten Lösung besteht darin, dass der Bericht immer über das Formular auf-
gerufen werden muss. Starten Sie direkt den Bericht, kann die Abfrage den Bedingungswert nicht
aus dem Formular übernehmen. Dies hat zur Folge, dass die Abfrage den Bedingungswert als Para-
meter interpretiert und ihn in einem normalen Parameterdialogfeld vom Anwender erfragt.
Gegenüber der Lösung mit der reinen Parameterabfrage liegt der Vorteil darin, dass Sie mehrere
Bedingungswerte auf Ihrem dem Bericht vorgeschalteten Formular abfragen können.
Mit vorgeschaltetem Formular
In diesem Abschnitt präsentieren wir Ihnen eine Lösung, die die oben beschriebene ergänzt und
erweitert. Dabei wird der Bericht durch Visual Basic-Routinen in der Art gestaltet, dass beim Aufruf
des Berichts automatisch das Formular zur Abfrage der Woche und – als Erweiterung – des
gewünschten Kinos aufgerufen wird.
Die hier vorgestellte Lösungsvariante basiert auf kurzen Visual Basic-Prozeduren. Sollten Sie die
Programmstrukturen nicht auf Anhieb verstehen, so empfehlen wir Ihnen, zuerst in Teil G die Ein-
führung in die Visual Basic-Programmierung zu lesen.
Das vorgeschaltete Formular
In Abbildg. 30.6 ist das erweiterte Formular mit den beiden Listenfeldern für die Woche und das
Kino dargestellt.
Abbildg. 30.6
Das erweiterte Formular für das Kinoprogramm
1.
Dazu wurde das Formular frmKinoProgramm kopiert und als frmKinoProgramm2 eingefügt.
2. Löschen Sie die beiden Schaltflächen.
3. Schalten Sie den Steuerelement-Assistenten aus, und fügen Sie dann ein neues Listenfeld ein.
Nennen Sie es lstKino.
4. Klicken Sie auf die Schaltfläche mit den drei Punkten hinter Datensatzquelle. Schalten Sie in die
SQL-Ansicht um und fügen Sie den folgenden UNION-Befehl ein.
Mit vorgeschaltetem Formular
659
Berichte
Bevor wir Ihnen nun die weiteren Einstellungen dieses Dialogfeldes erläutern, lassen Sie uns zuerst
einen Blick auf den Bericht werfen.
Die Ereignisprozeduren des Berichts
Das Layout des Berichts rptKinoProgrammMitFormular entspricht dem in Abbildg. 30.5 vorgestell-
ten Bericht.
1. Kopieren Sie die Abfrage und speichern Sie sie unter qryKinoProgrammWoche2.
2. Löschen Sie in der Abfrage die Bedingung zur Kalenderwoche.
3. Kopieren Sie dann auch rptKinoProgramm und speichern Sie den Bericht unter rptKinoPro-
grammMitFormular.
4. Ändern Sie auf dem Registerblatt Daten die Datensatzquelle zu qryKinoProgrammWoche2.
Neu sind Ereignisprozeduren, die das Formular laden und aufgrund der Auswahl im Formular
einen Filter setzen. Das Besondere an diesem Bericht ist, dass beim Öffnen des Berichts das in
Abbildg. 30.6 gezeigte Dialogfeld eingeblendet wird. Verfahren Sie dazu folgendermaßen:
5. Fügen Sie im Eigenschaftenfenster des Berichts eine Ereignisprozedur für das Ereignis Beim
Öffnen hinzu.
6. Fügen Sie in der Ereignisprozedur folgende Zeilen ein.
SELECT DISTINCTROW tblKinos.Kino
FROM tblKinos
UNION
SELECT "*** Alle Kinos ***"
FROM tblKinos
ORDER BY tblKinos.Kino;
Private Sub Report_Open(Cancel As Integer)
' Öffnen des Formulars
DoCmd.OpenForm "frmKinoProgramm2", WindowMode:=acDialog
' Zusammenstellen des Filters
Me.Filter = ""
If Forms![frmKinoProgramm2].[lstWoche] <> "" Then
Me.Filter = "[Kalenderwoche]=#" _
& Format( _
CDate(Forms![frmKinoProgramm2].[lstWoche]), _
"mm\/dd\/yyyy") & "#"
End If
If Forms!frmKinoProgramm2.lstKino <> "***Alle Kinos***" Then
If Me.Filter <> "" Then
Me.Filter = Me.Filter & " AND "
End If
Me.Filter = Me.Filter & "[Kino]=""" & _
Forms!frmKinoProgramm2.lstKino & """"
End If
' Aktivieren des Filters
If Me.Filter <> "" Then
Me.FilterOn = True
Me.FilterOnload = True
End If
End Sub

Get Microsoft Office Access 2007 - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.