Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2001.

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'!

Diesen Beitrag twittern

Telefonnummern verwalten und drucken

Autor: André Minhorst, Duisburg

Die Ausgabe von Adressenlisten in einem Bericht ist in der Regel sehr einfach. Name, Anschrift und Telefonnummern in Detailbereich gesteckt und fertig. Aber in der heutigen - und vor allem im Berufsleben - benötigt man mindestens fünf Telefonnummern, um sicher zu sein, dass man die gewünschte Person auch an das Telefon bekommt. Telefon privat, mobil, beruflich, bei den Eltern und auch noch drei verschiedene Faxanschlüsse - das kann doch keine Adressenliste mehr verpacken. Zumindest keine herkömmliche.

In der Tat ist ein Blatt DIN-A4-Papier - auch im Querformat - manchmal nicht mehr ausreichend, wenn man die Fülle von Kontaktmöglichkeiten in der heutigen Kommunikationsgesellschaft zu Papier bringen möchte.

Auch wenn man sich überlegt, für jede Möglichkeit der Kommunikation - einschließlich einiger E-Mail-Adressen - ein eigenes Feld in einer Tabelle anzulegen, kommt da schon eine ganze Menge zusammen. Und wenn man sich dann überlegt, dass ganz sicher nicht jede Person über alle der zur Verfügung stehenden Kommunikationsmöglichkeiten verfügt, geht auch eine ganze Menge Speicherplatz verloren. Abb. 1 zeigt, wie eine solche Tabelle aussehen könnte.

Speicherplatz sparen mit m:n-Beziehungen

Wenn absehbar ist, dass eine solche Menge Telefonnummern anfällt, kann man eigentlich direkt eine eigene Tabelle für die Telefonnummern anlegen. In der Tabelle speichert man dann auch direkt, um welche Art von Telefonnummer es sich dabei handelt.

Die Tabelle tblAdressen und die Tabelle tblTelefonnummern verknüpft man dann über die Tabelle tblAdressenTelefon miteinander. Die Tabelle tblTelefonnummern ist außerdem über das Feld TelefonArtNr noch mit der Tabelle tblTelefonarten verknüpft. Was sehr kompliziert klingt, erscheint bei Betrachtung von Abb. 2 schon etwas klarer.

Telefonnummern eingeben per Formular

Eine altbekannte Geschichte ist, dass man Daten in m:n-Beziehungen nur sehr schlecht ohne ein entsprechendes Formular verwalten kann. Daher erstellen Sie schnell eines, um die Eingabe der Telefonnummern komfortable zu gestalten.

Das Hauptformular

Erstellen Sie zunächst das Hauptformular frmAdressen, in dem Sie die den Namen und die Adressdaten speichern.

Geben Sie als Datenherkunft den Namen der Tabelle tblAdressen an. In der Entwurfsansicht können Sie nun die Feldliste aktivieren und alle Felder der Tabelle tblAdressen in den Detailbereich des Formulars ziehen (Abb. 3).

Das Unterformular

Nun benötigen Sie noch ein Unterformular zur Anzeige der Telefonnummern namens subfrmAdressen.

Als Datenherkunft erstellen Sie eine neue Abfrage, indem Sie nach dem Anklicken der Eigenschaft Datenherkunft auf die Schaltfläche mit den drei Punkten (...) klicken. Fügen Sie der Abfrage alle Tabellen mit Ausnahme der Tabelle tblAdressen hinzu. Ziehen Sie die Felder gemäß **pic004** in das Entwurfsraster und schließen Sie die Abfrage.

In der Entwurfsansicht des Unterformulars ziehen Sie dann die Felde Telefonnummer und Telefonart in den Detailbereich und speichern das Formular.

Verknüpfen der Formulare



Nun fehlt nur noch ein Schritt: Positionieren Sie das Hauptformular in der Entwurfsansicht und das Datenbankfenster so, dass Sie das Unterformular aus dem Datenbankfenster in das Hauptformular ziehen können. Fertig! Wenn Sie nun in die Formularansicht des Hauptformulars wechseln, sollte Sie etwa der Anblick aus Abb. 5 erwarten.

Bericht ausgeben per Schaltfläche

Nun legen Sie noch eine Schaltfläche an, mit der Sie den gewünschten Bericht zur Anzeigen der Telefonnummern ausgeben. Nennen Sie die Schaltfläche btnTelefonliste und hinterlegen Sie für die Ereigniseigenschaft Beim Klicken die Prozedur aus Quellcode 1.

Ausgabe als Telefonliste

Die Ausgabe einer Telefonliste kann in der Regel genau wie die Ausgabe der Adressenliste erfolgen - nur, dass man noch die entsprechenden Felder mit den Telefonnummern hinzufügt.

Das ist in der vorliegenden Anwendung leider nicht so einfach möglich. Hier gibt es für jede Adresse eine unbestimmte Anzahl von Telefonnummern und dem entsprechend eine etwas aufwendigere Berichtserstellung.

Erstellen des Berichts repTelefonliste

Betrachtet man den Bericht in der Entwurfsansicht (Abb. 6), erscheint das gar nicht so kompliziert. Bei genauerem Hinsehen entdeckt man allerdings, dass zwei der Felder im Detailbereich ungebunden sind. Die beiden Felder sollen die Art der Telefonnummer und die Nummern selbst enthalten.

Doch von vorne: Der Bericht soll als Datenherkunft lediglich die Tabelle tblAdressen beinhalten. Ziehen Sie aus der Tabelle die Felder gemäß Abb. 6 in den Detailbereich. Achten Sie darauf, unbedingt auch das Feld ID in den Detailbereich zu ziehen. Sie können das Feld gerne unsichtbar machen, wenn Sie es nicht benötigen.

Erstellen Sie dann zwei ungebundene Textfelder namens txtTelefonart und txtTelefon.

Abfrage mit Telefonnummern

Bevor Sie nun mit der Programmierung des Berichts beginnen können, müssen Sie noch eine Abfrage erstellen. Die Abfrage soll die drei Tabellen tblMitgliederTelefon, tblTelefonnummern und tblTelefonarten enthalten. Ziehen Sie die drei Felder ID, Telefonnummer und Telefonart in das Entwurfsraster der Abfrage. Speichern Sie die Abfrage unter dem Namen qryTelefon.

Programmierung des Berichts

Daten einer m:n-Beziehung stellt man in einem Bericht in der Regel so dar, dass man im Detailbereich die Daten der n-Seite und in einer übergeordneten Gruppierung die Daten der m-Seite-unterbringt. Das würde im vorliegenden Fall beispielsweise wie in Abb. 7 aussehen.

Aber da Papier und Druck Geld kosten, soll die Telefonliste nicht unnötig viele Zeilen haben und wie in Abb. 8 aussehen. Das bedeutet, dass die erste Telefonnummer bereits in der Zeile mit der Adresse Platz findet.

Daher verwendet man die eben erwähnten ungebundenen Textfelder. Die Textfelder füllt man erst beim Formatieren des Berichtes. Dazu benötigen Sie eine entsprechende Prozedur, die Sie für die Ereigniseigenschaft Beim Formatieren des Detailbereichs des Berichts anlegen (Quellcode 2).

Die Prozedur liest alle Datensätze aus der Abfrage qryTelefon, die den gleichen Primärindex wie der aktuelle Datensatz haben und schreibt die Telefonart und die Telefonnummer in die ungebundenen Textfelder.

Dabei werden die einzelnen Arten und Nummern jeweils durch einen Zeilenumbruch voneinander getrennt.

Damit man auch die Informationen aller Telefonnummern sehen kann, müssen Sie noch die Eigenschaft Vergrößerbar auf den Wert Ja einstellen.

Um die Ansicht wie in Abb. 8 zu erreichen, benötigen Sie noch eine weitere kleine Prozedur, die Sie in Quellcode 3 finden. Die Prozedur sorgt für die abwechselnde Gestaltung des Hintergrundes in weiß und grau. Legen Sie die Prozedur für die Ereigniseigenschaft Beim Drucken des Detailbereichs an.

Verhalten bei fehlenden Daten

Es kann immer einmal vorkommen, dass der auszugebende Bericht keine Daten enthalten würde. Für den Fall legen Sie für die Ereigniseigenschaft Bei ohne Daten des Berichts die Prozedur aus Quellcode 4 an.

Die Prozedur zeigt beim Öffnen des Berichts eine entsprechende Meldung an.

Im vorliegenden Fall löst das aber trotzdem einen Fehler aus, da die mit der Schaltfläche btnTelefonliste ausgelöste OpenReport-Aktion abgebrochen wird.

Sie können den Fehler aber einfach abfangen, in dem Sie die Ereignisprozedur wie in Quellcode 1 mit einer entsprechenden Fehlerbehandlungsroutine versehen.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.