Im Beitrag „Outlook.com mit Access und VBA: Vorbereitungen“ und weiteren Beiträgen haben wir gezeigt, wie wir eine E-Mail über die Microsoft Graph API versenden. Da dies möglicherweise in der Zukunft die Alternative dazu sein wird, E-Mails einfach über die Fernsteuerung von Outlook zu verwenden, wollen wir gleich noch zeigen, wie unsere neue E-Mail-Funktion von einem Formular aus verwaltet und aufgerufen werden kann. Dabei wollen wir gleich auf Access-Seite die versendeten E-Mails speichern, wozu wir direkt noch ein kleines Datenmodell erstellen.
Datenmodell der Beispielanwendung
Wir wollen mit der Anwendung Daten über die versendeten E-Mails speichern, um diese anschließend einsehen zu können. Dazu benötigen wir einige Tabellen, die wir nachfolgend beschreiben.
Zuerst einmal schauen wir uns jedoch an, welche Daten wir eigentlich speichern wollen. Diese hängen maßgeblich von den Daten ab, die wir überhaupt zu unseren E-Mails hinzufügen wollen. Dazu gehören die folgenden:
- Absender
- To-Empfänger
- Cc-Empfänger
- Bcc-Empfänger
- Betreff
- Inhalt in Textform
- Inhalt in HTML-Form
- Angabe, ob Text- oder HTML-Inhalt
- Priorität
- Sendungsdatum und -zeit
Auch wenn dies recht einfach aussieht, benötigen wir verschiedene Tabellen, um diese Daten abzubilden.
Den Start machen wir mit der Tabelle, welche die eigentlichen E-Mails erfassen soll. Diese sieht in der Entwurfsansicht wie in Bild 1 aus. Hier finden wir jedoch nur einige der genannten Felder. Für diese Felder hinterlegen wir direkt deutsche Bezeichnungen für die Eigenschaft Beschriftung – im Screenshot beispielsweise Absender für das Feld Sender. Es fehlen beispielsweise die Felder zum Erfassen der To-, Cc– und Bcc-Empfänger. Der Grund ist, dass es je E-Mail einen oder mehrere To-Empfänger geben kann und keinen, einen oder mehrere Cc– und Bcc-Empfänger. Wer schon einmal einen Newsletter versendet hat, weiß auch, dass die Liste der Bcc-Empfänger recht lang werden kann. Diese müssten wir irgendwie in einem Tabellenfeld unterbringen, was wir beispielsweise in einer durch Semikola separierten Liste erledigen könnten. Wenn wir aber einmal anfangen, Empfänger in eine E-Mail einzutragen, dann können wir diese auch direkt in einer Tabelle speichern. Der Vorteil ist, dass wir diese dann für weitere E-Mails einfach aus dieser Liste auswählen könnten.
Bild 1: Basistabelle zum Speichern der E-Mails
Deshalb wollen wir die E-Mail-Adressen sowie die Namen der Empfänger in einer eigenen Tabelle unterbringen. Diese gestalten wir wie in Bild 2.
Bild 2: Tabelle zum Erfassen der Kontakte
Für das Feld MailAddress legen wir einen eindeutigen Index fest, damit jede E-Mail-Adresse nur einmal erfasst werden kann.
Zuordnung von Kontakten zu den E-Mails
Wenn es nur jeweils einen Empfänger für To, Cc und Bcc gäbe, könnten wir diese über eine 1:n-Beziehung und entsprechende Fremdschlüsselfelder der Tabelle tblMails zuordnen.
Allerdings können wir jeder Empfängerart mehrere Empfänger zuordnen, und jeder Empfänger soll mehreren E-Mails zugeordnet werden können. Das ist der klassische Fall für eine m:n-Beziehung. Um diese zu realisieren, benötigen wir eine Verknüpfungstabelle. Diese ist wie in Bild 3 aufgebaut.
Bild 3: Tabelle zum Zuordnen von Kontakten zu E-Mails
Neben den beiden Fremdschlüsselfeldern zum Zuweisen jeweils eines Eintrags aus der Tabelle tblMails und der Tabelle tblContacts finden wir hier noch ein weiteres Feld vor, nämlich ReceiverTypeID. Dieses Feld ist ebenfalls ein Fremdschlüsselfeld und soll dazu dienen, die Empfängerart festzulegen, also To, Cc oder Bcc.
Damit haben wir drei Fremdschlüsselfelder, von denen wir zwei zu einem eindeutigen Index zusammenfassen wollen. Der Grund ist, dass wir davon ausgehen, dass jeder Kontakt grundsätzlich nur einmal zu jeder E-Mail zugeordnet werden soll. Deshalb erstellen wir wie in einen eindeutigen Index über die Felder MailID und ContactID.
Dazu nutzen wir den Dialog Indizes: tblMailReceivers, dem wir eine neue Zeile mit dem Wert UniqueKey in der Spalte Indexname hinzufügen. Für diese Zeile fügen wir das Feld MailID hinzu und stellen die Eigenschaft Eindeutig auf Ja ein. In der darunter liegenden Zeile fügen wir keinen Indexnamen, aber das Feld ContactID hinzu. Somist der eindeutige Index auf Basis der Felder MailID und ContactID definiert.
Beziehung für MailID per Beziehungen-Fenster einrichten
Um die Tabelle tblMailReceivers über das Fremdschlüsselfeld MailID mit der Tabelle tblMails zu verknüpfen, öffnen wir das Beziehungen-Fenster und ziehen die beiden betroffenen Felder aus dem Navigationsbereich dort hinein.
Dann ziehen wir das Feld MailID der einen Tabelle auf das gleichnamige Feld der anderen Tabelle. Die Reihenfolge spielt hier keine Rolle, da wir keine 1:1-Beziehung anlegen. Den nun sichtbaren Beziehungspfeil zwischen den beiden Tabellen klicken wir doppelt an und finden den Dialog Beziehungen bearbeiten vor. Hier aktivieren wir die Option Mit referentieller Integrität und schließen den Dialog wieder (siehe Bild 4).
Bild 4: Herstellen der Beziehung zwischen den Tabellen tblMailReceivers und tblContacts
Beziehung für ContactID über Nachschlagefelder einrichten
Da wir ohnehin später im Formular die Nachschlagefelder nutzen werden, um die Kontakte zu einer E-Mail hinzuzufügen, können wir dies auch direkt hier in den Tabellen erledigen. Also stellen wir für das Feld ContactID den Wert von Zahl auf Nachschlage-Assistent um.
Hier wählen wir in den einzelnen Schritten folgende Optionen aus:
- Schritt 1: Option Das Nachschlagefeld soll die Werte aus einer Tabelle oder Abfrage abrufen auswählen
- Schritt 2: Tabelle: tblContacts auswählen
- Schritt 3: Die Felder ContactID und MailAddress zur Liste Ausgewählte Felder hinzufügen.
- Schritt 4: Das Feld MailAddress als erstes Sortierkriterium auswählen und die Sortierreihenfolge Aufsteigend beibehalten.
- Schritt 5: Option Schlüsselspalte ausblenden beibehalten
- Schritt 6: Option Datenintegrität aktivieren anschalten und die Option Löschbeschränkung beibehalten (siehe Bild 5)
Bild 5: Einstellungen für das Nachschlagefeld ContactID der Tabelle tblMailReceivers
Schauen wir uns die Tabellen nun erneut im Beziehungen-Fenster an, sehen wir die vollständige m:n-Beziehung (siehe Bild 6).
Bild 6: Die m:n-Beziehung zwischen den Tabellen tblContacts und tblMails
Weitere Hilfstabellen
Neben diesen Haupttabellen benötigen wir noch einige Hilfstabellen:
- tblContentTypes: Enthält die Felder ContentTypeID und ContentType (siehe Bild 7). Stellt den ContentType zur Auswahl und liefert die Nachschlagewerte für das Feld ContentTypeID der Tabelle tblMails. Damit immer Text ausgewählt ist, stellen wir den Standardwert dieses Feldes auf 0 ein.
- tblImportance: Enthält die Felder ImportanceID und Importance und liefert die Nachschlagewerte für das Feld ImportanceID der Tabelle tblMails (siehe Bild 8). Damit immer Normal ausgewählt ist, stellen wir den Standardwert dieses Feldes auf 0 ein.
- tblReceiverTypes: Enthält die Felder ReceiverTypeID und ReceiverType und liefert die Werte To, Cc und Bcc für das Feld ReceiverTypeID (siehe Bild 9).
Bild 7: Die Tabelle tblContentTypes
Bild 8: Die Tabelle tblImportance
Bild 9: Die Tabelle tblReceiverTypes
Die übrigen Hilfstabellen verknüpfen wir auf ähnliche Weise mit den Haupttabellen der Anwendung, sodass sich das Datenmodell aus Bild 10 ergibt.
Bild 10: Datenmodell der Beispieldatenbank
Hier haben wir außerdem noch die Tabelle tblAttachments hinzugefügt, welche die folgenden Felder enthält:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo