Berichte flexibler einsetzen mit Recordsets
Versionen: Access 97, 2000 und 2002
Ein Bericht verfügt bekanntlich über die Eigenschaft "RecordSource", über die eine Tabelle oder Abfrage definiert wird, die dem Bericht als Datenbasis zugrunde liegt. Die entsprechenden Einstellungen nehmen Sie im Berichts-Entwurf im Eigenschaftenfenster des Berichtes über die Eigenschaft "Datenherkunft" vor.
Wenig bekannt ist die Tatsache, dass diese Einstellung nicht nur im Entwurfsmodus, sondern auch zur Laufzeit per VBA gesetzt werden kann. So ist es zum Beispiel möglich, die Kriterien für einen Bericht in einem Formular vom Anwender einstellen zu lassen, um dann nach einem Klick auf eine "Drucken"-Schaltfläche zunächst das passende Recordset zu erstellen, eine Referenz darauf in einer globalen Variablen zu hinterlegen und dann den entsprechenden Bericht zu öffnen. Dieser Bericht beinhaltet in der Ereignis-Prozedur "Report_Open" eine Anweisung, die den Recordset aus der globalen Variablen als Datenbasis zuordnet.
Grundlage ist zunächst eine in einem beliebigen Modul angelegte, globale Variable "rsBericht" vom Datentyp "Recordset", die später als Referenz auf das Recordset dient. Dieses Recordset initialisieren Sie in einem Formular, über das beispielsweise für eine landesspezifische Telefonliste von Kunden das gewünschte Land aus einem Kombinationslistenfeld ausgewählt und dann auf eine entsprechende Schaltfläche geklickt wird:
Private Sub btnTest_Click()
Dim strX As String
Dim db As Database, strSQL As String
On Error Resume Next
strX = Me.clLand
If Err <> 0 Then 'Kein Land eingestellt...
Beep
Exit Sub
End If
On Error GoTo 0
strSQL = "select * from Kunden where [Land]= '" & _
strX & "' order by Firma;"
Set db = CurrentDb()
Set rsBericht = db.OpenRecordset(strSQL)
DoCmd.OpenReport "Kunden", acViewPreview
rsBericht.Close
Set rsBericht = Nothing
End Sub
Das so initialisierte Recordset wird beim Öffnen des Berichtes per "DoCmd.OpenReport" automatisch über die Ereignisprozedur "Report_Open" gesetzt:
Private Sub Report_Open(Cancel As Integer)
On Error Resume Next
Me.RecordSource = rsBericht.Name
If Err <> 0 Then
Beep
MsgBox "Variable 'rsBericht' nicht gesetzt, " & _
"Bericht kann nicht angezeigt werden..."
Cancel = True
End If
End Sub
Kommt es hier bei der Zuweisung des Recordsets zu einem Fehler, so ist die globale Variable "rsBericht" nicht gesetzt (Inhalt = Nothing). Wir geben dann eine entsprechende Fehlermeldung aus und brechen das Öffnen des Berichts über die Zuweisung "Cancel = True" ab.
Eine allgemeingültige Schritt-für-Schritt-Anleitung für den Einsatz dieser Lösung in Ihren eigenen Datenbanken können wir aufgrund der zu unterschiedlichen Datenbankstrukturen nicht geben. Wenn Sie sich aber an die folgenden Vorgehensweise halten, dürfte die Umsetzung keine Probleme bereiten:
Deklaration einer globalen Variablen "rsBericht" oder ähnlich in einem beliebigen Modul.
Einfügen der oben gezeigten Anweisungen in die Ereignis-Prozedur "Report_Open" des betreffenden Berichtes.
Erstellen eines Formulars mit den entsprechenden Steuerelementen für die Auswahl eines oder mehrerer Kriterien.
Anlegen einer Schaltfläche "Drucken" oder ähnlich und Erstellen einer Ereignis-Prozedur "Beim Klicken", in der die Zusammensetzung einer SQL-Abfrage gemäß Einstellungen im Formular, die Initialisierung des Recordsets und das Öffnen des betreffenden Berichtes erfolgt.
© 1996-2024 Tibe Services Tim Berlebach, Zangerstraße 22, 65375
Oestrich-Winkel,
Tel: 06723
889005, Fax: 06723 889006, E-Mail: info(at)tibe.de, Internet: www.tibe.de