Outlook-Mails in Access archivieren III

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Outlook-Mails in Access archivieren III

Die Archivierungsdatenbank für Outlook-Mails kann nun schon Mails importieren und bietet eine Suchfunktion für die importierten Mails an. Außerdem können Sie die gefundenen E-Mails mit Outlook öffnen und darin wiederherstellen. Nun wollen wir die Lösung noch so erweitern, dass Sie beispielsweise mehrere Ordner in Outlook auswählen können, deren E-Mails importiert werden sollen. Außerdem soll der Import gleich beim Start der Anwendung gelingen.

Die neue Version des Formulars sieht nun wie in Bild 1 aus. Das Formular enthält im Gegensatz zur vorherigen Version nun eine Liste mit mehreren Verzeichnissen, deren Detaildaten Sie durch Anklicken der Einträge im unteren Bereich anzeigen können.

Neue Version des Formulars zum Einlesen der E-Mails

Bild 1: Neue Version des Formulars zum Einlesen der E-Mails

Oben finden Sie außerdem zwei Schaltflächen, mit denen Sie eine neue Konfiguration hinzufügen oder eine bestehende löschen können.

Der untere Bereich enthält die Detaildaten, die bereits die Version aus dem vorherigen Teil der Beitragsreihe angeboten hat. Diese Daten stammen aus der Tabelle tblOptionen. Unten finden Sie drei Schaltflächen:

  • Import starten: Startet den Import für alle angelegten Konfigurationen.
  • Alle importierten Mails und Dateien löschen: Löscht alle in der Tabelle tblMailItems und der verknüpften Tabelle tblAnlagen enthaltenen Daten sowie die Daten in den beiden Unterformularen MSG und Anlagen.
  • Mailmarkierungen entfernen: Beim Importieren der Mails erhält jede importierte Mail den Wert saved für die Eigenschaft BillingInformationen. Wenn Sie die Mails nochmals einlesen möchten, müssen Sie diese Eigenschaft wieder leeren.

Formular erstellen

Das Formular frmMailImport besteht nun zusätzlich noch aus einem Unterformular namens sfmMailImport. Dieses ist wie in Bild 2 aufgebaut und verwendet die Tabelle tblOptionen als Datenherkunft.

Das Unterformular sfmMailImport in der Entwurfsansicht

Bild 2: Das Unterformular sfmMailImport in der Entwurfsansicht

Das Hauptformular nimmt dieses Unterformular auf und verwendet zusätzlich die in Bild 3 zu erkennenden Steuerelemente. Besondere Bedeutung kommt natürlich dem Listenfeld lstVerzeichnisse zu. Es verwendet ebenfalls eine Datensatzherkunft auf Basis der Tabelle tblOptionen, allerdings hier in Form einer Abfrage, welche nur die beiden Felder OptionID und Verzeichnis berücksichtigt:

Das Formular frmMailImport in der Entwurfsansicht

Bild 3: Das Formular frmMailImport in der Entwurfsansicht

SELECT OptionID, Verzeichnis FROM tblOptionen;

Damit nur das Verzeichnis im Listenfeld erscheint, stellen Sie die Eigenschaft Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreiten auf den Wert 0cm ein. Wenn der Benutzer auf einen der Einträge klickt, sollen dessen Details im unteren Bereich des Formulars eingeblendet werden.

Dies erreichen Sie mithilfe zweier Prozeduren. Die erste ist die Ereignisprozedur, die durch das Ereignis Nach Aktualisierung des Listenfeldes ausgelöst wird (s. Listing 1).

Private Sub lstVerzeichnisse_AfterUpdate()
     VerzeichnisAktualisieren
End Sub

Listing 1: Diese Prozedur wird nach der Auswahl eines Eintrags im Listenfeld ausgelöst.

Diese ruft eine weitere Prozedur namens VerzeichnisAktualisieren auf, die Sie in Listing 2 finden. Die Prozedur prüft, ob aktuell ein Eintrag im Listenfeld markiert ist (was beispielsweise nicht der Fall ist, wenn es leer ist und der Benutzer dennoch hineinklickt) und verschiebt den Datensatzzeiger im Unterformular auf den Datensatz, dessen OptionID dem aktuell im Listenfeld ausgewählten Eintrag entspricht.

Private Sub VerzeichnisAktualisieren()
     If Not IsNull(Me!lstVerzeichnisse) Then
         Me!sfmMailimport.Form.Recordset.FindFirst "OptionID = " & Me!lstVerzeichnisse
     End If
End Sub

Listing 2: Aktualisierung der Detaildaten zu einem Listenfeldeintrag

Beim Laden des Formulars soll das Listenfeld gleich den ersten Datensatz markieren, damit der Benutzer erkennen kann, zu welchem Listeneintrag die Daten aus dem Unterformular gehören. Dies erledigen wir mit der Ereignisprozedur, die durch das Ereignis Beim Laden ausgelöst wird und nur eine einzige Anweisung enthält:

Private Sub Form_Load()
     Me!lstVerzeichnisse = Me!lstVerzeichnisse.ItemData(0)
End Sub

Anlegen einer neuen Konfiguration

Ein Klick auf die Schaltfläche cmdNeu im oberen Bereich des Formulars soll einen neuen Datensatz in der Tabelle anlegen, der gleichzeitig im Listenfeld und im Unterformular erscheint. Dazu fragen wir das Outlook-Verzeichnis, für welches die Konfiguration bestimmt sein soll, gleich beim Anklicken der Neu-Schaltfläche ab. Die Prozedur cmdNeu_Click aus Listing 3, die durch das Anklicken ausgelöst wird, ermittelt zunächst den Titel des aktuell geöffneten Access-Fensters. Dies ist nötig, da beim nachfolgenden Aufrufen des Outlook-Dialogs zum Auswählen eines Outlook-Ordners gelegentlich das geöffnete Outlook-Fenster stehen bleibt und das aufrufende Access-Fenster verdeckt ist. Um das Access-Fenster anschließend wieder in den Vordergrund zu holen, benötigen wir den Fenstertitel. Diesen erhalten wir mithilfe der Funktion GetActiveWindowTitle, die Sie im Modul mdlAPI finden.

Private Sub cmdNeu_Click()
     Dim strVerzeichnis As String
     Dim db As DAO.Database
     Dim lngOptionID As Long
     Dim strFenster As String
     strFenster = GetActiveWindowTitle
     strVerzeichnis = VerzeichnisWaehlen
     If Len(strVerzeichnis) > 0 Then
         Set db = CurrentDb
         db.Execute "INSERT INTO tblOptionen(Verzeichnis) VALUES('" & strVerzeichnis & "')"
         lngOptionID = db.OpenRecordset("SELECT @@IDENTITY").Fields(0)
         Me!lstVerzeichnisse.Requery
         Me!sfmMailimport.Form.Requery
         Me!lstVerzeichnisse = lngOptionID
         VerzeichnisAktualisieren
         AppActivate strFenster
     End If
End Sub

Listing 3: Prozedur zum Anlegen einer neuen Konfiguration

Die Funktion VerzeichnisWaehlen haben Sie ja bereits in den vorhergehenden Teilen dieser Beitragsreihe kennen gelernt – es öffnet den Outlook-Dialog zum Auswählen eines Ordners (s. Bild 4). Danach prüft die Prozedur, ob der Benutzer einen Ordner ausgewählt hat. In diesem Fall erzeugt er eine Referenz auf das aktuelle Database-Objekt und führt eine INSERT INTO-Abfrage aus, welche einen neuen Datensatz in die Tabelle tblOptionen einfügt und dabei gleich das Verzeichnis in das entsprechende Feld einträgt. Die Abfrage SELECT @@IDENTITY ermittelt den Wert des Primärschlüsselfeldes des neu hinzugefügten Datensatzes, das Ergebnis landet in der Variablen lngOptionID.

Auswählen des Mail-Ordners

Bild 4: Auswählen des Mail-Ordners

Da nun ein neuer Datensatz vorliegt, müssen die Datenherkunft des Unterformulars sowie die Datensatzherkunft des Listenfeldes aktualisiert werden, was die Prozedur jeweils mit der Requery-Methode erledigt. Danach stellt die Prozedur das Listenfeld auf den neu hinzugefügten Eintrag ein und ruft die bereits weiter oben vorgestellte Prozedur VerzeichnisAktualisieren auf, die den aktuell im Listenfeld markierten Eintrag im Unterformular anzeigt.

Schließlich aktiviert die Prozedur AppActivate das Fenster mit dem weiter oben in der Variablen strFenster gespeicherten Titel der Access-Anwendung.

Eine Konfiguration löschen

Ein Klick auf die Schaltfläche cmdLoeschen im oberen Bereich des Formulars soll den aktuell markierten Eintrag im Listenfeld aus der Tabelle tblOptionen löschen und die übrigen Steuerelemente aktualisieren, sodass der gelöschte Datensatz nirgends mehr auftaucht.

Die durch die Schaltfläche ausgelöste Prozedur sieht wie in Listing 4 aus und prüft zunächst, ob überhaupt ein Eintrag im Listenfeld markiert ist. Ist dies der Fall, fragt die Prozedur den Benutzer per Meldungsfenster, ob die Konfiguration mit dem angegebenen Verzeichnis tatsächlich gelöscht werden soll.

Private Sub cmdLoeschen_Click()
     Dim db As DAO.Database
     If Not IsNull(Me!lstVerzeichnisse) Then
         If MsgBox("Verzeichnis '" & Me!lstVerzeichnisse.Column(1) & "' wirklich aus der Liste entfernen?", _
                 vbYesNo) = vbYes Then
             Set db = CurrentDb
             db.Execute "DELETE FROM tblOptionen WHERE OptionID = " & Me!lstVerzeichnisse, dbFailOnError
             Me!lstVerzeichnisse.Requery
             Me!sfmMailimport.Form.Requery
             Me!lstVerzeichnisse = Me!lstVerzeichnisse.ItemData(0)
             VerzeichnisAktualisieren

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]