{"id":55000985,"date":"2015-06-01T00:00:00","date_gmt":"2020-05-22T19:26:22","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=985"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"OutlookMails_in_Access_archivieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/","title":{"rendered":"Outlook-Mails in Access archivieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>&#8222;Eine neue .pst-Datei ist wie ein neues Leben &#8230;&#8220; &#8211; so f&uuml;hlt es sich an, wenn man sich von einer Outlook-Installation voller Termine, Mails, Kontakte et cetera trennt und einfach einmal neu beginnt. Allerdings wird man einen Teil der Daten ohnehin &uuml;bernehmen (die Kontakte), und zumindest die Mails sollte man sicherheitshalber noch eine Weile aufbewahren. Nur wo Wenn Sie die Inhalte von Mails archivieren und f&uuml;r den gelegentlichen Zugriff bereithalten wollen, bietet sich nat&uuml;rlich der Einsatz einer Access-Datenbank an. Dieser Beitrag beleuchtet, wie Sie die Mails archivieren, ein weiterer besch&auml;ftigt sich mit der Suche nach und der Wiederherstellung von archivierten E-Mails.<\/b><\/p>\n<p>Bevor man seine <b>Outlook.pst <\/b>in die ewigen Jagdgr&uuml;nde verabschiedet oder die enthaltenen E-Mails l&ouml;scht, sollte man die Inhalte gegebenenfalls sichern. Was bietet sich da mehr an als eine Access-Datenbank &#8211; plus gegebenenfalls eines Ordners, in dem Sie alle Anlagen der E-Mails speichern<\/p>\n<p>F&uuml;r den Access-Entwickler ist das eine gute Idee, denn damit kann er, ein entsprechendes Datenmodell vo-rausgesetzt, sp&auml;ter auch die E-Mails bestimmter Kunden herausfiltern und etwa mit der Kundendatenbank verkn&uuml;pfen. Voraussetzung hierf&uuml;r ist allein, dass die Absender und die Empf&auml;nger in der Tabelle mit den E-Mail-Daten gespeichert werden.<\/p>\n<p>Neben den Metadaten einer E-Mail wie Absender, Empf&auml;nger, Empfangsdatum, Betreff oder Inhalt wollen wir die Anlagen speichern. Au&szlig;erdem soll vorsichtshalber auch die komplette Mail im Format <b>.msg <\/b>in einem <b>Attachment<\/b>-Feld des Datensatzes mit der E-Mail gespeichert werden. Dies stellt sicher, dass wir die E-Mail mit wenigen Zeilen Code erstens &ouml;ffnen und zweitens in Outlook wiederherstellen k&ouml;nnen.<\/p>\n<h2>Platzproblemen vorbeugen<\/h2>\n<p>Wenn Sie neben den E-Mail-Metadaten auch noch die E-Mail selbst im <b>.msg<\/b>-Format in der Datenbank speichern wollen, ist diese vermutlich schnell genauso gro&szlig; wie die <b>.pst<\/b>-Datei. Meine ist aktuell rund drei Gigabyte gro&szlig; &#8211; so viel passt leider nicht in eine Access-Datenbank. Also bauen wir eine Option ein, die es erlaubt, eine Gr&ouml;&szlig;enbegrenzung f&uuml;r die in der Datenbank zu speichernden Mails anzugeben. Dann werden alle Mails, deren Gr&ouml;&szlig;e diesen Wert nicht &uuml;bersteigt, in der Datenbank gespeichert, die &uuml;brigen landen in Dateiform in einem Verzeichnis, das sich im gleichen Ordner wie die Datenbank selbst befindet.<\/p>\n<h2>Anlagen speichern<\/h2>\n<p>Gegebenenfalls m&ouml;chten Sie auch die Anlagen schnell zugreifbar machen. In diesem Fall speichern Sie auch diese in einem separaten Verzeichnis und tragen nur den Pfad zur jeweiligen Datei in eine weitere Tabelle der Datenbank ein.<\/p>\n<h2>Datenmodell<\/h2>\n<p>Damit steht das Datenmodell auch schon fest: Wir ben&ouml;tigen zun&auml;chst eine Tabelle namens <b>tblMailItems<\/b>, welche die Metadaten der eingelesenen E-Mails und gegebenenfalls die <b>.msg<\/b>-Dateien in einem Anlagefeld speichert.<\/p>\n<p>Die zweite Tabelle hei&szlig;t <b>tblAnlagen<\/b>. Da jede E-Mail keine, eine oder mehrere Anlagen enthalten kann, k&ouml;nnen wir deren Speicherort nicht einfach in einem Feld der Tabelle <b>tblMailItems <\/b>speichern, sondern m&uuml;ssen daf&uuml;r eine per 1:n-Beziehung verkn&uuml;pfte Tabelle anlegen. Diese soll <b>tblAnlagen <\/b>hei&szlig;en und ist &uuml;ber das Fremdschl&uuml;sselfeld <b>MailItemID <\/b>mit der Tabelle <b>tblMailItems <\/b>verkn&uuml;pft.<\/p>\n<p>Schlie&szlig;lich ben&ouml;tigen wir noch eine dritte Tabelle namens <b>tblOptionen<\/b>, mit der wir die Einstellungen f&uuml;r den Import sichern.<\/p>\n<p>Die Tabelle <b>tblMailItems<\/b> sieht im Entwurf wie in Bild 1 aus. Die Tabelle nimmt die wesentlichen Informationen der jeweiligen E-Mail auf. Da wir die E-Mail ja entweder in der Tabelle oder aber im Dateisystem noch als <b>.msg<\/b>-Datei speichern, die wir jederzeit wiederherstellen oder &ouml;ffnen k&ouml;nnen, brauchen wir in der Tabelle nur die Daten zu speichern, nach denen wir die E-Mails durchsuchen wollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_003.png\" alt=\"Die Tabelle tblMailItems in der Entwurfsansicht\" width=\"600\" height=\"276,0902\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Tabelle tblMailItems in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Die zweite Tabelle namens <b>tblAnlagen <\/b>speichert zu jeder E-Mail die Speicherorte f&uuml;r die Anlagen. Die Datens&auml;tze werden dabei &uuml;ber das Feld <b>MailItemID <\/b>mit der Tabelle <b>tblMailItems <\/b>verkn&uuml;pft (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_004.png\" alt=\"Die Tabelle tblAnlagen in der Entwurfsansicht\" width=\"600\" height=\"151,3678\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Die Tabelle tblAnlagen in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Fehlt noch die Tabelle <b>tblOptionen<\/b>. Diese sieht wie in Bild 3 aus. Die Bedeutung der einzelnen Felder wird gleich im Anschluss bei der Erl&auml;uterung des Einlesevorgangs deutlich werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_005.png\" alt=\"Die Tabelle tblOptionen in der Entwurfsansicht\" width=\"600\" height=\"193,1224\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Tabelle tblOptionen in der Entwurfsansicht<\/span><\/b><\/p>\n<h2>Formular zur Steuerung des Einlesevorgangs<\/h2>\n<p>Das Formular <b>frmMailimport <\/b>steuert den Einlesevorgang. Das hei&szlig;t, dass Sie damit die Optionen einstellen und den Vorgang starten k&ouml;nnen.<\/p>\n<p>Das Formular sieht im Entwurf wie in Bild 4 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_002.png\" alt=\"Das Formular frmMailImport in der Entwurfsansicht\" width=\"422,5\" height=\"258,6565\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Das Formular frmMailImport in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Das Formular ist an die Tabelle <b>tblOptionen <\/b>gebunden. Das Textfeld <b>txtVerzeichnis<\/b> liefert den Wert des Feldes Verzeichnis. Diesen Wert k&ouml;nnen Sie manuell einstellen oder aber Sie verwenden die Schaltfl&auml;che mit den drei Punkten, um den daf&uuml;r vorgesehenen Outlook-Dialog zu &ouml;ffnen und den Mail-Ordner auszuw&auml;hlen, dessen E-Mails eingelesen werden sollen.<\/p>\n<p>Die Schaltfl&auml;che hei&szlig;t <b>cmdVerzeichnisWaehlen <\/b>und ruft die folgende Prozedur auf:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVerzeichnisWaehlen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>objOutlook<span style=\"color:blue;\"> As <\/span>Outlook.Application\r\n     <span style=\"color:blue;\">Dim <\/span>objMAPI<span style=\"color:blue;\"> As <\/span>Outlook.NameSpace\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Set<\/span> objOutlook = <span style=\"color:blue;\">New<\/span> Outlook.Application\r\n     <span style=\"color:blue;\">Set<\/span> objMAPI = objOutlook.GetNamespace(\"MAPI\")\r\n     <span style=\"color:blue;\">Set<\/span> objFolder = objMAPI.PickFolder\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objFolder Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtVerzeichnis = objFolder.FolderPath\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies zeigt den Dialog aus Bild 5 an. Damit w&auml;hlt der Benutzer den Mail-Ordner aus, der als Basis f&uuml;r den Einlesevorgang dient. Den Pfad zu diesem Ordner ermittelt die Prozedur mit der Eigenschaft <b>FolderPath <\/b>des <b>Folder<\/b>-Objekts.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_006.png\" alt=\"Dialog zum Ausw&auml;hlen des einzulesenden Mail-Ordners\" width=\"422,5\" height=\"348,5028\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Dialog zum Ausw&auml;hlen des einzulesenden Mail-Ordners<\/span><\/b><\/p>\n<p>F&uuml;r das Formular haben wir die Eigenschaften <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen<\/b>, <b>Trennlinien <\/b>und <b>Bildlaufleisten <\/b>auf den Wert <b>Nein <\/b>eingestellt.<\/p>\n<p>Au&szlig;erdem legen Sie f&uuml;r die Eigenschaft <b>Zyklus <\/b>den Wert <b>Aktueller Datensatz <\/b>fest. Der Benutzer kann dann nur den ersten Datensatz der Tabelle <b>tblOptionen <\/b>bearbeiten und nicht zu einem neuen Datensatz wechseln &#8211; mehr ben&ouml;tigt er ja auch nicht.<\/p>\n<p>Damit erscheint das ausgew&auml;hlte Outlook-Mail-Verzeichnis nun wie in Bild 6.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_03\/pic_985_007.png\" alt=\"Das Formular frmMailImport in der Formularansicht\" width=\"422,5\" height=\"221\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das Formular frmMailImport in der Formularansicht<\/span><\/b><\/p>\n<p>Die &uuml;brigen Einstellungen der Tabelle <b>tblOptionen <\/b>bildet das Formular wie in der Abbildung ab &#8211; also mit lauter Kontrollk&auml;stchen sowie einem Textfeld namens <b>txtGroesse <\/b>f&uuml;r die Eingabe der maximalen Gr&ouml;&szlig;e, mit der eine E-Mail direkt in der Tabelle gespeichert werden soll.<\/p>\n<h2>Einlesevorgang starten<\/h2>\n<p>Ein Klick auf die Schaltfl&auml;che <b>cmdImportStarten <\/b>initialisiert den Einlesevorgang. Dies l&ouml;st die folgende Prozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdImportStarten_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>lngAnzahl<span style=\"color:blue;\"> As Long<\/span>\r\n     SysCmd acSysCmdSetStatus, _\r\n         \"Einzulesende Mails werden gez&auml;hlt\"\r\n     lngAnzahl = MailsZaehlen(Me!txtVerzeichnis, _\r\n         Me!chkRekursiv)\r\n     Import Me!txtVerzeichnis, lngAnzahl, _\r\n         Me!txtGroesse, Me!chkNeuEinlesen, _\r\n         Me!chkRekursiv, Me!chkVorhandeneLoeschen, _\r\n         Me!chkAnlagenSpeichern\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur blendet zun&auml;chst einen Text in der Statusleiste von Access ein, der darauf hinweist, dass die Anwendung nun die Anzahl der einzulesenden E-Mails liest. Diesen Wert ben&ouml;tigen wir, um in der Statusleiste den Fortschritt abbilden zu k&ouml;nnen.<\/p>\n<p>Dann startet die Prozedur den Z&auml;hlvorgang durch den Aufruf der Funktion <b>MailsZaehlen<\/b>, der sie lediglich den Verweis auf den Outlook-Pfad sowie den Inhalt des Kon-trollk&auml;stchens <b>chkRekursiv <\/b>&uuml;bergibt.<\/p>\n<h2>Einzulesende Mails z&auml;hlen<\/h2>\n<p>Die Prozedur <b>MailsZaehlen <\/b>ermittelt zun&auml;chst mit der Funktion <b>GetFolderByPath <\/b>das <b>Folder<\/b>-Objekt von Outlook f&uuml;r den &uuml;bergebenen Pfad, also beispielsweise <b>\\\\Outlook\\Posteingang<\/b>. <b>GetFolderByPath <\/b>ist eine benutzerdefinierte Funktion, die das <b>Folder<\/b>-Objekt f&uuml;r den angegebenen Pfad zur&uuml;ckliefert (s. Modul <b>mdlImport<\/b>).<\/p>\n<p>Die <b>Count<\/b>-Eigenschaft der <b>Items<\/b>-Auflistung dieses <b>Folder<\/b>-Objekts liefert die Anzahl der enthaltenen Elemente. Gegebenenfalls befinden sich dort auch Elemente mit einem anderen Typ als <b>MailItem<\/b>, aber dies sollte die Ausnahme sein und wir z&auml;hlen diese einfach mit &#8211; sonst m&uuml;ssten wir hier noch eine weitere Pr&uuml;fung einbauen, die Performance kostet.<\/p>\n<p>Sollte der Benutzer im Formular <b>frmMailimport <\/b>die Option <b>chkRekursiv <\/b>gesetzt haben, ruft die Funktion eine weitere Funktion namens <b>MailsZaehlenRek <\/b>auf und &uuml;bergibt dieser das <b>Folder<\/b>-Objekt sowie den <b>Long<\/b>-Wert <b>lngAnzahl <\/b>als Parameter. Letzterer ist bereits mit der aktuellen Anzahl gef&uuml;llt und soll um die Anzahl der Mails in den untergeordneten Verzeichnissen erh&ouml;ht werden:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>MailsZaehlen(strVerzeichnis<span style=\"color:blue;\"> As String<\/span>, _\r\n         bolRekursiv<span style=\"color:blue;\"> As Boolean<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>lngAnzahl<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFolder = GetFolderByPath(strVerzeichnis)\r\n     lngAnzahl = objFolder.Items.Count\r\n     <span style=\"color:blue;\">If <\/span>bolRekursiv<span style=\"color:blue;\"> Then<\/span>\r\n         MailsZaehlenRek objFolder, lngAnzahl\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     MailsZaehlen = lngAnzahl\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Funktion <b>MailsZaehlenRek <\/b>ist eine rekursiv definierte Funktion, die sich selbst aufruft. Dies geschieht so lange, bis keine untergeordneten Verzeichnisse mehr gefunden werden. Die Variable <b>lngAnzahl <\/b>wird durch alle Aufrufe geschleppt und jeweils um die Anzahl der E-Mails des aktuell in der <b>For Each<\/b>-Schleife durchlaufenen <b>Folder<\/b>-Objekts erh&ouml;ht:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>MailsZaehlenRek(objParent<span style=\"color:blue;\"> As <\/span>_\r\n         Outlook.Folder, lngAnzahl<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     For Each objFolder In objParent.Folders\r\n         lngAnzahl = lngAnzahl + objFolder.Items.Count\r\n         MailsZaehlenRek objFolder, lngAnzahl\r\n     <span style=\"color:blue;\">Next<\/span> objFolder\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Auf diese Weise ermittelt die Funktion <b>MailsZaehlen <\/b>die Gesamtzahl der E-Mails und liefert diese als Funktionswert an die aufrufende Prozedur <b>cmdImportStarten <\/b>zur&uuml;ck.<\/p>\n<h2>Die Import-Routine<\/h2>\n<p>Die Prozedur ruft dann die Routine <b>Import <\/b>auf und &uuml;bergibt dieser die Werte aller gebundenen Felder des Formulars <b>frmMailimport<\/b> (s. Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Import(strVerzeichnis<span style=\"color:blue;\"> As String<\/span>, lngAnzahl<span style=\"color:blue;\"> As Long<\/span>, lngSize<span style=\"color:blue;\"> As Long<\/span>, bolNeuEinlesen<span style=\"color:blue;\"> As Boolean<\/span>, _\r\n         bolRekursiv<span style=\"color:blue;\"> As Boolean<\/span>, bolVorhandeneLoeschen<span style=\"color:blue;\"> As Boolean<\/span>, bolAnlagenSpeichern<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>lngAnzahlEingelesen<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFolder = GetFolderByPath(strVerzeichnis)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objFolder Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         <span style=\"color:blue;\">If <\/span>bolVorhandeneLoeschen<span style=\"color:blue;\"> Then<\/span>\r\n             SysCmd acSysCmdSetStatus, \"Vorhandene Daten werden gel&ouml;scht\"\r\n             db.Execute \"DELETE FROM tblMailItems\", dbFailOnError\r\n             SysCmd acSysCmdSetStatus, \"Anlagenverzeichnis wird gel&ouml;scht\"\r\n             VerzeichnisLoeschen CurrentProject.Path & \"\\Anlagen\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         lngAnzahlEingelesen = objFolder.Items.Count\r\n         MailsEinlesen objFolder, db, lngSize, bolNeuEinlesen, bolAnlagenSpeichern\r\n         SysCmd acSysCmdSetStatus, lngAnzahlEingelesen & \"\/\" & lngAnzahl\r\n         <span style=\"color:blue;\">If <\/span>bolRekursiv<span style=\"color:blue;\"> Then<\/span>\r\n             UnterordnerEinlesen objFolder, db, lngAnzahl, lngAnzahlEingelesen, lngSize, bolNeuEinlesen, _\r\n                 bolAnlagenSpeichern\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         SysCmd acSysCmdClearStatus\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Prozedur Import<\/span><\/b><\/p>\n<p>Die Prozedur ermittelt zun&auml;chst das <b>Folder<\/b>-Objekt f&uuml;r das Startverzeichnis in Outlook &#8211; dies wiederum mit der Funktion <b>GetFolderByPath<\/b> -, und speichert es in der Variablen <b>objFolder<\/b>. Sollte <b>objFolder <\/b>den Wert <b>Nothing <\/b>enthalten, wurde das Verzeichnis nicht gefunden und die Prozedur beendet.<\/p>\n<p>Anderenfalls f&uuml;llt die Prozedur die Variable <b>db <\/b>mit einem Verweis auf das aktuelle <b>Database<\/b>-Objekt. Danach pr&uuml;ft die Prozedur, ob vorhandene E-Mails gel&ouml;scht werden sollen. Ist dies der Fall, erscheint zun&auml;chst eine neue Statusmeldung unten links im Access-Fenster, dann ruft die Prozedur die <b>DELETE<\/b>-Anweisung zum L&ouml;schen des Inhalts der Tabelle <b>tblMailItems <\/b>auf. Wenn Sie gerade testweise ein paar hundert Megabyte E-Mails eingelesen haben und diese wieder l&ouml;schen wollen, kann dies &uuml;brigens ein paar Augenblicke dauern.<\/p>\n<p>Danach leert die Prozedur das Verzeichnis, in das gegebenenfalls die Anlagen der E-Mails gespeichert wurden. Dies erledigt die Prozedur <b>VerzeichnisLoeschen<\/b>, die als Parameter den Namen des Verzeichnisses der aktuellen Datenbank mit dem Unterverzeichnis <b>Anlagen <\/b>erh&auml;lt.<\/p>\n<p>Diese Prozedur verwendet das <b>FileSystemObject<\/b>, um zun&auml;chst das Verzeichnis zu ermitteln und mit einem Objekt des Typs <b>Folder <\/b>zu referenzieren. Dann l&ouml;scht es dieses Objekt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerzeichnisLoeschen(strVerzeichnis<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objFSO<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFSO = CreateObject( _\r\n         \"Scripting.FileSystemObject\")\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFolder = objFSO.GetFolder(strVerzeichnis)\r\n     objFolder.Delete\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">Set<\/span> objFolder = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> objFSO = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Da wir nur dieses eine Mal auf die Bibliothek zugreifen, erstellen wir nicht extra einen Verweis, sondern verwenden Late Binding, um auf die enthaltenen Objekte und Methoden zuzugreifen.<\/p>\n<p>Anschlie&szlig;end setzt die Prozedur <b>Import <\/b>das Einlesen der E-Mails fort. Sie ermittelt die Anzahl der E-Mails des aktuellen Verzeichnisses und tr&auml;gt diese in die Variable <b>lngAnzahlEingelesen <\/b>ein. Diese wird uns noch l&auml;nger begleiten und jeweils um die Anzahl der eingelesenen E-Mails auch der Unterformulare erg&auml;nzt.<\/p>\n<p>Damit folgt der Aufruf der Prozedur <b>MailsEinlesen<\/b>, welche die E-Mails des Ordners einliest &#8211; mehr dazu weiter unten. Das Ergebnis ist, dass die E-Mails des mit dem Objekt <b>objFolder <\/b>&uuml;bergebenen Outlook-Verzeichnisses eingelesen wurden.<\/p>\n<p>Anschlie&szlig;end aktualisiert die Prozedur die Statusanzeige, damit der Benutzer erf&auml;hrt, wie viele E-Mails mittlerweile eingelesen wurden.<\/p>\n<p>Dann k&uuml;mmert sich die Prozedur um die Unterformulare &#8211; aber nur, wenn der Benutzer den Wert des Kontrollk&auml;stchens <b>chkRekursiv <\/b>auf <b>True <\/b>eingestellt hat. Ist dies der Fall, hat auch <b>bolRekursiv <\/b>den Wert <b>True <\/b>und die folgende Anweisung wird ausgef&uuml;hrt. Dies erledigt die Prozedur <b>UnterordnerEinlesen<\/b>, welche wiederum den Verweis auf den aktuellen Ordner und einige weitere Informationen per Parameter erh&auml;lt.<\/p>\n<p>Auch diese Prozedur sehen wir uns weiter unten an.<\/p>\n<p>Zu guter Letzt leert die Prozedur die Statusanzeige von Access.<\/p>\n<h2>Mails einlesen<\/h2>\n<p>Das Einlesen erfolgt in zwei Schritten: Die erste Prozedur namens <b>MailsEinlesen <\/b>durchl&auml;uft alle E-Mails eines Ordners, die zweite namens <b>MailEinlesen <\/b>liest dann tats&auml;chlich die Daten einer jeden E-Mail in die Datenbank beziehungsweise das Dateisystem ein (s. Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MailsEinlesen(objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder, db<span style=\"color:blue;\"> As <\/span>DAO.Database, lngSize<span style=\"color:blue;\"> As Long<\/span>, bolNeuEinlesen<span style=\"color:blue;\"> As Boolean<\/span>, _\r\n         bolAnlagenSpeichern<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objItem<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem\r\n     For Each objItem In objFolder.Items\r\n         <span style=\"color:blue;\">If <\/span>TypeName(objItem) = \"MailItem\"<span style=\"color:blue;\"> Then<\/span>\r\n             MailEinlesen objItem, objFolder.FolderPath, db, lngSize, bolNeuEinlesen, bolAnlagenSpeichern\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objItem\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Prozedur MailsEinlesen<\/span><\/b><\/p>\n<p>Die Prozedur <b>MailsEinlesen <\/b>erwartet als Parameter unter anderem den Outlook-Ordner, dessen E-Mails eingelesen werden sollen.<\/p>\n<p>Au&szlig;erdem landen dort ein Verweis auf das aktuelle <b>Database<\/b>-Objekt sowie auf die maximale Gr&ouml;&szlig;e der E-Mails (<b>lngSize<\/b>), der Parameter <b>bolNeuEinlesen<\/b>, der darauf hinweist, ob auch bereits eingelesene E-Mails erneut eingelesen werden sollen, und der Parameter <b>bolAnlagenSpeichern<\/b>, der festlegt, ob die Anlagen nochmals separat gespeichert werden sollen, auch wenn diese ja bereits in den <b>.msg<\/b>-Dateien in der Tabelle oder im Dateisystem gespeichert sind.<\/p>\n<p>Die Prozedur durchl&auml;uft alle Elemente der <b>Items<\/b>-Auflistung des &uuml;bergebenen <b>Folder<\/b>-Objekts und ruft f&uuml;r alle Elemente, deren Typ dem Wert <b>MailItem <\/b>entspricht, die Prozedur <b>MailEinlesen <\/b>auf. Diese erwartet prinzipiell die gleichen Parameter wie die Prozedur <b>MailsEinlesen<\/b>.<\/p>\n<h2>Eine E-Mail einlesen<\/h2>\n<p>Die Prozedur <b>MailEinlesen <\/b>liest genau die mit dem Parametern <b>objMailItem <\/b>&uuml;bergebene E-Mail in die Datenbank ein &#8211; vorausgesetzt, diese wurde zuvor noch nicht eingelesen beziehungsweise es sollen ohnehin alle E-Mails nochmals eingelesen werden.<\/p>\n<p>Der erste Teil der Prozedur (s. Listing 3) pr&uuml;ft zun&auml;chst, ob die Eigenschaft <b>BillingInformation <\/b>des <b>MailItem<\/b>-Objekts den Wert <b>Saved <\/b>enth&auml;lt. Dies ist immer der Fall, wenn die Mail noch nicht eingelesen wurde.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MailEinlesen(objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem, strFolderpath<span style=\"color:blue;\"> As String<\/span>, db<span style=\"color:blue;\"> As <\/span>DAO.Database, _\r\n         lngSize<span style=\"color:blue;\"> As Long<\/span>, bolNeuEinlesen<span style=\"color:blue;\"> As Boolean<\/span>, bolAnlagenSpeichern<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strAbsender<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strEmpfaenger<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objRecipient<span style=\"color:blue;\"> As <\/span>Outlook.Recipient\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngError<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngMailItemID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">With<\/span> objMailItem\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> .BillingInformation = \"saved\" Or bolNeuEinlesen = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             lngMailItemID = Nz(DLookup(\"MailItemID\", \"tblMailItems\", \"EntryID = ''\" & .EntryID & \"''\"), 0)\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> lngMailItemID = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 db.Execute \"DELETE FROM tblMailItems WHERE EntryID = ''\" & .EntryID & \"''\", dbFailOnError\r\n                 On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n                 Kill CurrentProject.Path & \"\\MSG\\\" & lngMailItemID & \".msg\"\r\n                 <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             strAbsender = .SenderEmailAddress\r\n             For i = 1 To .Recipients.Count\r\n                 <span style=\"color:blue;\">Set<\/span> objRecipient = .Recipients(i)\r\n                 Select Case objRecipient.Type\r\n                     <span style=\"color:blue;\">Case <\/span>olTo\r\n                         strEmpfaenger = strEmpfaenger & \";\" & objRecipient.Address\r\n                     <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">End Select<\/span>\r\n             <span style=\"color:blue;\">Next<\/span> i\r\n             strEmpfaenger = <span style=\"color:blue;\">Mid<\/span>(strEmpfaenger, 2)\r\n             strSQL = \"INSERT INTO tblMailItems(EntryID, Betreff, Body, HTMLBody, Absender, Empfaenger, Pfad, \" _\r\n                 & \"Erhalten, Groesse) VALUES(''\" & .EntryID & \"'', ''\" & <span style=\"color:blue;\">Replace<\/span>(.Subject, \"''\", \"''''\") & \"'', ''\" _\r\n                 & <span style=\"color:blue;\">Replace<\/span>(.Body, \"''\", \"''''\") & \"'', ''\" & <span style=\"color:blue;\">Replace<\/span>(.HTMLBody, \"''\", \"''''\") & \"'', ''\" _\r\n                 & <span style=\"color:blue;\">Replace<\/span>(strAbsender, \"''\", \"''''\") & \"'', ''\" & <span style=\"color:blue;\">Replace<\/span>(strEmpfaenger, \"''\", \"''''\") & \"'', ''\" _\r\n                 & strFolderpath & \"'', \" & ISODatum(.ReceivedTime) & \", \" & .Size & \")\"\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             db.Execute strSQL, dbFailOnError\r\n             lngError = Err.Number\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Prozedur MailEinlesen, Teil I<\/span><\/b><\/p>\n<p>Wenn die Prozedur die Mail eingelesen hat, stellt sie diese Eigenschaft auf den Wert <b>Saved <\/b>ein. Wurde die Mail bereits gespeichert, kann es immer noch sein, dass der Benutzer das Kontrollk&auml;stchen <b>chkNeuEinlesen <\/b>aktiviert hat &#8211; in diesem Fall liest die Prozedur die Mail in jedem Fall neu ein.<\/p>\n<p>Soll die E-Mail neu eingelesen werden, pr&uuml;ft die Prozedur noch, ob die Tabelle <b>tblMailItems <\/b>bereits einen Eintrag mit der <b>EntryID <\/b>der neu einzuf&uuml;genden E-Mail enth&auml;lt. Die <b>EntryID <\/b>ist die eindeutige Eigenschaft einer E-Mail unter Outlook. Dazu speichert die Prozedur den Prim&auml;rschl&uuml;sselwert eines eventuell gefundenen Eintrags in der Variablen <b>lngMailItemID<\/b>. Ist <b>lngMailItemID <\/b>danach nicht <b>0<\/b>, l&ouml;scht die Prozedur den entsprechenden Datensatz per <b>DELETE<\/b>-Aktionsabfrage aus der Tabelle <b>tblMailItems<\/b>.<\/p>\n<p>Au&szlig;erdem l&ouml;scht sie eventuell bereits f&uuml;r diese E-Mail angelegte <b>.msg<\/b>-Dateien aus dem Verzeichnis <b>MSG<\/b>. Danach liest sie den Absender aus der Eigenschaft <b>SenderEmailAddress <\/b>in die Variable <b>strAbsender <\/b>ein und durchl&auml;uft alle Empf&auml;nger &uuml;ber die Auflistung Recipients. Die Empf&auml;nger landen durch Semikola getrennt in der Variablen <b>strEmpfaenger<\/b>. Das f&uuml;hrende Semikolon wird anschlie&szlig;end entfernt.<\/p>\n<p>Schlie&szlig;lich stellt die Prozedur in der Variablen <b>strSQL <\/b>die SQL-Anweisung zusammen, die den neuen Datensatz mit den Daten der E-Mail in der Tabelle <b>tblMailItems <\/b>speichern soll. Dort ersetzt die Prozedur in einigen <b>String<\/b>-Elementen mit der <b>Replace<\/b>-Funktion einfache Hochkommata durch doppelte Hochkommata, damit diese keinen Fehler ausl&ouml;sen. Der Inhalt der Eigenschaft <b>ReceivedTime <\/b>wird mit der Funktion <b>ISODatum <\/b>so formatiert, dass er SQL-kompatibel ist. Die Prozedur f&uuml;hrt dann die SQL-Anweisung aus, stellt aber sicher, dass ein eventueller Fehler behandelt wird.<\/p>\n<p>Die Pr&uuml;fung auf einen bestimmten Fehler erfolgt dann in der Fortsetzung der Prozedur in Listing 4. Der Fehler <b>3035 <\/b>(<b>Nicht gen&uuml;gend Systemressourcen<\/b>) trat auf einem Testsystem mit Windows 7 und Access 2010 auf &#8211; die Ursache ist m&ouml;glicherweise, dass ein zu gro&szlig;er Inhalt in eines der Memofelder eingef&uuml;gt wurde.<\/p>\n<pre>             ...\r\n             <span style=\"color:blue;\">If <\/span>lngError = 3035<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblMailItems WHERE 1 = 2\", dbOpenDynaset)\r\n                 rst.Add<span style=\"color:blue;\">New<\/span>\r\n                 rst!EntryID = .EntryID\r\n                 rst!Betreff = .Subject\r\n                 rst!Body = .Body\r\n                 rst!HTMLBody = .HTMLBody\r\n                 rst!Absender = strAbsender\r\n                 rst!Empfaenger = strEmpfaenger\r\n                 rst!Pfad = strFolderpath\r\n                 rst!Erhalten = .ReceivedTime\r\n                 rst!Groesse = .Size\r\n                 lngMailItemID = rst!MailitemID\r\n                 rst.Update\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 lngMailItemID = db.OpenRecordset(\"SELECT @@IDENTITY\").Fields(0)\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">If <\/span>bolAnlagenSpeichern<span style=\"color:blue;\"> Then<\/span>\r\n                 AnlagenSpeichern objMailItem, db, strAbsender, lngMailItemID\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             MailItemSpeichern objMailItem, db, lngMailItemID, lngSize\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Die Prozedur MailEinlesen, Teil II<\/span><\/b><\/p>\n<p>Tatsache ist, dass wir die Daten in diesem Fall dennoch durch Einf&uuml;gen per DAO (<b>AddNew<\/b>&#8230;<b>Update<\/b>) in der Tabelle speichern konnten.<\/p>\n<p>Dies geschieht dann in den folgenden Anweisungen, die nur im Falle des Auftretens von Fehler 3035 ausgef&uuml;hrt werden. Sie legen einen neuen Datensatz mit <b>AddNew <\/b>im Recordset an, tragen die Werte aus den Eigenschaften der E-Mail ein und speichern den Datensatz mit der <b>Update<\/b>-Methode. In beiden F&auml;llen speichert die Prozedur den Wert des Prim&auml;rschl&uuml;sselfeldes des neuen Datensatzes in der Variablen <b>lngMailItemID<\/b>.<\/p>\n<p>Wenn der Benutzer die Option <b>chkAnlagenSpeichern <\/b>im Formular <b>frmMailimport <\/b>aktiviert hat, ruft die Prozedur nun noch die Routine <b>AnlagenSpeichern <\/b>f&uuml;r diese E-Mail auf. Anschlie&szlig;end folgt noch ein Aufruf der Routine <b>MailItem <\/b>speichern, der sich um das Speichern der <b>.msg<\/b>-Datei entweder in der Datenbank oder im Dateisystem k&uuml;mmert.<\/p>\n<h2>Speichern der Anlagen<\/h2>\n<p>Die Prozedur <b>AnlagenSpeichern <\/b>aus Listing 5 sichert, wenn der Benutzer dies aktiviert hat, die Anlagen einer E-Mail noch separat im Dateisystem. Die Prozedur pr&uuml;ft zun&auml;chst anhand der Eigenschaft <b>Count <\/b>der <b>Attachments<\/b>-Auflistung des <b>MailItem<\/b>-Objekts, ob die Mail &uuml;berhaupt Anlagen enth&auml;lt.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AnlagenSpeichern(objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem, db<span style=\"color:blue;\"> As <\/span>DAO.Database, strAbsender<span style=\"color:blue;\"> As String<\/span>, _\r\n         lngMailItemID<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objAnlage<span style=\"color:blue;\"> As <\/span>Outlook.Attachment\r\n     <span style=\"color:blue;\">Dim <\/span>strPfad<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>objMailItem.Attachments.Count &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strPfad = CurrentProject.Path & \"\\Anlagen\\\" & strAbsender & \"\\\" & lngMailItemID\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         MkDir CurrentProject.Path & \"\\Anlagen\\\"\r\n         MkDir CurrentProject.Path & \"\\Anlagen\\\" & strAbsender\r\n         MkDir CurrentProject.Path & \"\\Anlagen\\\" & strAbsender & \"\\\" & lngMailItemID\r\n         MkDir strPfad\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         For Each objAnlage In objMailItem.Attachments\r\n             strDateiname = objAnlage.FileName\r\n             objAnlage.SaveAsFile strPfad & \"\\\" & strDateiname\r\n             db.Execute \"INSERT INTO tblAnlagen(MailItemID, Anlagepfad, Dateiname) VALUES(\" & lngMailItemID & \", ''\" _\r\n                 & strPfad & \"\\\" & <span style=\"color:blue;\">Replace<\/span>(objAnlage.FileName, \"''\", \"''''\") & \"'', ''\" & <span style=\"color:blue;\">Replace<\/span>(strDateiname, \"''\", \"''''\") _\r\n                 & \"'')\", dbFailOnError\r\n         <span style=\"color:blue;\">Next<\/span> objAnlage\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Die Prozedur AnlagenSpeichern<\/span><\/b><\/p>\n<p>Falls ja, stellt sie in der Variablen <b>strPfad<\/b> den Zielpfad f&uuml;r die zu speichernden Anlagen zusammen. Der Pfad beginnt mit dem aktuellen Datenbankverzeichnis und setzt sich aus dem Ordner <b>Anlagen<\/b>, der E-Mail-Adresse des Absenders und dem Prim&auml;rschl&uuml;sselwert der E-Mail in der Tabelle <b>tblMailitems <\/b>zusammen. Sollte dieses Verzeichnis noch nicht vorhanden sein, legen die folgenden Anweisungen dieses an. Danach durchl&auml;uft die Prozedur alle Elemente der <b>Attachments<\/b>-Auflistung des <b>MailItem<\/b>-Objekts und speichert den Dateinamen jeweils in der Variablen <b>strDateiname<\/b>. Die Methode <b>SaveAsFile <\/b>speichert den Inhalt des Anlagefeldes schlie&szlig;lich unter dem gew&uuml;nschten Namen im angegebenen Verzeichnis. Au&szlig;erdem f&uuml;gt die Prozedur der Tabelle <b>tblAnlagen <\/b>einen Eintrag hinzu, der festh&auml;lt, welche Anlagen zu welcher Mail im Dateisystem hinterlegt wurden.<\/p>\n<h2>Speichern der .msg-Datei<\/h2>\n<p>Jede E-Mail kann als <b>.msg<\/b>-Datei gespeichert werden. Mit dem Textfeld <b>txtGroesse <\/b>gibt der Benutzer an, ab welcher Gr&ouml;&szlig;e die <b>.msg<\/b>-Dateien im Dateisystem gespeichert werden sollen. Die &uuml;brigen speichert die nachfolgend beschriebene Prozedur direkt in einem Anlagefeld in der Tabelle <b>tblMailitems<\/b>. Die Prozedur <b>MailItemSpeichern<\/b> (s. Listing 6) pr&uuml;ft die Gr&ouml;&szlig;e des <b>MailItem<\/b>-Objekts und vergleicht sie mit dem Wert des Parameters <b>lngSize<\/b>. Ist diese kleiner als <b>lngSize<\/b>, speichert die Prozedur die Mail mit der <b>SaveAs<\/b>-Methode zun&auml;chst im Dateisystem, und zwar unter dem Namen <b>temp.msg <\/b>im Verzeichnis der Datenbank. Dann erstellt sie ein neues Recordset auf Basis der Tabelle <b>tblMailitems<\/b>, wobei dieses nur den Datensatz zu der zu speichernden Mail enth&auml;lt. Der Datensatz wird mit der <b>Edit<\/b>-Methode zur Verarbeitung freigegeben. Der Inhalt des Anlagefeldes <b>MailItem <\/b>wird dann als neues Recordset referenziert. Es erh&auml;lt einen neuen Datensatz, dessen Feld <b>FileData <\/b>&uuml;ber die Methode <b>LoadFromFile<\/b> mit der soeben gespeicherten <b>.msg<\/b>-Datei gef&uuml;llt wird. Anschlie&szlig;end werden die verschachtelten Recordsets jeweils mit der <b>Update<\/b>-Methode gespeichert und die Datei <b>temp.msg <\/b>gel&ouml;scht.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MailItemSpeichern(objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem, db<span style=\"color:blue;\"> As <\/span>DAO.Database, lngMailItemID<span style=\"color:blue;\"> As Long<\/span>, _\r\n         lngSize<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rst2<span style=\"color:blue;\"> As <\/span>DAO.Recordset2\r\n     <span style=\"color:blue;\">Dim <\/span>fld2<span style=\"color:blue;\"> As <\/span>DAO.Field2\r\n     <span style=\"color:blue;\">With<\/span> objMailItem\r\n         <span style=\"color:blue;\">If <\/span>objMailItem.Size &lt;= lngSize<span style=\"color:blue;\"> Then<\/span>\r\n             .SaveAs CurrentProject.Path & \"\\temp.msg\"\r\n             <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT MailItem FROM tblMailitems WHERE MailItemID = \" & lngMailItemID, _\r\n                 dbOpenDynaset)\r\n             rst.Edit\r\n             <span style=\"color:blue;\">Set<\/span> rst2 = rst.Fields(\"MailItem\").Value\r\n             rst2.Add<span style=\"color:blue;\">New<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> fld2 = rst2.Fields(\"FileData\")\r\n             fld2.LoadFromFile CurrentProject.Path & \"\\temp.msg\"\r\n             Kill CurrentProject.Path & \"\\temp.msg\"\r\n             rst2.Update\r\n             rst.Update\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             MkDir CurrentProject.Path & \"\\MSG\\\"\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n             .SaveAs CurrentProject.Path & \"\\MSG\\\" & lngMailItemID & \".msg\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         .BillingInformation = \"saved\"\r\n         .Save\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Die Prozedur MailItemSpeichern<\/span><\/b><\/p>\n<p>Wenn die Gr&ouml;&szlig;e gr&ouml;&szlig;er als die zul&auml;ssige Gr&ouml;&szlig;e ist, speichert die Prozedur die <b>.msg<\/b>-Datei einfach im Verzeichnis <b>MSG<\/b>, das als Unterverzeichnis des aktuellen Datenbankverzeichnisses angelegt wird. Schlie&szlig;lich stellt die Prozedur die Eigenschaft <b>BillingInformation <\/b>des <b>MailItem<\/b>-Objekts auf <b>Saved <\/b>ein und speichert die ge&auml;nderte Mail mit der <b>Save<\/b>-Methode.<\/p>\n<h2>Einlesen der Unterordner<\/h2>\n<p>Fehlt noch die Prozedur <b>UnterordnerEinlesen<\/b>, welche f&uuml;r das rekursive Einlesen aller Ordner unterhalb des als Startordner angegebenen Ordners sorgt (s. Listing 7).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>UnterordnerEinlesen(objParent<span style=\"color:blue;\"> As <\/span>Outlook.Folder, db<span style=\"color:blue;\"> As <\/span>DAO.Database, lngAnzahl<span style=\"color:blue;\"> As Long<\/span>, _\r\n         lngAnzahlEingelesen<span style=\"color:blue;\"> As Long<\/span>, lngSize<span style=\"color:blue;\"> As Long<\/span>, bolNeuEinlesen<span style=\"color:blue;\"> As Boolean<\/span>, bolAnlagenSpeichern<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     For Each objFolder In objParent.Folders\r\n         lngAnzahlEingelesen = lngAnzahlEingelesen + objFolder.Items.Count\r\n         SysCmd acSysCmdSetStatus, lngAnzahlEingelesen & \"\/\" & lngAnzahl\r\n         MailsEinlesen objFolder, db, lngSize, bolNeuEinlesen, bolAnlagenSpeichern\r\n         UnterordnerEinlesen objFolder, db, lngAnzahl, lngAnzahlEingelesen, lngSize, bolNeuEinlesen, bolAnlagenSpeichern\r\n     <span style=\"color:blue;\">Next<\/span> objFolder\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Die Prozedur UnterordnerEinlesen<\/span><\/b><\/p>\n<p>Diese Prozedur erwartet den &uuml;bergeordneten Ordner als Parameter sowie einige weitere Informationen, die f&uuml;r die nachgeschalteten Routinen ben&ouml;tigt werden. Die Prozedur durchl&auml;uft alle Elemente der <b>Folders<\/b>-Auflistung des mit <b>objParent <\/b>&uuml;bergebenen <b>Folder<\/b>-Objekts und addiert zun&auml;chst die Anzahl der in diesem Ordner enthaltenen <b>MailItem<\/b>-Objekte zur Variablen <b>lngAnzahl-Eingelesen <\/b>hinzu.<\/p>\n<p>Dann ver&ouml;ffentlicht sie den aktuellen Zwischenstand in der Statusleiste und ruft die Prozedur <b>MailsEinlesen <\/b>f&uuml;r diesen Ordner auf. Dort beginnt das gleiche Spiel wie bereits weiter oben f&uuml;r den Hauptordner beschrieben von vorn.<\/p>\n<p>Danach ruft die Prozedur sich noch selbst auf, um eventuelle weitere untergeordnete <b>Folder<\/b>-Objekte zu durchlaufen und die enthaltenen E-Mails einzulesen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Im zweiten Teil dieser Beitragsreihe sehen wir uns an, wie die mit den hier vorgestellten Methoden gespeicherten Daten aussehen beziehungsweise an welchen Stellen in der Datenbank und im Dateisystem diese gelandet sind. Au&szlig;erdem entwerfen wir ein Formular, mit dem Sie die archivierten E-Mails nach verschiedenen Kriterien durchsuchen, in Outlook &ouml;ffnen und sogar wiederherstellen k&ouml;nnen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MailsImportieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{F70AF114-4F07-4253-84AE-1CC8C0C38A14}\/aiu_985.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8222;Eine neue .pst-Datei ist wie ein neues Leben &#8230;&#8220; &#8211; so f&uuml;hlt es sich an, wenn man sich von einer Outlook-Installation voller Termine, Mails, Kontakte et cetera trennt und einfach einmal neu beginnt. Allerdings wird man einen Teil der Daten ohnehin &uuml;bernehmen (die Kontakte), und zumindest die Mails sollte man sicherheitshalber noch eine Weile aufbewahren. Nur wo Wenn Sie die Inhalte von Mails archivieren und f&uuml;r den gelegentlichen Zugriff bereithalten wollen, bietet sich nat&uuml;rlich der Einsatz einer Access-Datenbank an. Dieser Beitrag beleuchtet, wie Sie die Mails archivieren, ein weiterer besch&auml;ftigt sich mit der Suche nach und der Wiederherstellung von archivierten E-Mails.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662015,66032015,44000026],"tags":[],"class_list":["post-55000985","post","type-post","status-publish","format-standard","hentry","category-662015","category-66032015","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Outlook-Mails in Access archivieren - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Outlook-Mails in Access archivieren\" \/>\n<meta property=\"og:description\" content=\"&quot;Eine neue .pst-Datei ist wie ein neues Leben ...&quot; - so f&uuml;hlt es sich an, wenn man sich von einer Outlook-Installation voller Termine, Mails, Kontakte et cetera trennt und einfach einmal neu beginnt. Allerdings wird man einen Teil der Daten ohnehin &uuml;bernehmen (die Kontakte), und zumindest die Mails sollte man sicherheitshalber noch eine Weile aufbewahren. Nur wo Wenn Sie die Inhalte von Mails archivieren und f&uuml;r den gelegentlichen Zugriff bereithalten wollen, bietet sich nat&uuml;rlich der Einsatz einer Access-Datenbank an. Dieser Beitrag beleuchtet, wie Sie die Mails archivieren, ein weiterer besch&auml;ftigt sich mit der Suche nach und der Wiederherstellung von archivierten E-Mails.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T19:26:22+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Outlook-Mails in Access archivieren\",\"datePublished\":\"2020-05-22T19:26:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/\"},\"wordCount\":3165,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/54e66a2278e746d8baf3a8e76f0e1863\",\"articleSection\":[\"2015\",\"3\\\/2015\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/\",\"name\":\"Outlook-Mails in Access archivieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/54e66a2278e746d8baf3a8e76f0e1863\",\"datePublished\":\"2020-05-22T19:26:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/54e66a2278e746d8baf3a8e76f0e1863\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/54e66a2278e746d8baf3a8e76f0e1863\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookMails_in_Access_archivieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Outlook-Mails in Access archivieren\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Outlook-Mails in Access archivieren - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/","og_locale":"de_DE","og_type":"article","og_title":"Outlook-Mails in Access archivieren","og_description":"\"Eine neue .pst-Datei ist wie ein neues Leben ...\" - so f&uuml;hlt es sich an, wenn man sich von einer Outlook-Installation voller Termine, Mails, Kontakte et cetera trennt und einfach einmal neu beginnt. Allerdings wird man einen Teil der Daten ohnehin &uuml;bernehmen (die Kontakte), und zumindest die Mails sollte man sicherheitshalber noch eine Weile aufbewahren. Nur wo Wenn Sie die Inhalte von Mails archivieren und f&uuml;r den gelegentlichen Zugriff bereithalten wollen, bietet sich nat&uuml;rlich der Einsatz einer Access-Datenbank an. Dieser Beitrag beleuchtet, wie Sie die Mails archivieren, ein weiterer besch&auml;ftigt sich mit der Suche nach und der Wiederherstellung von archivierten E-Mails.","og_url":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T19:26:22+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Outlook-Mails in Access archivieren","datePublished":"2020-05-22T19:26:22+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/"},"wordCount":3165,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863","articleSection":["2015","3\/2015","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/","url":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/","name":"Outlook-Mails in Access archivieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863","datePublished":"2020-05-22T19:26:22+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/54e66a2278e746d8baf3a8e76f0e1863"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/OutlookMails_in_Access_archivieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Outlook-Mails in Access archivieren"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000985"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000985\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000985"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}