Home > Artikel > Ausgabe 2/2012 > Kommunikationsdaten im Griff

Kommunikationsdaten im Griff

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Heutzutage ist es längst nicht damit getan, je ein Feld für Telefonnummer und Telefax in einer Kundentabelle zu reservieren. Jeder Kunde hat zusätzlich noch mindestens eine Handynummer, ist unter der privaten Nummer zu erreichen und bietet eine oder mehrere E-Mail-Adressen an. Wer solche Daten flexibel in seiner Datenbank speichern möchte, braucht zwei Zusatztabellen und einige Formularanpassungen. Wie die Lösung aussieht, erfahren Sie in diesem Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1202_Kommunikationsdaten.mdb.

Kommunikationsdaten einfach

In vielen Fällen dürfte es ausreichen, in der Kundentabelle jeweils ein Feld für Telefon-, Telefax- und Mobilnummer sowie E-Mail zu reservieren und diese Felder im Formular zum Bearbeiten der Kundendaten bereitzustellen. Im Artikel Kunden per Bezeichnung verwalten haben wir dies wie in Bild 1 erledigt.

Einfache Variante: Die Kommunikationsdaten werden einfach in der Kundentabelle gespeichert.

Bild 1: Einfache Variante: Die Kommunikationsdaten werden einfach in der Kundentabelle gespeichert.

Der vorliegende Artikel stellt eine alternative Methode vor, Kommunikationsdaten wie Telefonnummern, Faxnummern, Handynummern oder E-Mail-Adressen zu speichern. Dabei sollen zu jedem Kunden nur die Daten gespeichert werden, die tatsächlich anfallen, es werden keine Felder für die verschiedenen Kommunikationsarten reserviert, sondern über weitere Tabellen dynamisch hinzugefügt.

Dies wird durch zwei zusätzliche Tabellen zur Tabelle tblKunden realisiert. Die erste heißt tblKommunikationsarten und speichert eigentlich nur Lookup-Daten, nämlich die Bezeichnungen der verschiedenen Kommunikationsarten – also Telefon dienstlich, Telefon privat und so weiter. Sie besteht nur aus zwei Feldern, deren Aufbau Sie Bild 2 entnehmen können.

Die Tabelle tblKommunikationsarten speichert die Bezeichnungen der Kommunikationsarten.

Bild 2: Die Tabelle tblKommunikationsarten speichert die Bezeichnungen der Kommunikationsarten.

Gefüllt sieht die Tabelle tblKommunikationsarten wie in Bild 3 aus. Sie können die enthaltenen Daten beliebig anpassen oder ergänzen.

Die Tabelle tblKommunikationsdaten mit einigen Beispieldatensätzen

Bild 3: Die Tabelle tblKommunikationsdaten mit einigen Beispieldatensätzen

Mit der Tabelle für die Kommunikationsarten allein können wir jedoch noch nicht viel anfangen. Wir benötigen eine weitere Tabelle, mit der wir die Kommunikationsarten und die Kunden in Beziehung bringen und die entscheidenden Daten, nämlich Telefonnummern, E-Mail-Adressen und so weiter verwalten. Diese Tabelle stellt eine m:n-Beziehung zwischen den Tabellen tblKunden und tblKommunikationsarten her und heißt tblKommunikationsdetails. Den Entwurf dieser Tabelle finden Sie in Bild 4. Neben dem Primärschlüsselfeld KommunikationsdetailID enthält die Tabelle zunächst zwei Fremdschlüsselfelder namens KommunikationsartID und KundeID, mit denen die ein Kunde mit einem Eintrag der Tabelle tblKommunikationsarten zusammengeführt wird.

Die Tabelle tblKommunikationsdetails stellt die Beziehung zwischen Kunde und Kommunikationsart her und nimmt die eigentlich wichtigen Daten auf.

Bild 4: Die Tabelle tblKommunikationsdetails stellt die Beziehung zwischen Kunde und Kommunikationsart her und nimmt die eigentlich wichtigen Daten auf.

Um diese Fremdschlüsselfelder anzulegen, tragen Sie zunächst die Feldnamen ein und wählen dann für den Datentyp jeweils den Wert Nachschlagefeld aus. Dies startet den Nachschlagefeld-Assistenten. Für das Feld KommunikationsartID wählen Sie damit die Tabelle tblKommunikationsarten als Datenherkunft aus und fügen die beiden Felder KommunikationsartID und Kommunikationsart hinzu. Die Sortierung legen Sie nicht explizit fest, daher werden die Einträge des Nachschlagefeldes nach dem Wert des Primärschlüsselfeldes sortiert. Dies ist in Ordnung, da die Einträge bereits in der gewünschten Reihenfolge hinzugefügt wurden

Für das Feld KundeID wählen Sie im Nachschlagefeld-Assistent die Tabelle tblKunden aus und fügen die beiden Felder KundeID und Bezeichnung hinzu (dies ist übrigens ein guter Einsatzzweck für das Feld Bezeichnung, über das Sie im Artikel Kunden per Bezeichnung verwalten mehr erfahren). Im Gegensatz zum Nachschlagefeld für die Kommunikationsarten sollten Sie für dieses Nachschlagefeld eine Sortierung festlegen, und zwar eine aufsteigende Sortierung nach dem Feld Bezeichnung.

Für jede Kombinationen aus KommunikationsartID und KundeID nimmt die Tabelle im Feld Kommunikationsdetail die Telefonnummer, die E-Mail-Adresse et cetera auf. Ein weiteres Feld namens Bemerkungen erfasst Informationen etwa über die Erreichbarkeit der verschiedenen Telefonnummern. Wenn jemand also beispielsweise immer nur vormittags im Büro erreichbar ist und nachmittags nur per Handy, würde man dies hier eintragen. Schließlich gibt es noch ein Ja/Nein-Feld namens Bevorzugt, mit dem Sie eine der Kommunikationsarten für den Kunden festlegen können, die primär genutzt werden soll.

Eine Übersicht der Tabellen und ihrer Beziehungen finden Sie im Datenmodell aus Bild 5. Dort legen Sie, sofern Sie nicht mit Access 2010 arbeiten und dies bereits im Nachschlagefeld-Assistent erledigt haben, noch referenzielle Integrität und Löschweitergabe für die beiden neuen Beziehungen fest.

Das Datenmodell verdeutlicht die Zusammenhänge zwischen den Tabellen zur Verwaltung der Kommunikationsdaten.

Bild 5: Das Datenmodell verdeutlicht die Zusammenhänge zwischen den Tabellen zur Verwaltung der Kommunikationsdaten.

Kommunikationsarten im Formular

Nun folgt der interessante Teil der Aufgabe: Die Kommunikationsinformationen sollen per Formular verwaltet werden. Wie es bei den Daten aus Tabellen, die per m:n-Beziehung verknüpft sind, üblich ist, kommt hier als erstes ein Unterformular in der Datenblattansicht in Frage – zumindest, wenn Sie die Daten auch noch direkt im Formular bearbeiten wollen.

Wir möchten dem bestehenden Formular frmKunden also ein Unterformular hinzufügen, dass alle bestehenden Kommunikationsdetails zum jeweils angezeigten Kunden bereitstellt und das Bearbeiten, Löschen und Hinzufügen erlaubt.

Normalerweise würde man tippen, dass das Unterformular die Daten der beiden Tabellen tblKommunikationsdetails und tblKommunikationsarten anzeigen soll. Grundsätzlich stimmt das, allerdings müssen wir die Tabelle tblKommunikationsarten nicht explizit in die Datenherkunft des Unterformulars aufnehmen, da diese ja nur Lookup-Daten liefert, die in Form des Primärschlüsselwerts des jeweiligen Datensatzes im Fremdschlüsselfeld KommunikationsartID der Tabelle tblKommunikationsdetails gespeichert werden. Und da wir dieses Fremdschlüsselfeld als Nachschlagefeld eingerichtet haben, stehen alle Werte der Tabelle tblKommunikationsarten darüber bereits zur Verfügung.

Schreiten wir zur Tat, indem wir zunächst ein neues Formular namens sfmKommunikationsdetails anlegen und diesem die Tabelle tblKommunikationsdetails als Datenherkunft zuweisen. Anschließend ziehen Sie alle Felder mit Ausnahme von KommunikationsdetailID und KundeID in den Detailbereich des Formularentwurfs (siehe Bild 6). KommunikationsdetailID enthält lediglich den Primärschlüsselwert, der für den Benutzer uninteressant ist und der Kunde soll ja bereits im Hauptformular angezeigt werden.

Das Unterformular sfmKommunikationsdetails in der Entwurfsansicht

Bild 6: Das Unterformular sfmKommunikationsdetails in der Entwurfsansicht

Stellen Sie außerdem die Eigenschaft Standardansicht des Formulars auf Datenblatt ein. Anschließend speichern und schließen Sie das Formular sfmKommunikationsdetails und öffnen das Hauptformular, das wir aus der Lösung des Artikels Kunden per Bezeichnung verwalten übernehmen, in der Entwurfsansicht. Ziehen Sie dann per Drag and Drop das Unterformular sfmKommunikationsdetails in den Detailbereich des Formulars frmKunden (siehe Bild 7). Ändern Sie im Unterformular die Bezeichnungsfelder, die später als Spaltenüberschriften der Datenblattansicht dienen, wie in der Abbildung.

Haupt- und Unterformular zur Darstellung von Kunden und Kommunikationsdetails

Bild 7: Haupt- und Unterformular zur Darstellung von Kunden und Kommunikationsdetails

Access hat nun automatisch die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformular-Steuerelements auf KundeID eingestellt. Dies geschieht, weil Access die Beziehung des Primärschlüsselfeldes im Hauptformular und des Fremdschlüsselfeldes im Unterformular erkennt und annimmt, dass eine Synchronisierung der Daten entsprechend dieser Beziehung erfolgen soll.

Wenn Sie nun in die Formularansicht wechseln, können Sie gleich die ersten Kommunikationsdaten aus den zuvor dafür vorgesehenen Textfeldern in das neue Unterformular kopieren (siehe Bild 8). Wenn Sie dies erledigt haben, sollten Sie sich noch von der ordnungsgemäßen Synchronisierung überzeugen, indem Sie kurz zum nächsten Datensatz wechseln, prüfen, ob dieser noch keine Kommunikationsdetails im Unterformular enthält und wieder zurückwechseln, woraufhin die soeben eingegebenen Daten wieder erscheinen sollten.

Die vorhandenen Kommunikationsdaten können nun in die neue Datenstruktur überführt werden.

Bild 8: Die vorhandenen Kommunikationsdaten können nun in die neue Datenstruktur überführt werden.

Bevorzugte Kommunikationsart deklarieren

Nun fehlt noch ein kleiner Automatismus: Wenn Sie eine der Kommunikationsarten für einen Kunden durch Anhaken des Kontrollkästchens Bevorzugt als die bevorzugte Methode markieren, soll der zuvor markierte Eintrag abgewählt werden. Dies erledigen Sie mit einer Ereignisprozedur, die durch das Ereignis Beim Klicken des Unterformulars sfmKommunikationsdetails ausgelöst wird. Um die Prozedur anzulegen, öffnen Sie das Unterformular in der Entwurfsansicht und wählen für die Eigenschaft Beim Klicken des Kontrollkästchens Bevorzugt den Eintrag [Ereignisprozedur] aus. Ein Klick auf die Schaltfläche rechts von der Eigenschaft mit den drei Punkten öffnet den VBA-Editor, der gleich die leere Prozedur anzeigt. Diese füllen Sie mit den Anweisungen aus Listing 1. Die durch diese Prozedur ausgelöste SQL-Anweisung aktualisiert alle Datensätze der Tabelle tblKommunikationsdetails, deren Feld KundeID mit dem entsprechenden Wert des aktuell im Hauptformular angezeigten Kunden übereinstimmt und die nicht gleich dem Eintrag der Tabelle tblKommunikationsdetails sind, dessen Wert im Feld Bevorzugt geändert werden soll.

Private Sub Bevorzugt_Click()

     Dim db As DAO.Database

     Set db = CurrentDb

     db.Execute "UPDATE tblKommunikationsdetails SET Bevorzugt = FALSE WHERE KundeID = " & Me!KundeID _

         & " AND NOT KommunikationsdetailID = " & Me!KommunikationsdetailID, dbFailOnError

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!