|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Tipps und Tricks zu Berichten
André Minhorst, Duisburg; Manfred Hoffbauer, Düsseldorf
In den Tipps und Tricks der vorliegenden Ausgabe finden Sie einige interessante Möglichkeiten, die Ausgabe von Berichten effizienter zu gestalten. Dabei beziehen sich die folgenden Tipps und Tricks zum größten Teil auf die Schritte, die um die eigentliche Berichterstellung herum erfolgen. Nach der Lektüre der kommenden Seiten können Sie Ihre Datenbank zum Beispiel leicht vor Benutzern schützen, die Berichte ohne Daten oder ohne Vorhandensein eines Druckers ausgeben möchten.
Vorhandensein von Daten überprüfen
Was ist schon ein Bericht ohne Daten? Das sollten Sie sich überlegen, bevor Sie Ihre Kunden oder Mitarbeiter auf eine von Ihnen entwickelte Datenbank loslassen.
Um zu verhindern, dass Berichte ohne Daten angezeigt werden, gibt es prinzipiell zwei Möglichkeiten: Entweder Sie überprüfen die Datenherkunft vor dem Aufrufen des Berichts oder Sie verwenden die Ereigniseigenschaft Bei ohne Daten von Berichten.
Datenherkunft vor dem Öffnen des Berichts überprüfen
Während der Entwicklungsphase einer Datenbank oder bei Datenbanken für interne Zwecke ist das Öffnen von Berichten über einen Doppelklick auf den entsprechenden Eintrag im Datenbankfenster gängige Praxis.
In den meisten Fällen erfordert das Öffnen von Berichten aber die Übergabe von Parametern wie Filterbedingungen und dergleichen oder die Datenbank soll von Mitarbeitern oder Kunden verwendet werden. Hier erfolgt das Öffnen von Berichten in der Regel über entsprechende Prozeduren, die der Benutzer entweder durch das Betätigen von Schaltflächen oder die Verwendung von Menüeinträgen aufruft.
In diesen Fällen können Sie leicht vor dem eigentlichen Öffnen des Berichts dessen Datenherkunft überprüfen.
Falls die Datenherkunft keine Daten enthält, geben Sie eine entsprechende Meldung aus und unterbinden das Öffnen des Berichts.
HinweisWenn Sie noch einen Schritt weiter gehen möchten, können Sie die Steuerelemente, die dem Öffnen des Berichts dienen, erst bei Vorhandensein von Daten aktivieren und ansonsten deaktivieren. Dies zieht aber in der Regel einen unverhältnismäßig hohen Programmieraufwand nach sich. (
Verwenden der Ereigniseigenschaft Bei Ohne Daten
Berichte stellen die Ereigniseigenschaft Bei Ohne Daten zur Verfügung, die beim Öffnen eines Berichts mit leerer Datenherkunft ausgelöst wird.
Ein Beispiel für den Aufbau dieser Prozedur finden Sie in Quellcode 1.
Neben einer entsprechenden Meldung, die den Benutzer auf das Fehlen der Daten hinweist, müssen Sie den Wert des Parameters Cancel auf den Wert True setzen. Nur dann wird das Öffnen des Berichts abgebrochen.
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Der Bericht enthält keine Daten."
Cancel = True
End Sub
Quellcode 1
Private Sub cmdBerichtDrucken_Click()
On Error GoTo cmdBerichtDrucken_Click_Err
DoCmd.OpenReport "<Berichtsname>"
Exit Sub
cmdBerichtDrucken_Click_Err:
If Err.Number = 2501 Then
Resume Next
End If
End Sub
Quellcode 2

Abb. 1: Standarddrucker in der Registry
Wenn Sie den Bericht per Code und nicht über das Datenbankfenster aufgerufen haben, löst das Abbrechen des Öffnen-Vorgangs einen Fehler aus. Diesen sollten Sie in der Prozedur mit der Anweisung zum Öffnen des Berichts berücksichtigen und eine Fehlerbehandlung wie in Quellcode 2 verwenden.
Vorhandensein eines Standarddruckers überprüfen
Bevor ein Bericht überhaupt in der Vorschau angezeigt geschweige denn ausgedruckt werden kann, muss auf dem aktuellen Rechner zunächst einmal ein Drucker installiert und als Standarddrucker definiert sein.
Wenn Sie versuchen, einen Bericht ohne installierten Standarddrucker auszugeben, erhalten Sie eine entsprechende Fehlermeldung.
Bei der Ermittlung des Standarddruckers hilft Ihnen die API-Funktion GetProfileString. Die Funktion dient dem Auslesen bestimmter Werte aus der Windows-Registry (s. Abb. 1) bzw. in früheren Windows-Versionen aus der Datei Win.ini.
Diese Funktion (s. Quellcode 3) deklarieren Sie im Kopf eines neuen VBA-Moduls. Die Funktion StandarddruckerErmitteln ruft die API-Funktion auf und übergibt beim Aufruf automatisch die für die Ermittlung des Standarddruckers erforderlichen Parameter (s. Quellcode 4).
Außerdem verarbeitet sie das Ergebnis der Funktion direkt mit der Funktion TeilstringErmitteln (s. Quellcode 5) weiter, die den ersten der Einträge des Ergebnisses ausliest.
Zeichenketten trennen per Funktion
Die Funktion TeilstringErmitteln hat drei Parameter: Gesamtstring, Trennzeichen und Teilstringnummer. Mit dem ersten Parameter übergeben Sie der Funktion die auszuwertende Zeichenkette.
Der zweite Parameter enthält das Zeichen, das in der Zeichenkette als Trennzeichen verwendet wird - also beispielsweise Komma, Semikolon und so weiter. Der dritte Parameter enthält die Nummer des Elements der Liste, das die Funktion zurückgeben soll.
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As _ String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Quellcode 3
Public Function StandarddruckerErmitteln() As String
Dim Rueckgabewert As String
Dim Funktionsergebnis As Long
Rueckgabewert = String(255, Chr(0))
Funktionsergebnis = GetProfileString("Windows", "Device", "", Rueckgabewert, _ Len(Rueckgabewert))
If Funktionsergebnis > 0 Then
GetDefaultPrinter = TeilstringErmitteln(Rueckgabewert, ",", 1)
Else
GetDefaultPrinter = ""
End If
End Function
Quellcode 4
Private Function TeilstringErmitteln(Gesamtstring As String, Trennzeichen As String, _ Teilstringnummer As Integer) As String
Dim Startposition As Integer
Dim Endposition As Integer
Dim AktuelleStringnummer As Integer
Dim AktuellesZeichen As Integer
AktuellesZeichen = 1
Startposition = 0
For AktuelleTeilstringnummer = 1 To Teilstringnummer - 1
AktuellesZeichen = InStr(AktuellesZeichen, Gesamtstring, Trennzeichen)
If AktuellesZeichen = 0 Then
Teilstring = ""
Exit Function
Else
AktuellesZeichen = AktuellesZeichen + 1
End If
Next AktuelleTeilstringnummer
Startposition = AktuellesZeichen
Endposition = InStr(Startposition + 1, Gesamtstring, Trennzeichen)
If Endposition = 0 Then
Endposition = Len(Gesamtstring) + 1
End If
Teilstring = Mid$(Gesamtstring, Startposition, Endposition - Startposition)
End Function
Quellcode 5
Im vorliegenden Fall übergibt die Funktion StandarddruckerErmitteln der Funktion TeilstringErmitteln die Zeichenkette Acrobat PDFWriter,winspool,LPT1:, als Trennzeichen das Komma und als Nummer des zurückzugebenden Elements die 1.
Die Funktion TeilstringErmitteln gibt folgerichtig die Zeichenkette Acrobat PDFWriter zurück.
|