{"id":55000700,"date":"2010-02-01T00:00:00","date_gmt":"2020-05-22T22:10:22","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=700"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Access_2007_Anlagefelder","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/","title":{"rendered":"Access 2007: Anlagefelder"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Bis Access 2003 waren die OLE-Felder die einzige M&ouml;glichkeit, Dateien in Access-Tabellen zu speichern (okay, theoretisch ginge dies auch mit Memofeldern &#8230;). Access 2007 liefert mit dem Anlagefeld eine neue M&ouml;glichkeit, dies zu erledigen. Neu ist dabei vor allem die Tatsache, dass sich Dateien leicht &uuml;ber die Benutzeroberfl&auml;che in solchen Feldern speichern und auch wiederherstellen lassen. Wir schauen uns im Detail an, was Anlagefelder k&ouml;nnen und wie Sie damit umgehen.<\/b><\/p>\n<p>Anlagefelder sehen in der Entwurfsansicht von Tabellen zun&auml;chst wie herk&ouml;mmliche Felder aus &#8211; mit dem Unterschied, dass Sie als Felddatentyp den Wert <b>Anlage <\/b>ausw&auml;hlen und dass diese im Register <b>Allgemein <\/b>des Eigenschaften-Bereichs der Entwurfsansicht nur zwei Eigenschaften enthalten (siehe Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Ein Anlagefeld in der Entwurfsansicht einer Tabelle<\/span><\/b><\/p>\n<p>In der Datenblattansicht zeigt sich &Uuml;berraschendes: Erstens zeigt Access statt des Feldnamens als Spalten&uuml;berschrift nur eine B&uuml;roklammer an, und auch der Feldinhalt selbst sieht au&szlig;ergew&ouml;hnlich aus: Eine weitere B&uuml;roklammer mit einer eingeklammerten Null (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Statt einer Spalten&uuml;berschrift zeigt Access bei Anlagefeldern nur eine B&uuml;roklammer an. Kehrt Karl Klammer zur&uuml;ck Nein, &#8230;<\/span><\/b><\/p>\n<p>Das Problem mit der Spalten&uuml;berschrift l&auml;sst sich schnell l&ouml;sen: Dazu brauchen Sie in der Entwurfsansicht einfach nur einen Text f&uuml;r die Eigenschaft <b>Beschriftung <\/b>des Anlagefelds einzutragen (siehe Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: &#8230; denn f&uuml;r die Eigenschaft Beschriftung k&ouml;nnen Sie auch f&uuml;r Anlagefelder eine Spalten&uuml;berschrift festlegen.<\/span><\/b><\/p>\n<p>Was aber stellen wir nun mit dem frisch erstellten Anlagefeld an Bevor wir uns brachial mit einem Doppelklick darauf st&uuml;rzen, versuchen wir es mit einem Rechtsklick auf den Feldinhalt. Und siehe da: Der Eintrag <b>Anlagen verwalten&#8230; <\/b>sieht verhei&szlig;ungsvoll aus (siehe Bild 4). Ein Klick darauf wirkt &uuml;brigens genau so wie der zuvor angesprochene Doppelklick, aber wir wollen doch keine m&ouml;glicherweise hilfreichen weiteren Funktionen verpassen &#8230;<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic006_opt.jpeg\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Mit diesem Dialog w&auml;hlen Sie eine oder mehrere Dateien zum Hinzuf&uuml;gen zum Anlagefeld aus.<\/span><\/b><\/p>\n<p><b>Anlagen hinzuf&uuml;gen<\/b><\/p>\n<p>Der nun erscheinende Dialog <b>Anlagen<\/b> enth&auml;lt ein zun&auml;chst leeres Listenfeld und nur eine aktivierte Schaltfl&auml;che, die eine Funktion zum Hinzuf&uuml;gen einer Anlage offeriert (siehe Bild 5). Wer diesen Beitrag im Internet oder im PDF-Format liest, dem f&auml;llt m&ouml;glicherweise auf, dass der <b>Anlagen<\/b>-Dialog im Gegensatz zu den Fenstern der anderen Screenshots blau statt schwarz ist. Dies ist darauf zur&uuml;ckzuf&uuml;hren, dass letzterer ein Windows-Dialog und als solches nicht dem aktuellen Access-Theme unterworfen ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic004_opt.jpeg\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Der Kontextmen&uuml;eintrag Anlagen verwalten&#8230; er&ouml;ffnet weitere M&ouml;glichkeiten.<\/span><\/b><\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230; <\/b>&ouml;ffnet den bekannten <b>Datei ausw&auml;hlen<\/b>-Dialog, mit dem Sie nicht nur eine, sondern auf Wunsch auch mehrere Dateien ausw&auml;hlen k&ouml;nnen (siehe Bild 6).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic005_opt.jpeg\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Ein Klick auf die Schaltfl&auml;che Hinzuf&uuml;gen&#8230; sollte Leben in das (noch) leere Listenfeld bringen.<\/span><\/b><\/p>\n<p>Mehrere Dateien Und &#8230; landen die dann alle im gleichen Feld oder legt Access automatisch neue Datens&auml;tze f&uuml;r die &uuml;brigen Dateien an Genau genommen geschieht beim Hinzuf&uuml;gen mehrerer Dateien eine Mischung aus beidem &#8211; dazu jedoch sp&auml;ter mehr. Schauen wir uns zun&auml;chst an, was beim Hinzuf&uuml;gen einer einzigen Datei, zum Beispiel einer Bilddatei, geschieht. Nach dem Schlie&szlig;en des <b>Datei ausw&auml;hlen<\/b>-Dialogs erscheint die ausgew&auml;hlte Datei in der Liste des <b>Anlagen<\/b>-Dialogs. Gleichzeitig aktiviert Access einige weitere Schaltfl&auml;chen, so etwa die <b>Entfernen<\/b>-, die <b>Speichern unter&#8230;<\/b>&#8211; und die <b>Alles speichern&#8230;<\/b>-Schaltfl&auml;chen (siehe Bild 7).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic007_opt.jpeg\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Die enthaltene Bilddatei l&auml;sst sich entfernen oder speichern.<\/span><\/b><\/p>\n<p>Die Funktion dieser Felder ist nicht erkl&auml;rungsbed&uuml;rftig. Erkl&auml;rungsbed&uuml;rftig ist aber, warum ausgerechnet die Schaltfl&auml;che <b>&Ouml;ffnen <\/b>deaktiviert ist. Zun&auml;chst k&ouml;nnte man vermuten, der Dateityp <b>.png <\/b>w&uuml;rde einfach nicht unterst&uuml;tzt. Weitere Versuche mit Office-Dokumenten oder anderen Dateiformaten schlugen fehl &#8211; die <b>&Ouml;ffnen<\/b>-Schaltfl&auml;che lie&szlig; sich nicht aktivieren. Nach dem Schlie&szlig;en und erneuten &Ouml;ffnen des Anlage-Dialogs zeigt sich die <b>&Ouml;ffnen<\/b>-Schaltfl&auml;che jedoch schon bereitwilliger &#8211; sie ist nun aktiviert, und auch der Doppelklick auf eine zuvor abgespeicherte Datei &ouml;ffnet diese in der entsprechenden Anwendung. Nach dem Hinzuf&uuml;gen einiger Dateien (in diesem Fall vier) und dem Schlie&szlig;en des <b>Anlagen<\/b>-Dialogs zeigt sich, dass die Zahl in Klammern hinter dem B&uuml;roklammer-Symbol die Anzahl der im Feld gespeicherten Dateien wiedergibt (siehe Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic008_opt.jpeg\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Das Anlagefeld kann offensichtlich mehr als eine Datei speichern.<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen also mehrere Dateien in einem einzigen Feld speichern &#8211; wie funktioniert das denn<\/p>\n<p><b>Verborgene Tabelle<\/b><\/p>\n<p>In der Tat speichert Access die Dateien nicht in einem einzigen Feld. Stattdessen verbirgt sich hinter Anlagefeldern eine intern gepflegte Tabelle mit den drei Feldern <b>FileData<\/b>, <b>FileName <\/b>und <b>FileType<\/b>.<\/p>\n<p>Woher wir das wissen Ganz einfach: Sie brauchen nur eine Abfrage auf Basis einer Tabelle mit einem Anlagefeld zu erstellen. Die Feldliste zeigt versetzt die Felder der Anlagen-Tabelle an (siehe Bild 9).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic009_opt.jpeg\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: In einer Abfrage erkennt man die wahre Gestalt eines Anlagefelds.<\/span><\/b><\/p>\n<p>Wenn Sie diese wie in der Abbildung in das Entwurfsraster ziehen und in die Datenblattansicht wechseln, enth&auml;lt jeder Datensatz neben dem Original-Anlagefeld mit vier Dateien je ein Anlagefeld mit einer Datei sowie Dateiname und Dateiendung der enthaltenen Datei (siehe Bild 10).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic010_opt.jpeg\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Mittels einer Abfrage lassen sich die Daten aus der hinter einem Anlagefeld verborgenen Tabelle anzeigen.<\/span><\/b><\/p>\n<p>Die Ausgabe sieht genau so aus, als wenn die Beispieltabelle <b>tblAnlagen<\/b> und die verborgene Tabelle mit den einzelnen Anlagen eine 1:n-Beziehung aufweisen.<\/p>\n<p><b>Exkurs f&uuml;r Profis: Der Nachweis der verborgenen Hilfstabellen<\/b><\/p>\n<p>Wie k&ouml;nnen wir herausfinden, ob Anlagefelder tats&auml;chlich mit verborgenen Tabellen verkn&uuml;pft sind, und so den Eindruck best&auml;tigen, den das Abfrageergebnis aus Bild 10 lieferte Ganz einfach: Wir brauchen einfach nur die Ausf&uuml;hrungspl&auml;ne zu untersuchen, welche die Jet-Engine beim Ausf&uuml;hren von Abfragen verwendet und die, eine entsprechende Einstellung in der Registry vorausgesetzt, in eine Datei geschrieben werden und eingesehen werden k&ouml;nnen.<\/p>\n<p>Ganz einfach gelingt dies mit einem Tool namens <b>Showplan-Capture<\/b> von Sascha Trowitzsch, das Sie unter dem folgenden Link herunterladen k&ouml;nnen: <b>http:\/\/www.mosstools.de\/index.phpoption=com_content&amp;view=article&amp;id=54&amp;Itemid=57<\/b><\/p>\n<p>Nach dem Entpacken und Starten brauchen Sie nur die Option <b>Aktiv f&uuml;r ACE (Access 2007\/2010) <\/b>auszuw&auml;hlen und dann daf&uuml;r zu sorgen, dass die zu untersuchende Abfrage neu optimiert wird. Dazu &auml;ndern Sie irgendein Detail dieser Abfrage, indem Sie beispielsweise das Feld <b>Anlagefeld <\/b>entfernen und erneut die Datenblattansicht dieser Abfrage anzeigen. Das Ergebnis sieht wie in Bild 11 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic011_opt.jpeg\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Der Ausf&uuml;hrungsplan der Abfrage qryAnlagen zeigt, dass die einzelnen Dateien des Anlagefelds in einer verkn&uuml;pften Tabelle gespeichert werden.<\/span><\/b><\/p>\n<p>Die verborgene verkn&uuml;pfte Tabelle hei&szlig;t in diesem Fall <b>Anlagefeld_DA3A63DDBA8A47E394389107CAFA307D <\/b>und ist &uuml;ber das Feld <b>_Anlagefeld <\/b>mit dem Feld <b>Anlagefeld <\/b>der Tabelle <b>tblAnlagen <\/b>verkn&uuml;pft.<\/p>\n<p><b>Nicht alle Dateiformate m&ouml;glich<\/b><\/p>\n<p>Ohne den Einsatz von VBA (dazu sp&auml;ter mehr) k&ouml;nnen Sie nur wenige Dateiformate in einem Anlagefeld speichern. Dazu geh&ouml;ren einige Bilddateiformate (<b>BMP<\/b>, <b>RLE<\/b>, <b>DIB<\/b>, <b>GIF<\/b>, <b>JPEG<\/b>, <b>JPG<\/b>, <b>JPE<\/b>, <b>EXIF<\/b>, <b>PNG<\/b>, <b>TIFF<\/b>, <b>TIF<\/b>, <b>ICON<\/b>, <b>ICO<\/b>, <b>WMF <\/b>und <b>EMF<\/b>), die mit einer Microsoft Office-Anwendung erzeugten Formate, <b>.txt <\/b>und <b>.log<\/b>-Dateien.<\/p>\n<p>Informationen zu den zugelassenen, speziell aber auch zu den verbotenen Dateiformaten finden Sie in der Onlinehilfe des VBA-Editors unter dem Stichwort <b>Attachment-Objekt<\/b>.<\/p>\n<p><b>Besonderheiten beim Umgang mit Bilddateien<\/b><\/p>\n<p>Bilddateien k&ouml;nnen Sie entweder im urspr&uuml;nglichen Format in einem Anlagefeld speichern oder in dem propriet&auml;ren Format, in dem diese auch beim Einf&uuml;gen in OLE-Feldern gespeichert werden. Letzteres hat den Nachteil, dass Bilder mit vormals wenig Speicherbedarf in ein propriet&auml;res Format konvertiert werden, das sehr viel mehr Speicherplatz frisst. Ob Access Bilddateien etwa im Format <b>.jpg<\/b>, <b>.gif <\/b>oder <b>.png <\/b>bei der Originalgr&ouml;&szlig;e bel&auml;sst, stellen Sie im <b>Optionen<\/b>-Dialog von Access ein. Diesen &ouml;ffnen Sie mit der Schaltfl&auml;che <b>Access-Optionen <\/b>im Office-Men&uuml;. Dort zeigen Sie den Bereich <b>Aktuelle Datenbank <\/b>an und stellen unter <b>Anwendungsoptionen <\/b>die Option <b>Bildeigenschaften-Speicherformat <\/b>auf den Wert <b>Quellbildformat beibehalten <\/b>ein (siehe Bild 12).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic014_opt.jpeg\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Eine .ico-Datei im Anlage-Steuerelement<\/span><\/b><\/p>\n<p><b>Das Anlage-Steuerelement<\/b><\/p>\n<p>Was w&auml;re ein Anlagefeld, wenn wir es nicht in Formularen einsetzen k&ouml;nnten Und so gibt es nat&uuml;rlich auch ein neues Steuerelement f&uuml;r diesen neuen Datentyp. Wenn Sie ein solches Steuerelement zu einem Formular hinzuf&uuml;gen m&ouml;chten, finden Sie es im Ribbon in Form eines B&uuml;roklammer-Symbols vor (siehe Bild 13).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic012_opt.jpeg\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Diese Option sorgt daf&uuml;r, dass Bilddateien beim Einf&uuml;gen in ein Anlagefeld nicht konvertiert werden und so unter Umst&auml;nden wesentlich mehr Speicherplatz ben&ouml;tigen.<\/span><\/b><\/p>\n<p>Es l&auml;sst sich zwar als ungebundenes Steuerelement hinzuf&uuml;gen, aber anfangen l&auml;sst sich erst etwas damit, wenn Sie seinen Steuerelementinhalt an ein Anlagefeld einer Tabelle oder einer Abfrage binden. Dann zeigt es beispielsweise eine Icon-Datei wie in Bild 14 an.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic013_opt.jpeg\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Das B&uuml;roklammersymbol repr&auml;sentiert das neue Anlage-Steuerelement.<\/span><\/b><\/p>\n<p>Wenn Sie einfach auf das Anlage-Steuerelement klicken, erscheint dar&uuml;ber eine kleine Kontext-Symbolleiste, die das Bl&auml;ttern in den gespeicherten Dateien sowie das &Ouml;ffnen des <b>Anlagen<\/b>-Dialogs erlaubt &#8211; Letzteren kennen Sie ja bereits.<\/p>\n<p>W&auml;hrend das Anlage-Steuerelement Bilder direkt anzeigt, liefert es etwa f&uuml;r Office-Dokumente nur das jeweilige Datei-Symbol als Platzhalter &#8211; eine Vorschau auf den Inhalt der Datei erscheint nicht. Das Anlage-Steuerelement liefert eine Reihe spezieller Eigenschaften:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Standardbild <\/b>(unter VBA: <b>DefaultPicture<\/b>): Gibt eine Bilddatei an, die das Anlage-Steuerelement standardm&auml;&szlig;ig anzeigt &#8211; also beispielsweise, wenn es leer ist.<\/li>\n<li class=\"aufz-hlung\"><b>Hintergrundart <\/b>(<b>BackStyle<\/b>): Kann die Werte <b>Normal <\/b>(<b>1<\/b>) oder <b>Transparent <\/b>(<b>0<\/b>) annehmen. Diese Eigenschaft ist interessant, wenn das Anlage-Steuerelement Bilder mit Transparenz anzeigt. Der Hintergrund scheint in diesem Fall durch die transparenten Bereiche der Bilder hindurch.<\/li>\n<li class=\"aufz-hlung\">Es gibt noch ein Ereignis, das beim Bl&auml;ttern in den im Anlagefeld gespeicherten Dateien ausgel&ouml;st wird sowie einige weitere Eigenschaften, die aber nur per VBA eingestellt oder ausgelesen werden k&ouml;nnen. Auf diese gehen wir sp&auml;ter in diesem Beitrag ein.<\/li>\n<\/ul>\n<p><b>Alternative M&ouml;glichkeit zur Anzeige von Anlagen in Formularen<\/b><\/p>\n<p>Das Beispielformular aus Bild 14 enth&auml;lt als Steuerelementinhalt den Namen des Anlagefelds der an das Formular gebundenen Tabelle <b>tblAnlagen<\/b>. Damit liefert es genau die gleichen Funktionen, die auch das Tabellenfeld selbst offerierte.<\/p>\n<p>Sie k&ouml;nnen in diesem Formular erstens durch die verschiedenen in der Tabelle <b>tblAnlagen <\/b>gespeicherten Datens&auml;tze bl&auml;ttern und au&szlig;erdem die verschiedenen im Feld <b>Anlagefeld <\/b>der Tabelle gespeicherten Dateien betrachten.<\/p>\n<p>Es gibt noch eine andere M&ouml;glichkeit, die in einem Anlagefeld enthaltenen Dateien in einem Anlagefeld anzuzeigen. Wenn Sie nicht das Anlagefeld selbst aus der Feldliste in den Formularentwurf ziehen, sondern die in der verkn&uuml;pften Tabelle gespeicherten Felder <b>FileData <\/b>und, nach Wunsch, die Felder <b>FileName <\/b>und <b>FileType<\/b> (siehe Bild 15), durchlaufen Sie die im Feld <b>Anlagefeld <\/b>aller Datens&auml;tze der Tabelle <b>tblAnlagen <\/b>gespeicherten Dateien.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic015_opt.jpeg\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Dieses Formular zeigt die in allen Datens&auml;tzen gespeicherten Dateien wie einen eigenen Datensatz an.<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Wenn Sie also beispielsweise im Anlagefeld des ersten Datensatzes drei Bilddateien gespeichert haben und im Anlagefeld des zweiten Datensatzes zwei, zeigt der Navigationsbereich des Formulars insgesamt f&uuml;nf Datens&auml;tze an (siehe Bild 16).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic016_opt.jpeg\" alt=\"pic016.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16: Datensatzweise Anzeige von Anlagen<\/span><\/b><\/p>\n<p>Diese Darstellung erlaubt nicht den komfortablen Zugriff auf die im Anlagefeld gespeicherten Daten wie sie durch die Popup-Symbolleiste oder das Kontextmen&uuml; des herk&ouml;mmlich verwendeten Anlagefelds bereitgestellt werden.<\/p>\n<p><b>Anlage-Steuerelement in Berichten<\/b><\/p>\n<p>Sinnvoll wird das Einarbeiten des Feldes <b>FileData <\/b>der Untertabelle eines Anlagefelds erst in einem Bericht. Bild 17 zeigt einen Bericht, dessen Anlage-Steuerelement an das Feld <b>Anlagefeld <\/b>der Tabelle <b>tblAnlagen <\/b>gebunden ist. Egal, wie viele Bilddateien das Anlagefeld eines jeden Datensatzes enth&auml;lt: Der Bericht zeigt nur das jeweils erste Bild an. Wenn Sie die Eigenschaft <b>Steuerelementinhalt <\/b>des Anlage-Steuerelements auf das Feld <b>Anlagefeld.FileData<\/b>, also das Feld der Untertabelle des Anlagefelds einstellen, zeigt der Bericht alle enthaltenen Bilddateien an (siehe Bild 18).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic017_opt.jpeg\" alt=\"pic017.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 18: Erst, wenn man das Anlage-Steuerelement an das Feld FileData in der Untertabelle des Anlagefelds bindet, zeigt der Bericht alle enthaltenen Bilddateien an.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_01\/Anlagefelder-web-images\/pic018_opt.jpeg\" alt=\"pic018.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 17: Das Anlage-Steuerelement zeigt in der Berichtsvorschau nur jeweils die erste Datei des Anlagefelds eines jeden Datensatzes an.<\/span><\/b><\/p>\n<p><b>Warum &uuml;berhaupt mehrere Dateien pro Anlagefeld<\/b><\/p>\n<p>Wer gern die Kontrolle &uuml;ber die Logik seiner Anwendung und die enthaltenen Daten beh&auml;lt, verzichtet auf die eingebaute M&ouml;glichkeit, mehrere Dateien in einem einzigen Anlagefeld speichern zu k&ouml;nnen. In vielen F&auml;llen reicht es ohnehin aus, wenn man eine einzige Datei pro Datensatz speichert (etwa beim Passfoto eines Mitarbeiters). Und sollen einmal mehrere Bilder oder andere Dateien je Datensatz gespeichert werden, k&ouml;nnen Sie immer noch eine eigene Tabelle zum Speichern der Dateien erstellen, die per 1:n-Beziehung mit der entsprechenden Haupttabelle verkn&uuml;pft ist.<\/p>\n<p><b>Anlagefelder im Datenzugriff<\/b><\/p>\n<p>Wenn Microsoft schon eine Alternative zu den OLE-Feldern liefert, sollte man auch mit mindestens einer der g&auml;ngigen Datenzugriffstechnologien per VBA-Code darauf zugreifen k&ouml;nnen. In der Tat hat Microsoft ADO hier links liegen lassen (generell empfiehlt man dort, unter Access 2007 auch nicht mehr mit der Kombination ADO\/Access-Projekt auf SQL Server-Datenbanken zuzugreifen, sondern per DAO\/ODBC &#8211; dies nur als Hintergrundinformation). DAO hingegen wurde dahingehend weiterentwickelt, dass man damit auch Anlagefelder und die darin enthaltenen Daten im Griff hat.<\/p>\n<p><b>Aus Feld mach Recordset<\/b><\/p>\n<p>Nachdem Sie bereits erfahren haben, dass die in einem Anlagefeld gespeicherten Dateien offensichtlich in einer Tabelle gespeichert werden, die per 1:n-Beziehung mit der Haupttabelle verkn&uuml;pft ist, fragen Sie sich sicher, wie Sie per DAO auf die in der verborgenen Tabelle enthaltenen Daten zugreifen k&ouml;nnen. Dies ist ganz einfach: Sie brauchen einfach nur eine Referenz auf die <b>Value<\/b>-Eigenschaft des entsprechenden <b>Fields<\/b>-Objekts an ein Recordset zu &uuml;bergeben und greifen dann mit den &uuml;blichen Methoden auf die Felder der verborgenen Tabelle zu. Doch zun&auml;chst einmal deklarieren Sie die notwendigen DAO-Objekte:<\/p>\n<pre>Dim db As DAO.Database\r\nDim rst As DAO.Recordset2\r\nDim fld As DAO.Field2\r\nDim rstAnlagen As DAO.Recordset2\r\nDim fldAnlagen As DAO.Field2<\/pre>\n<p>Vermutlich f&auml;llt Ihnen gleich auf, dass wir hier die Datentypen <b>Recordset2<\/b> und <b>Field2 <\/b>statt <b>Recordset <\/b>und <b>Field <\/b>verwenden. Dies sind zwei der wenigen Neuerungen der DAO-Bibliothek. Diese zwei Datentypen dienen erstens dem Zugriff auf Anlagefelder und zweitens dem Zugriff auf die sogenannten mehrwertigen Felder (dabei handelt es sich um Felder, die mehr als einen Wert enthalten k&ouml;nnen). Sie k&ouml;nnen allerdings auch weiterhin mit den alten Bezeichnungen arbeiten, diese funktionieren auch. Wenn Sie jeweils die <b>2 <\/b>anh&auml;ngen, k&ouml;nnen Sie beim Herunterkonvertieren von Access 2007-Datenbanken in &auml;ltere Access-Formate schneller erkennen, wo der Fehler liegt, wenn der Zugriff etwa auf Anlagefelder misslingt. Sie sollten jedoch nur die neuen Objekte verwenden, wenn dies erforderlich ist &#8211; also beispielsweise bei der Arbeit mit Anlagefeldern.<\/p>\n<p>Zur&uuml;ck zum Code: <b>db <\/b>und <b>rst <\/b>ben&ouml;tigen Sie f&uuml;r den Zugriff auf die aktuelle Datenbank beziehungsweise zum Erzeugen eines Recordsets auf Basis der Beispieltabelle <b>tblAnlagen<\/b>. Mit <b>fld <\/b>referenzieren Sie das Anlagefeld <b>Anlagefeld <\/b>der Tabelle. <b>rstAnlagen <\/b>schlie&szlig;lich dient dem Zugriff auf die hinter dem Anlagefeld verborgene Tabelle und <b>fldAnlagen <\/b>zum Durchlaufen der darin enthaltenen Felder. F&uuml;llen wir zun&auml;chst die Objektvariablen <b>db<\/b>, <b>rst <\/b>und <b>fld<\/b>:<\/p>\n<pre>Set db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT * FROM\r\ntblAnlagen&quot;, dbOpenDynaset)\r\nSet fld = rst!Anlagefeld<\/pre>\n<p>Nun holen wir &uuml;ber die <b>Value<\/b>-Eigenschaft des Anlagefeldes <b>fld <\/b>einen Verweis auf die enthaltene Tabelle und schreiben diesen in <b>rstAnlagen<\/b>: <\/p>\n<pre>Set rstAnlagen = fld.Value<\/pre>\n<p>Schlie&szlig;lich durchlaufen wir die Elemente der <b>Fields<\/b>-Auflistung der referenzierten Tabelle. Den jeweiligen Verweis speichern wir in der Variablen <b>fldAnlagen <\/b>zwischen und geben den Feldnamen und zus&auml;tzlich noch den Felddatentyp im Direktfenster des VBA-Editors aus (den vollst&auml;ndigen Code dieser Prozedur finden Sie in der Beispieldatenbank im Modul <b>mdlAnlagen <\/b>unter dem Namen <b>Anlagen_Feldzugriff<\/b>):<\/p>\n<pre>For Each fldAnlagen In rstAnlagen.Fields\r\n    Debug.Print fldAnlagen.Name, fldAnlagen.Type\r\nNext fldAnlagen<\/pre>\n<p>Das Ergebnis sieht wie folgt aus (die Konstanten f&uuml;r die Zahlenwerte der Eigenschaft <b>Type<\/b> haben wir als Kommentar erg&auml;nzt &#8211; die komplette Auflistung der Datentypen finden Sie im Objektkatalog (<b>F2<\/b>) unter dem Stichwort <b>DataTypeEnum<\/b>):<\/p>\n<pre>FileData 11 ''dbLongBinary\r\nFileFlags 4 ''dbLong\r\nFileName 10 ''dbText\r\nFileTimeStamp 8 ''dbDate\r\nFileType 10 ''dbText\r\nFileURL 12 ''dbMemo<\/pre>\n<p>Die Tabelle, die sich hinter dem Anlagefeld verbirgt, enth&auml;lt also sogar noch mehr Felder, als etwa der Abfrageentwurf und die Feldliste von Formularen und Berichten anzeigt. Die &auml;nderung des Befehls zur Ausgabe der Feldnamen um die Feldwerte zeigt aber, dass die drei noch nicht bekannten Felder allesamt den Wert <b>Null<\/b> enthalten:<\/p>\n<pre>Debug.Print fldAnlagen.Name, fldAnlagen.Value<\/pre>\n<p>Wof&uuml;r also die nicht verwendeten Felder Diese werden in Zusammenhang mit SharePoint ben&ouml;tigt. Weitere Informationen w&uuml;rden den Rahmen dieses Beitrags allerdings sprengen &#8230;<\/p>\n<p>Beim Betrachten der Ausgabe f&auml;llt zun&auml;chst auf, dass das Feld <b>FileData <\/b>eine Menge kryptischer Zeichen enth&auml;lt, die offensichtlich die gespeicherte Datei repr&auml;sentieren. Es handelt sich dabei um ein Byte-Array, das neben der Datei auch noch einen Header enth&auml;lt.<\/p>\n<p><b>Durchlaufen der Dateien in einem Anlagefeld<\/b><\/p>\n<p>Wenn Sie Informationen zu allen in einem Anlagefeld einer Tabelle gespeicherten Dateien ausgeben m&ouml;chten, &auml;ndern Sie den inneren Teil der zuvor erw&auml;hnten Prozedur wie folgt (siehe Beispielprozedur <b>AnlagenDurchlaufen<\/b>):<\/p>\n<pre>Do While Not rst.EOF\r\n    Set rstAnlagen = fld.Value\r\n    Do While Not rstAnlagen.EOF\r\n        With rstAnlagen\r\n        Debug.Print !FileName, !FileType\r\n        End With\r\n        rstAnlagen.MoveNext\r\n    Loop\r\n    rst.MoveNext\r\nLoop<\/pre>\n<p><b>Anlagen mit einem Recordset durchlaufen<\/b><\/p>\n<p>Es gibt noch eine Alternative zum Ermitteln aller in einem Anlagefeld gespeicherten Dateien. Diese kommt im Gegensatz zur vorherigen Version mit nur einem Recordset aus und verwendet nicht den Umweg &uuml;ber die <b>Value<\/b>-Eigenschaft des <b>Field<\/b>-Objekts des Anlagefelds.<\/p>\n<p>Hier ben&ouml;tigen wir nur einen Verweis auf die aktuelle Datenbank sowie auf das zu durchlaufende Recordset, die wir wie folgt deklarieren:<\/p>\n<pre>Dim db As DAO.Database\r\nDim rstAnlagen As DAO.Recordset2<\/pre>\n<p>Danach f&uuml;llen wir <b>db<\/b> mit dem Verweis auf die aktuelle Datenbank: <\/p>\n<pre>Set db = CurrentDb<\/pre>\n<p>Der wichtigste Schritt ist der folgende. Wenn die Felder der in einem Anlagefeld gespeicherten Tabelle im Abfrageentwurf und auch in der Feldliste von Formularen und Berichten auftauchen, warum sollen wir dann nicht auch per SQL-Statement darauf zugreifen k&ouml;nnen Also probieren wir die folgende Abfrage als Quelle f&uuml;r das <b>Recordset<\/b>-Objekt <b>rstAnlagen <\/b>aus:<\/p>\n<pre>Set rstAnlagen = db.OpenRecordset(&quot;SELECT\r\nAnlagebeispielID, Anlagefeld.FileName,\r\nAnlagefeld.FileType FROM tblAnlagen&quot;,\r\ndbOpenDynaset)<\/pre>\n<p>Dieses k&ouml;nnen wir fast wie ein herk&ouml;mmliches <b>Recordset <\/b>durchlaufen. Der einzige Unterschied ist, dass wir nicht mit der Ausrufezeichen-Syntax (<b>rst!Feldname<\/b>) auf die in der Untertabelle enthaltenen Felder zugreifen k&ouml;nnen, sondern die <b>Fields<\/b>-Eigenschaft mit einem Ausdruck best&uuml;cken, der aus dem Namen des Anlagefeldes, dem Punkt und dem Namen des Feldes der untergeordneten Tabelle besteht:<\/p>\n<pre>Do While Not rstAnlagen.EOF\r\n    With rstAnlagen\r\n    Debug.Print\r\n    .Fields(&quot;Anlagefeld.FileName&quot;),\r\n    .Fields(&quot;Anlagefeld.FileType&quot;)\r\n    End With\r\n    rstAnlagen.MoveNext\r\nLoop<\/pre>\n<p><b>Dateien aus einem Anlagefeld per VBA im Dateisystem speichern<\/b><\/p>\n<p>Gegebenenfalls m&ouml;chten Sie einmal eine oder mehrere Dateien aus Anlagefeldern im Dateisystem speichern, damit Sie mit anderen Anwendungen darauf zugreifen k&ouml;nnen.<\/p>\n<p>Die folgenden Code-Schnipsel stammen aus der Prozedur <b>AnlageSpeichern <\/b>des Moduls <b>mdlAnlagen <\/b>der Beispieldatenbank.<\/p>\n<p>Neben den bereits bekannten Variablen brauchen wir hier eine zus&auml;tzliche <b>Field2<\/b>-Variable namens <b>fldAnlage <\/b>(beachten Sie die Singular-Form im Vergleich zu <b>fldAnlagen<\/b>: <b>fldAnlagen <\/b>wird sp&auml;ter mit einem Verweis auf das Anlagefeld gef&uuml;llt, <b>fldAnlage <\/b>verweist auf das Feld mit der eigentlichen Anlage in der im Anlagefeld enthaltenen Tabelle).<\/p>\n<p>Au&szlig;erdem verwenden wir eine Variable namens <b>strDateiname<\/b>, um den Dateinamen zusammenzusetzen:<\/p>\n<pre>Dim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nDim fldAnlagen As DAO.Field2\r\nDim rstAnlagen As DAO.Recordset2\r\nDim strDateiname As String\r\nDim fldAnlage As DAO.Field2<\/pre>\n<p><b>db <\/b>und <b>rst <\/b>werden wie gewohnt bef&uuml;llt: <\/p>\n<pre>Set db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT * FROM\r\ntblAnlagen&quot;, dbOpenDynaset)<\/pre>\n<p>Dann folgen die beiden ineinander verschachtelten Schleifen zum Durchlaufen der Datens&auml;tze der Tabelle <b>tblAnlagen <\/b>und der in ihrem Feld <b>Anlagefeld <\/b>enthaltenen verborgenen Tabelle. In der inneren Schleife setzt die Prozedur aus dem aktuellen Datenbankverzeichnis und der im Feld <b>FileName <\/b>gespeicherten Zeichenkette den Dateinamen zusammen und speichert diesen Ausdruck in der Variablen <b>strDateiname<\/b>. Dann l&ouml;scht sie eine eventuell vorhandene Datei gleichen Namens (damit dies keinen Fehler ausl&ouml;st, wenn keine solche Datei vorhanden ist, wird die Fehlerbehandlung deaktiviert). Schlie&szlig;lich schreibt die <b>SaveToFile<\/b>-Methode (eine der Methoden, durch die sich <b>Field2 <\/b>von <b>Field <\/b>unterscheidet) die Datei auf die Festplatte:<\/p>\n<pre>Do While Not rst.EOF\r\n    Set fldAnlagen = rst!Anlagefeld\r\n    Set rstAnlagen = fldAnlagen.Value\r\n    Do While Not rstAnlagen.EOF\r\n        strDateiname = CurrentProject.Path\r\n        &amp; &quot;\\&quot; &amp; rstAnlagen!FileName\r\n        Set fldAnlage = rstAnlagen!FileData\r\n        On Error Resume Next\r\n        Kill strDateiname\r\n        On Error GoTo 0\r\n        fldAnlage.SaveToFile strDateiname\r\n        rstAnlagen.MoveNext\r\n    Loop\r\n    rst.MoveNext\r\nLoop<\/pre>\n<p>Diese Prozedur k&ouml;nnen Sie als Grundlage f&uuml;r eigene Routinen zum Speichern von Anlagen im Dateisystem verwenden. Sie k&ouml;nnen diese beispielsweise dahingehend anpassen, dass der Benutzer den Speicherpfad ausw&auml;hlt oder nur die Anlagen des Anlagefelds des aktuellen Datensatzes gespeichert werden.<\/p>\n<p><b>Dateien aus dem Dateisystem per VBA im Anlagefeld speichern<\/b><\/p>\n<p>Nat&uuml;rlich funktioniert auch der umgekehrte Weg. Hier muss man sich allerdings Gedanken machen, ob die Dateien in einen neuen oder vorhandenen Datensatz geschrieben werden sollen, ob Dateien gleichen Namens vorhandene &uuml;berschreiben oder ob diese als neue Anlagen im gleichen oder einem neuen Datensatz angeh&auml;ngt werden sollen.<\/p>\n<p>Wir zeigen zun&auml;chst an einem einfachen Beispiel, wie das Anh&auml;ngen einer Datei an ein Anlagefeld grunds&auml;tzlich funktioniert. Dabei erzeugen wir einen neuen, leeren Datensatz in der Tabelle <b>tblAnlagen <\/b>und f&uuml;gen dem Anlagefeld eine erste Datei hinzu. Die nachfolgend auszugsweise beschriebene Prozedur finden Sie im Modul <b>mdlAnlagen <\/b>unter dem Namen <b>DateiInAnlage<\/b>.<\/p>\n<p>Wir ben&ouml;tigen genau die gleichen Variablen wie beim Speichern einer Datei aus einem Anlagefeld auf der Festplatte. Der erste Unterschied findet sich beim &Ouml;ffnen der Datensatzgruppe. Hier wird als <b>WHERE<\/b>-Bedingung der Ausdruck <b>1=2 <\/b>verwendet, was nichts anderes bewirkt, als dass wir ein leeres Recordset auf Basis der Tabelle <b>tblAnlagen <\/b>erhalten &#8211; schlie&szlig;lich wollen wir nur Daten hinzuf&uuml;gen, aber keine vorhandenen Daten bearbeiten:<\/p>\n<pre>Set rst = db.OpenRecordset(&quot;SELECT *\r\nFROM tblAnlagen WHERE 1=2&quot;, dbOpenDynaset)<\/pre>\n<p>Dieser Datensatzgruppe f&uuml;gen wir einen neuen Datensatz hinzu:<\/p>\n<pre>rst.AddNew<\/pre>\n<p>Wie &uuml;blich referenzieren wir das Anlagefeld mit einer entsprechenden Objektvariablen und erzeugen ein Recordset auf Basis der hinter diesem Feld verborgenen Tabelle:<\/p>\n<pre>Set fldAnlagen = rst!Anlagefeld\r\nSet rstAnlagen = fldAnlagen.Value<\/pre>\n<p>Diesem f&uuml;gen wir nun ebenfalls einen neuen Datensatz hinzu:<\/p>\n<pre>rstAnlagen.AddNew<\/pre>\n<p>Die Objektvariable <b>fldAnlage <\/b>f&uuml;llen wir mit einem Verweis auf das Feld <b>FileData <\/b>des Anlagen-Recordsets:<\/p>\n<pre>Set fldAnlage = rstAnlagen!FileData<\/pre>\n<p>Nach dem Zusammensetzen des Dateinamens folgt der Hauptakt &#8211; das Einlesen der Datei mit der Methode <b>LoadFromFile<\/b>:<\/p>\n<pre>strDateiname = CurrentProject.Path &amp; &quot;\\add2.ico&quot;\r\nfldAnlage.LoadFromFile strDateiname<\/pre>\n<p>Anschlie&szlig;end aktualisieren wir die Datensatzgruppe des Anlagefeldes, schlie&szlig;en diese und geben die Ressource frei:<\/p>\n<pre>rstAnlagen.Update\r\nrstAnlagen.Close\r\nSet rstAnlagen = Nothing<\/pre>\n<p>Dies erledigen wir auch noch f&uuml;r das Recordset der zugrunde liegenden Tabelle und das <b>Database<\/b>-Objekt:<\/p>\n<pre>rst.Update\r\nrst.Close\r\nSet rst = Nothing\r\nSet db = Nothing<\/pre>\n<p>Anschlie&szlig;end k&ouml;nnen Sie die neue Datei im Anlagefeld des neuen Datensatzes der Tabelle <b>tblAnlagen <\/b>begutachten.<\/p>\n<p>Wenn Sie Dateien zum Anlagefeld eines bestehenden Datensatzes hinzuf&uuml;gen m&ouml;chten, stellen Sie den Datensatzzeiger auf den entsprechenden Datensatz ein und versetzen diesen mit der <b>Edit<\/b>-Methode in den Bearbeitungsmodus. Wenn Sie im Anlagefeld eine bestehende Datei &uuml;berschreiben m&ouml;chten, setzen Sie auch hier den Datensatzzeiger auf den gew&uuml;nschten Datensatz und verwenden die <b>LoadFromFile<\/b>-Methode nach dem Aufrufen der <b>Edit<\/b>-Methode. Vergessen Sie auf beiden Ebenen nicht, die &auml;nderungen mit der Update-Methode zu speichern.<\/p>\n<p><b>Flexibles Importieren und Exportieren von Dateien aus dem Anlagefeld per VBA<\/b><\/p>\n<p>Sie haben bereits erkannt, dass es einige Varianten beim Im- und Export von Dateien aus Anlagefeldern gibt. Vor allem beim Hinzuf&uuml;gen von Dateien aus dem Dateisystem in ein Anlagefeld gibt es viele Varianten. Um Ihnen die Arbeit mit dem Anlagefeld zu erleichtern, haben wir Ihnen zwei flexibel einsetzbare Funktionen mitgegeben, mit denen Sie dank einstellbarer Parameter alle wichtigen Aufgaben in Zusammenhang mit dem Im- und Export erledigen k&ouml;nnen.<\/p>\n<p><b>Universeller Import von Dateien per VBA<\/b><\/p>\n<p>Die Funktion k&ouml;nnen Sie universell f&uuml;r das Importieren beliebiger Dateien in Anlagefelder verwenden. Sie erwartet die folgenden Parameter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>strDatei<\/b>: Verzeichnis und Name der zu importierenden Datei<\/li>\n<li class=\"aufz-hlung\"><b>strTabelle<\/b>: Name der Tabelle, in der sich das Anlagefeld befindet<\/li>\n<li class=\"aufz-hlung\"><b>strAnlagefeld<\/b>: Name des Anlagefeldes<\/li>\n<li class=\"aufz-hlung\"><b>bolBearbeiten<\/b>: Gibt an, ob die Anlage in einem bestehenden Datensatz gespeichert werden soll<\/li>\n<li class=\"aufz-hlung\"><b>strPrimaerschluesselfeld<\/b>: Name des Prim&auml;rschl&uuml;sselfeldes der Tabelle<\/li>\n<li class=\"aufz-hlung\"><b>varPrimaerschluesselwert<\/b>: Wert des Prim&auml;rschl&uuml;sselfeldes f&uuml;r den Datensatz, zu dem eine Anlage hinzugef&uuml;gt werden soll<\/li>\n<li class=\"aufz-hlung\"><b>strAnlage<\/b>: Name des Attachments, das gegebenenfalls &uuml;berschrieben werden soll<\/li>\n<\/ul>\n<p>Wenn Sie eine Datei in einem neuen Datensatz speichern m&ouml;chten, verwenden Sie etwa diesen Aufruf:<\/p>\n<pre>AnlageAusDatei(CurrentProject.Path &amp; &quot;\\add2.ico&quot;, &quot;tblAnlagen&quot;, &quot;Anlagefeld&quot;)<\/pre>\n<p>Zum Anf&uuml;gen einer Datei in einem vorhandenen Datensatz setzen Sie die folgende Anweisung ab &#8211; wobei <b>2 <\/b>der Prim&auml;rschl&uuml;sselwert des Zieldatensatzes ist:<\/p>\n<pre>AnlageAusDatei CurrentProject.Path &amp; &quot;\\address_book_delete.ico&quot;, &quot;tblAnlagen&quot;, &quot;Anlagefeld&quot;, True, &quot;AnlagebeispielID&quot;, 1<\/pre>\n<p>Schlie&szlig;lich k&ouml;nnen Sie auch ein Attachment mit einem bestimmten Dateinamen in der Tabelle &uuml;berschreiben. Auch dies erfordert die Angabe des Datensatzes und zus&auml;tzlich den Namen des bereits vorhandenen Attachments:<\/p>\n<pre>AnlageAusDatei CurrentProject.Path &amp; &quot;\\address_book_delete.ico&quot;, &quot;tblAnlagen&quot;, &quot;Anlagefeld&quot;, True,&quot;AnlagebeispielID&quot;,1,&quot;address_book_delete.ico&quot;<\/pre>\n<p>Die Routine hat &uuml;brigens noch ein weiteres Feature, das eine v&ouml;llig unverst&auml;ndliche Eigenschaft von Anlagefeldern ausschaltet: Und zwar d&uuml;rfen nur Dateien mit bestimmten Dateiendungen importiert werden. Und das ist w&ouml;rtlich zu nehmen:<\/p>\n<p>Der Inhalt der Datei spielt keine Rolle, Sie brauchen die Datei nur vor dem Speichern im Anlagefeld umzubenennen und dies anschlie&szlig;end wieder r&uuml;ckg&auml;ngig zu machen. Und genau das macht diese Funktion auch, indem sie den beim Speichern einer Datei mit einer nicht erlaubten Dateiendung auftretenden Fehler entsprechend behandelt. Den Quellcode der Funktion finden Sie, mit einigen Kommentaren versehen, in Listing 1. <\/p>\n<p class=\"kastentabelleheader\">Listing 1: Flexibles Speichern von Dateien im Anlagefeld<\/p>\n<pre>Function AnlageAusDatei(strDatei As String, strTabelle As String, strAnlagefeld As String, _\r\n    Optional bolBearbeiten As Boolean, Optional strPrimaerschluesselfeld As String, _\r\n    Optional varPrimaerschluesselwert As Variant, Optional strAnlagename As String) As Boolean\r\n    Dim fldAnlage As DAO.Field2\r\n    Dim rst As DAO.Recordset2\r\n    Dim rstAnlagen As DAO.Recordset2\r\n    On Error GoTo ErrHandler\r\n    Set rst = CurrentDb.OpenRecordset(&quot;SELECT * FROM [&quot; &amp; strTabelle &amp; &quot;]&quot;, dbOpenDynaset)\r\n    If bolBearbeiten Then\r\n        If IsNull(varPrimaerschluesselwert) Then Err.Raise vbObjectError + 1, , &quot;Keine Datensatz-ID angegeben!&quot;\r\n        rst.FindFirst &quot;CStr([&quot; &amp; strPrimaerschluesselfeld &amp; &quot;])=''&quot; &amp; CStr(varPrimaerschluesselwert) &amp; &quot;''&quot;\r\n        If rst.NoMatch Then Err.Raise vbObjectError + 2, , _\r\n        &quot;Datensatz mit ID &quot; &amp; varPrimaerschluesselwert &amp; &quot; nicht gefunden!&quot;\r\n        rst.Edit\r\n    Else\r\n        rst.AddNew\r\n    End If\r\n    Set rstAnlagen = rst(strAnlagefeld).Value\r\n    If bolBearbeiten Then\r\n        If rstAnlagen.EOF Then ''Fall 1: Es gibt noch keine Anlagen; &gt; neue Anlage\r\n        rstAnlagen.AddNew\r\n    Else ''Fall2: Es gibt keine Anlage mit dem Namen in sAttachment: &gt; ''neue Anlage\r\n        If Len(strAnlagename) = 0 Then\r\n            strAnlagename = Mid(strDatei, InStrRev(strDatei, &quot;\\&quot;) + 1)\r\n        End If\r\n        rstAnlagen.FindFirst &quot;[FileName]=''&quot; &amp; strAnlagename &amp; &quot;''&quot;\r\n        If rstAnlagen.NoMatch Then\r\n            rstAnlagen.AddNew\r\n        Else ''Fall3: Anlage gefunden; dann editieren\r\n            rstAnlagen.Edit\r\n        End If\r\n    End If\r\nElse\r\n rstAnlagen.AddNew\r\nEnd If\r\nSet fldAnlage = rstAnlagen.Fields!FileData\r\nOn Error Resume Next\r\nfldAnlage.LoadFromFile strDatei\r\nIf Err.Number = -2146697202 Then ''Unerlaubte Dateiendung! Spezialbehandlung...\r\nOn Error GoTo ErrHandler\r\nName strDatei As strDatei &amp; &quot;.dat&quot; ''Unerlaubte Endung in &quot;.dat&quot; &auml;ndern\r\nfldAnlage.LoadFromFile strDatei &amp; &quot;.dat&quot; ''Datei laden\r\nName strDatei &amp; &quot;.dat&quot; As strDatei ''Umbenennung r&uuml;ckg&auml;ngig machen\r\nrstAnlagen.Fields!FileName = Mid(strDatei, InStrRev(strDatei, &quot;\\&quot;) + 1) ''Anlagename setzen\r\nrstAnlagen.Update\r\nElse\r\nOn Error GoTo ErrHandler\r\nrstAnlagen.Update\r\nEnd If\r\nrst.Update\r\nAnlageAusDatei = True ''R&uuml;ckgabe True = Alles ok.\r\n''... Restarbeiten, Fehlerbehandlung - aus Platzgr&uuml;nden nicht abgedruckt\r\nEnd Function<\/pre>\n<p><b>Universeller Export von Dateien<\/b><\/p>\n<p>F&uuml;r den umgekehrten Weg gibt es ebenfalls eine passende und universell einsetzbare Funktion namens <b>DateiAusAnlage<\/b> (s. Listing 2). Der Grund, warum die Datei wesentlich kompakter ist als die zum Importieren von Dateien, ist folgender: Die Routine greift direkt mit einer geeigneten SQL-Abfrage auf die in der Untertabelle des Anlagefeldes enthaltenen Felder zu.<\/p>\n<p>Die Parameter sind weitgehend mit denen der vorherigen Funktion identisch. Auch der Export mit der Methode <b>SaveToFile <\/b>pr&uuml;ft die Dateiendung, weshalb auch hier ein Workaround eingebaut ist. Die Funktion erwartet die folgenden Parameter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>strTabelle<\/b>: Name der Tabelle, in der sich das Anlagefeld befindet <\/li>\n<li class=\"aufz-hlung\"><b>strAnlagefeld<\/b>: Name des Anlagefeldes<\/li>\n<li class=\"aufz-hlung\"><b>strPrimaerschluesselfeld<\/b>: Name des Prim&auml;rschl&uuml;sselfeldes<\/li>\n<li class=\"aufz-hlung\"><b>varPrimaerschluesselwert<\/b>: Wert des Prim&auml;rschl&uuml;sselfeldes f&uuml;r den Datensatz, aus dessen Anlagefeld eine Datei in das Dateisystem exportiert werden soll<\/li>\n<li class=\"aufz-hlung\"><b>strDatei<\/b>: Pfad und Name der aus der Anlage zu erstellenden Datei<\/li>\n<li class=\"aufz-hlung\"><b>strAnlage<\/b>: Name der Datei im Anlagefeld. Wenn Sie diesen optionalen Parameter nicht angeben, wird automatisch die erste im Anlagefeld gespeicherte Datei exportiert.<\/li>\n<\/ul>\n<p>Der Aufruf der Funktion sieht etwa wie folgt aus:<\/p>\n<pre>DateiAusAnlage &quot;tblAnlagen&quot;, &quot;Anlagefeld&quot;, &quot;AnlagebeispielID&quot;, 1, CurrentProject.Path &amp; &quot;\\test.ico&quot;<\/pre>\n<p>In diesem Fall wird die erste Datei im Anlagefeld <b>Anlagefeld <\/b>des Datensatzes mit dem Wert <b>1<\/b> im Prim&auml;rschl&uuml;sselfeld <b>AnlagebeispielID <\/b>der Tabelle <b>tblAnlagen <\/b>unter dem Namen <b>text.ico <\/b>im Verzeichnis der aktuellen Datenbank gespeichert. Wenn das betroffene Anlagefeld mehr als eine Datei enthielte, w&uuml;rde dieser Aufruf die erste Datei der Liste im Dateisystem speichern. Wenn Sie den Namen der Datei kennen, k&ouml;nnen Sie diesen als zus&auml;tzlichen Parameter angeben.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Zusammenfassung und Ausblick<\/p>\n<p>Mit dem Anlagefeld speichern Sie Dateien ganz leicht in Access-Tabellen. Dar&uuml;ber hinaus k&ouml;nnen Sie darin gespeicherte Bilder problemlos mit dem passenden Anlage-Steuerelement in Formularen und Berichten anzeigen. Durch die M&ouml;glichkeit, mehrere Dateien in einem einzigen Anlagefeld zu speichern, ist dieser Datentyp scheinbar flexibel; wer es mit den Normalformen seines Datenmodells aber ernst meint, speichert nicht mehr als eine Datei in einem Anlagefeld und legt stattdessen eine eigene Tabelle zum Verwalten der Anh&auml;nge an, die er per 1:n-Beziehung mit der entsprechenden Basistabelle verkn&uuml;pft.<\/p>\n<p>Neben den Bedienungsgrundlagen des Anlage-Steuerelements liefert dieser Beitrag viele Codebeispiele f&uuml;r den Zugriff per VBA. Damit sollten alle T&auml;tigkeiten rund um Anlagen zu erledigen sein.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Listing 2: Speichern von Anlagen im Dateisystem<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Function DateiAusAnlage(strTabelle As String, strAnlagefeld As String, strPrimaerschluesselfeld As String, _\r\n    varPrimaerschluesselwert As Variant, strDatei As String, Optional strAnlage As String = &quot;*&quot;) As Boolean\r\n    Dim db As DAO.Database\r\n    Dim rstAnlagen As DAO.Recordset2\r\n    On Error GoTo ErrHandler\r\n    Set db = CurrentDb\r\n    Set rstAnlagen = db.OpenRecordset(&quot;SELECT [&quot; &amp; strAnlagefeld &amp; &quot;].FileData FROM &quot; &amp; strTabelle &amp; &quot; WHERE [&quot; _\r\n    &amp; strPrimaerschluesselfeld &amp; &quot;]=&quot; &amp; varPrimaerschluesselwert &amp; &quot; AND [&quot; &amp; strAnlagefeld _\r\n    &amp; &quot;].FileName LIKE ''&quot; &amp; strAnlage &amp; &quot;''&quot;, dbOpenSnapshot)\r\n    If rstAnlagen.EOF Then\r\n        Err.Raise vbObjectError + 3, &quot;DateiAusAnlage&quot;, &quot;Das Anlagefeld ist leer.&quot;\r\n    End If\r\n    If Dir(strDatei) &lt;&gt; &quot;&quot; Then\r\n        Kill strDatei\r\n        DoEvents\r\n        End If\r\n        ''Fehlerbehandlung ausschalten, da nachfolgende Zeile\r\n        ''gegebenenfalls Fehler bei blockierten Dateiendungen erzeugt\r\n        On Error Resume Next\r\n        rstAnlagen(0).SaveToFile strDatei\r\n        If Err.Number = (-2146697202) Then\r\n            ''Spezialbehandlung: Datei wird mit Endung .dat versehen, was erlaubte Endung ist. Anschlie&szlig;end wird\r\n            ''wiederhergestellte Datei wieder korrekt umbenannt\r\n            rstAnlagen(0).SaveToFile strDatei &amp; &quot;.dat&quot;\r\n            DoEvents\r\n                Name strDatei &amp; &quot;.dat&quot; As strDatei\r\n            End If\r\n            DateiAusAnlage = True\r\n            ''... Restarbeiten und Fehlerbehandlung aus Platzgr&uuml;nden nicht abgedruckt\r\n        End Function<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Anlagefelder.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{8CE2194D-3286-4B7B-80C6-F6E877EC3700}\/aiu_700.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bis Access 2003 waren die OLE-Felder die einzige M&ouml;glichkeit, Dateien in Access-Tabellen zu speichern (okay, theoretisch ginge dies auch mit Memofeldern &#8230;). Access 2007 liefert mit dem Anlagefeld eine neue M&ouml;glichkeit, dies zu erledigen. Neu ist dabei vor allem die Tatsache, dass sich Dateien leicht &uuml;ber die Benutzeroberfl&auml;che in solchen Feldern speichern und auch wiederherstellen lassen. Wir schauen uns im Detail an, was Anlagefelder k&ouml;nnen und wie Sie damit umgehen.<\/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":[66012010,662010,44000024,44000023,44000021],"tags":[],"class_list":["post-55000700","post","type-post","status-publish","format-standard","hentry","category-66012010","category-662010","category-Berichte_und_Reporting","category-Mit_Formularen_arbeiten","category-Tabellen_und_Datenmodellierung"],"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>Access 2007: Anlagefelder - 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\/Access_2007_Anlagefelder\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access 2007: Anlagefelder\" \/>\n<meta property=\"og:description\" content=\"Bis Access 2003 waren die OLE-Felder die einzige M&ouml;glichkeit, Dateien in Access-Tabellen zu speichern (okay, theoretisch ginge dies auch mit Memofeldern ...). Access 2007 liefert mit dem Anlagefeld eine neue M&ouml;glichkeit, dies zu erledigen. Neu ist dabei vor allem die Tatsache, dass sich Dateien leicht &uuml;ber die Benutzeroberfl&auml;che in solchen Feldern speichern und auch wiederherstellen lassen. Wir schauen uns im Detail an, was Anlagefelder k&ouml;nnen und wie Sie damit umgehen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:10:22+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306\" \/>\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=\"27\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access 2007: Anlagefelder\",\"datePublished\":\"2020-05-22T22:10:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/\"},\"wordCount\":4516,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fc495c2cbafa4b2ca5fd611c18503306\",\"articleSection\":[\"1\\\/2010\",\"2010\",\"Berichte und Reporting\",\"Mit Formularen arbeiten\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/\",\"name\":\"Access 2007: Anlagefelder - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fc495c2cbafa4b2ca5fd611c18503306\",\"datePublished\":\"2020-05-22T22:10:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fc495c2cbafa4b2ca5fd611c18503306\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fc495c2cbafa4b2ca5fd611c18503306\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_2007_Anlagefelder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access 2007: Anlagefelder\"}]},{\"@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":"Access 2007: Anlagefelder - 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\/Access_2007_Anlagefelder\/","og_locale":"de_DE","og_type":"article","og_title":"Access 2007: Anlagefelder","og_description":"Bis Access 2003 waren die OLE-Felder die einzige M&ouml;glichkeit, Dateien in Access-Tabellen zu speichern (okay, theoretisch ginge dies auch mit Memofeldern ...). Access 2007 liefert mit dem Anlagefeld eine neue M&ouml;glichkeit, dies zu erledigen. Neu ist dabei vor allem die Tatsache, dass sich Dateien leicht &uuml;ber die Benutzeroberfl&auml;che in solchen Feldern speichern und auch wiederherstellen lassen. Wir schauen uns im Detail an, was Anlagefelder k&ouml;nnen und wie Sie damit umgehen.","og_url":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:10:22+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"27\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access 2007: Anlagefelder","datePublished":"2020-05-22T22:10:22+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/"},"wordCount":4516,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306","articleSection":["1\/2010","2010","Berichte und Reporting","Mit Formularen arbeiten","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/","url":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/","name":"Access 2007: Anlagefelder - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306","datePublished":"2020-05-22T22:10:22+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/fc495c2cbafa4b2ca5fd611c18503306"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Access_2007_Anlagefelder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access 2007: Anlagefelder"}]},{"@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\/55000700","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=55000700"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000700\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}