{"id":55001226,"date":"2020-04-01T00:00:00","date_gmt":"2020-07-10T09:40:05","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1226"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/","title":{"rendered":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt verschiedene M&ouml;glichkeiten, Dateien mit Access zu verwalten. Je nach Speicherplatz speichert man diese in einem Anlage-Feld oder in einem externen Ordner und verweist dann &uuml;ber die Angabe des Pfades auf diese Datei. Es gibt zwar auch noch OLE-Felder, aber Anlagefelder sind intuitiver zu nutzen, da man diesen auch ohne Code Dateien hinzuf&uuml;gen kann. Aufgrund der begrenzten Gr&ouml;&szlig;e von Access-Dateien mit zwei Gigabyte ist es oft sinnvoller, nur die Dateipfade zu speichern. Spannend wird es beim Hinzuf&uuml;gen der Dateien selbst: Dies geschieht in der Regel durch &Ouml;ffnen eines Dateiauswahl-Dialogs. In vielen F&auml;llen ist das Verzeichnis mit den Dateien aber bereits im Windows Explorer ge&ouml;ffnet und man k&ouml;nnte diese schneller per Drag and Drop hinzuf&uuml;gen. Wie das gelingt, zeigen wir im vorliegenden Beitrag.<\/b><\/p>\n<p><b>Drag and Drop ins Anlagefeld<\/b><\/p>\n<p>Grunds&auml;tzlich w&auml;re es praktisch, wenn man Dateien direkt in ein Textfeld ziehen k&ouml;nnte und der Pfad zu dieser Datei dann in das Textfeld eingetragen wird. Das gelingt allerdings nicht mit Bordmitteln, denn die eingebauten Steuer-elemente erlauben kein Drag and Drop. Ein Mangel, mit dem viele Access-Entwickler hadern.<\/p>\n<p>Die einzigen Steuer-elemente, welche die Behandlung von Drag and Drop-Ereignissen erlauben, sind in der Bibliothek <b>MSCOMCTL.ocx <\/b>enthalten. Dabei handelt es sich um Steuer-elemente wie das <b>ListView<\/b>-, das <b>TreeView<\/b>&#8211; oder das <b>ImageCombo<\/b>-Steuerelement.<\/p>\n<p>Das erfahren Sie, wenn Sie eines dieser Steuer-elemente zu einem Formular einer Datenbankdatei hinzuf&uuml;gen und dann im VBA-Editor den Objektkatalog &ouml;ffnen, wo Sie wie in Bild 1 nach dem Suchbegriff <b>Drop <\/b>suchen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_001.png\" alt=\"Steuer-elemente mit Drag and Drop-Ereignissen\" width=\"499,6607\" height=\"445,515\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Steuer-elemente mit Drag and Drop-Ereignissen<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen also nicht direkt per Drag and Drop Dateien direkt in ein Textfeld ziehen. Das lie&szlig;e sich mit API-Programmierung erreichen, wovon wir aber in diesem Beitrag absehen. Stattdessen werden wir dazu ein <b>ListView<\/b>-Steuerelement verwenden, das wir an geeigneter Stelle in dem Formular unterbringen, welches wir mit der Drag and Drop-Funktion ausstatten wollen.<\/p>\n<p>Wenn der Benutzer dann eine Datei auf dieses Steuer-element zieht, soll ein entsprechendes Ereignis ausgel&ouml;st werden, das den Dateipfad erkennt und diesen in das gew&uuml;nschte Feld eintr&auml;gt.<\/p>\n<p><b>Alternative: Datei zus&auml;tzlich in bestimmtes Verzeichnis kopieren<\/b><\/p>\n<p>Gegebenenfalls sollen die Dateien, deren Pfad in der Tabelle gespeichert werden sollen, zuvor in ein spezielles Verzeichnis kopiert oder verschoben werden. Das kann beispielsweise ein Verzeichnis sein, dass sich im gleichen Ordner wie die Datenbankdatei befindet. Diese Funktion wollen wir alternativ vorsehen.<\/p>\n<p><b>Tabelle zum Speichern der Dateipfade<\/b><\/p>\n<p>Die Tabelle, in der wir die Pfade zu den per Drag and Drop einzuf&uuml;genden Dateien speichern, sieht in der Entwurfsansicht wie in Bild 2 aus. Neben dem Prim&auml;rschl&uuml;sselfeld namens <b>ID <\/b>soll die Tabelle nur noch das Feld <b>Dateipfad <\/b>enthalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_002.png\" alt=\"Tabelle zum Speichern der Dateipfade\" width=\"549,6265\" height=\"391,4608\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle zum Speichern der Dateipfade<\/span><\/b><\/p>\n<p><b>Formular mit der Drag and Drop-Funktion<\/b><\/p>\n<p>Das Formular, dem wir die Drag and Drop-Funktion hinzuf&uuml;gen wollen, verwendet die Tabelle <b>tblDateipfade<\/b> als Datensatzquelle. Wir ziehen beide Felder dieser Tabelle in den Formularentwurf. Au&szlig;erdem f&uuml;gen wir &uuml;ber den Dialog <b>ActiveX-Steuerelemente einf&uuml;gen <\/b>ein Steuer-element des Typs <b>Microsoft ListView Control, version 6.0 <\/b>zum Formular hinzu. Dieses sieht anschlie&szlig;end wie in Bild 3 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_003.png\" alt=\"Formular zum Hinzuf&uuml;gen von Dateipfaden\" width=\"499,6607\" height=\"326,5498\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Formular zum Hinzuf&uuml;gen von Dateipfaden<\/span><\/b><\/p>\n<p><b>Darstellung des Drag and Drop-Ziels<\/b><\/p>\n<p>Einfach nur ein <b>ListView<\/b>-Steuerelement als Drag and Drop-Ziel zu verwenden, ist die einfachste L&ouml;sung. Aber ergonomischer w&auml;re es, wenn das <b>ListView<\/b>-Element sich direkt als Drag and Drop-Ziel zeigt &#8211; beispielsweise, indem wir einen passenden Text oder ein Icon darin abbilden.<\/p>\n<p>Das soll sp&auml;ter so aussehen wie in Bild 4. Im Ruhezustand soll das Ziel den Text <b>Ziehen Sie die Datei in diesen Bereich <\/b>anzeigen, beim Ziehen einer Datei auf das Ziel den Text <b>Lassen Sie die Maustaste los, um die Datei hinzuzuf&uuml;gen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_006.png\" alt=\"&Auml;ndern des Drag and Drop-Ziels beim Ziehen mit der Maus\" width=\"649,559\" height=\"413,4433\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: &Auml;ndern des Drag and Drop-Ziels beim Ziehen mit der Maus<\/span><\/b><\/p>\n<p><b>ImageList vorbereiten<\/b><\/p>\n<p>Damit das geschieht, ben&ouml;tigen wir zun&auml;chst einmal zwei verschiedene Bilder, die wir je nach Zustand im <b>ListView <\/b>anzeigen. Au&szlig;erdem m&uuml;ssen wir die Gr&ouml;&szlig;e der Bilddatei festlegen. Das ist der erste Schritt:<\/p>\n<p>F&uuml;gen Sie &uuml;ber den Dialog <b>ActiveX-Steuerelemente einf&uuml;gen <\/b>ein Element des Typs <b>Microsoft ImageList, version 6.0 <\/b>hinzu, das Sie gleich in <b>ctlImageList <\/b>umbenennen. Das Steuer-element erscheint dann wie in Bild 5 links oben im Formular. Wenn Sie in die Formularansicht wechseln, wird das Steuer-element jedoch nicht sichtbar sein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_007.png\" alt=\"Das neu hinzugef&uuml;gte ImageList-Steuerelement\" width=\"499,6607\" height=\"232,2232\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Das neu hinzugef&uuml;gte ImageList-Steuerelement<\/span><\/b><\/p>\n<p>Nach einem Doppelklick auf das Steuer-element in der Entwurfsansicht erscheint das Eigenschaftsfenster aus Bild 6. Hier stellen Sie f&uuml;r die Option <b>Custom <\/b>die Gr&ouml;&szlig;e der zu verwendenden Bilddatei ein, hier <b>71 x 311<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_004.png\" alt=\"Einstellen der Gr&ouml;&szlig;e der Icons im ImageList-Steuerelement\" width=\"424,7115\" height=\"329,5352\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Einstellen der Gr&ouml;&szlig;e der Icons im ImageList-Steuerelement<\/span><\/b><\/p>\n<p>Auf der zweiten Registerseite f&uuml;gen Sie mit der Schaltfl&auml;che <b>Insert Picture&#8230; <\/b>die beiden Bilder hinzu, die im Ruhezustand und beim Ziehen eines Elements &uuml;ber dem <b>ListView<\/b>-Steuerelement angezeigt werden sollen. Die Index-Werte f&uuml;r die beiden Bilder lauten <b>1 <\/b>und <b>2<\/b>. <b>Key <\/b>und <b>Tag <\/b>k&ouml;nnen Sie ausf&uuml;llen, aber die Eigenschaften werden nicht ben&ouml;tigt (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_005.png\" alt=\"Einf&uuml;gen des ersten Bildes in das ImageList-Steuerelement\" width=\"424,7115\" height=\"329,5352\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Einf&uuml;gen des ersten Bildes in das ImageList-Steuerelement<\/span><\/b><\/p>\n<p><b>ListView programmieren<\/b><\/p>\n<p>Nun m&uuml;ssen wir das <b>ListView<\/b>-Steuerelement erst einmal so programmieren, dass es das erste Bild aus dem <b>ImageList<\/b>-Steuerelement anzeigt. Dazu deklarieren wir im Klassenmodul des Formulars zun&auml;chst einmal zwei Variablen. Die erste nimmt einen Verweis auf das Steuer-element <b>lvwDragAndDrop <\/b>auf und erh&auml;lt zus&auml;tzlich das Schl&uuml;sselwort <b>WithEvents<\/b>, damit wir im gleichen Klassenmodul Ereignisse f&uuml;r dieses Steuer-element deklarieren k&ouml;nnen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objDragAndDrop<span style=\"color:blue;\"> As <\/span>MSComctlLib.ListView<\/pre>\n<p>Die zweite soll einen Verweis auf das erste im <b>ListView<\/b>-Steuerelement enthaltene Element enthalten:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objListItem<span style=\"color:blue;\"> As <\/span>MSComctlLib.ListItem<\/pre>\n<p>Den Hauptteil der Arbeit erledigen wir in der Prozedur <b>Form_Load<\/b>, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird. Dieses deklariert eine weitere Variable namens <b>objImageList<\/b>, mit der wir auf das <b>ImageList<\/b>-Steuerelement <b>ctlImageList <\/b>verweisen wollen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Dim <\/span>objImageList<span style=\"color:blue;\"> As <\/span>MSComctlLib.ImageList<\/pre>\n<p>Dann ordnen wir der modulweit deklarierten Variable <b>objDragAndDrop <\/b>einen Verweis auf die Eigenschaft <b>Object <\/b>des Steuerelements <b>lvwDragAndDrop <\/b>zu und schlie&szlig;lich der soeben deklarierten Variable <b>objImageList <\/b>einen Verweis auf die Eigenschaft <b>object <\/b>des <b>ImageList<\/b>-Steuerelements.<\/p>\n<pre>     <span style=\"color:blue;\">Set<\/span> objDragAndDrop = Me!lvwDragAndDrop.Object\r\n     <span style=\"color:blue;\">Set<\/span> objImageList = Me!ctlImageList.Object<\/pre>\n<p>F&uuml;r das mit <b>objDragAndDrop <\/b>referenzierte <b>ListView<\/b>-Steuerelement stellen wir nun einige Eigenschaften ein. Die Eigenschaft <b>SmallIcons <\/b>f&uuml;llen wir mit einem Verweis auf das <b>ImageList<\/b>-Steuerelement:<\/p>\n<pre>     <span style=\"color:blue;\">With<\/span> objDragAndDrop\r\n         <span style=\"color:blue;\">Set<\/span> .SmallIcons = objImageList<\/pre>\n<p>F&uuml;r das Erscheinungsbild stellen wir unter <b>Appearance ccFlat <\/b>ein (im Gegensatz zu <b>cc3d<\/b>). <b>BorderStyle <\/b>erh&auml;lt den Wert <b>ccNone<\/b>. Damit stellen wir sicher, dass man das <b>ListView<\/b>-Steuerelement nicht an der Darstellung oder am Rahmen als solches erkennen kann. F&uuml;r die Eigenschaft <b>View <\/b>stellen wir <b>lvwList <\/b>ein, da so das Bild angezeigt wird, das wir gleich zuweisen:<\/p>\n<pre>         .Appearance = ccFlat\r\n         .BorderStyle = ccNone\r\n         .View = lvwList<\/pre>\n<p><!--30percent--><\/p>\n<p>Mit dem Wert <b>ccOLEDragAutomatic <\/b>f&uuml;r die Eigenschaft <b>OLEDragMode <\/b>und dem Wert <b>ccOLEDropManual <\/b>f&uuml;r die Eigenschaft <b>OLEDropMode <\/b>legen wir fest, dass wir mit Ereignisprozeduren auf Drag and Drop-Ereignisse reagieren k&ouml;nnen:<\/p>\n<pre>         .OLEDragMode = ccOLEDragAutomatic\r\n         .OLEDropMode = ccOLEDropManual<\/pre>\n<p>Danach leeren wir die Auflistung <b>ListItems <\/b>des <b>ListView<\/b>-Steuerelements mit der <b>Clear<\/b>-Methode, damit eventuell bereits vorhandene Elemente gel&ouml;scht werden:<\/p>\n<pre>         objDragAndDrop.ListItems.Clear<\/pre>\n<p>Schlie&szlig;lich f&uuml;gen wir ein neues Listenelement hinzu und nutzen dazu die <b>Add<\/b>-Methode von <b>ListItems<\/b>:<\/p>\n<pre>         <span style=\"color:blue;\">Set<\/span> objListItem =  objDragAndDrop.ListItems.Add(, \"a\", , , 1)\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das damit neu angelegte Element mit dem Schl&uuml;ssel <b>a <\/b>und dem Wert <b>1 <\/b>f&uuml;r den Parameter <b>SmallIcon <\/b>zeigt dann das mit dem Index <b>1 <\/b>versehene Bild aus dem <b>ImageList<\/b>-Steuerelement an.<\/p>\n<p><b>Wechseln des Bildes beim Ziehen auf das ListView<\/b><\/p>\n<p>Damit beim Ziehen eines Elements auf das <b>ListView<\/b>-Steuerelement das zweite im <b>ImageList<\/b>-Steuerelement gespeicherte Bild angezeigt wird, stellen wir einfach die Eigenschaft <b>SmallIcon <\/b>auf den Wert <b>2 <\/b>an. Das erledigen wir in der Prozedur, die durch das Ereignis <b>OLEDragOver <\/b>ausgel&ouml;st wird und die dann wie folgt aussieht:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragOver(Data<span style=\"color:blue;\"> As <\/span> MSComctlLib.DataObject, Effect<span style=\"color:blue;\"> As Long<\/span>, Button<span style=\"color:blue;\"> As <\/span> Integer, Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>,  State<span style=\"color:blue;\"> As Integer<\/span>)\r\n     objListItem.SmallIcon = 2\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ereignis feuert, wenn der Benutzer irgendein Objekt &uuml;ber das <b>ListView<\/b>-Steuerelement zieht, und blendet das zweite Bild mit dem Text <b>Lassen Sie die Maustaste los, um die Datei hinzuzuf&uuml;gen <\/b>ein.<\/p>\n<p>Sollte es sich der Benutzer anders &uuml;berlegen und die Datei nicht &uuml;ber dem Listenfeld fallen lassen, sondern irgendwo anders, dann sorgt diese Ereignisprozedur daf&uuml;r, dass wieder das Bild mit dem Text <b>Ziehen Sie Dateien in diesen Bereich <\/b>erscheint:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Detailbereich_MouseMove(Button<span style=\"color:blue;\"> As Integer<\/span>,  Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     objListItem.SmallIcon = 1\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das reicht allerdings nicht aus, wenn der Benutzer einmal mit der Datei &uuml;ber das <b>ListView<\/b>-Steuerelement gefahren ist und die Maustaste dann &uuml;ber irgendeinem anderen Bereich als dem Formular losl&auml;sst. Dann bleibt das Bild mit der zweiten Meldung angezeigt.<\/p>\n<p>F&uuml;r diesen Fall gibt es keine einfache L&ouml;sung, die sich direkt durch ein Ereignis realisieren l&auml;sst. Eine M&ouml;glichkeit w&auml;re es, ein <b>Zeitgeber<\/b>-Ereignis zu implementieren, wobei der Zeitgeber beim ersten &Uuml;berfahren des <b>ListView<\/b>-Steuerelements mit einer Datei gestartet wird. Das Ereignis soll dann bei jeder Ausf&uuml;hrung pr&uuml;fen, ob der Benutzer die Maustaste bereits losgelassen hat, ohne das Element auf das <b>ListView<\/b>-Steuerelement fallenzulassen.<\/p>\n<p>Dazu erweitern wir <b>objDragAndDrop_OLEDragOver <\/b>um eine Anweisung, welche die Eigenschaft <b>TimerInterval <\/b>auf 100 Millisekunden einstellt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragOver(...)\r\n     objListItem.SmallIcon = 2\r\n     Me.TimerInterval = 100\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Von diesem Zeitpunkt an wird die Zeitgeber-Ereignisprozedur alle 100 Millisekunden ausgel&ouml;st. Diese Prozedur f&uuml;llen wir mit den folgenden Anweisungen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Timer()\r\n     Me.TimerInterval = 0\r\n     objListItem.SmallIcon = 1\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier stellen wir einfach <b>Me.TimerInterval <\/b>wieder auf <b>0 <\/b>ein, damit das Zeitgeber-Ereignis anschlie&szlig;end nicht mehr ausgel&ouml;st wird. Au&szlig;erdem stellen wir die Eigenschaft <b>SmallIcon <\/b>von <b>objListItem <\/b>wieder auf <b>1 <\/b>ein, was das Bild mit dem Text <b>Ziehen Sie Dateien in diesen Bereich <\/b>wieder einblendet.<\/p>\n<p>Aber sorgt dies nicht unmittelbar nach dem Eintreten der Maus mit einer Datei in den Bereich des <b>ListView<\/b>-Steuerelements daf&uuml;r, dass die Anweisungen dieses Ereignisses ausgel&ouml;st und somit wieder die andere Meldung angezeigt wird Nein, das ist nicht der Fall: Denn das Zeitgeber-Ereignis wird erst dann ausgel&ouml;st, wenn der Mauszeiger das Steuer-element wieder verl&auml;sst.<\/p>\n<p><b>Pfad der Datei in Textfeld ablegen<\/b><\/p>\n<p>Wenn der Benutzer die Maustaste losl&auml;sst, nachdem er eine Datei &uuml;ber das <b>ListView<\/b>-Steuerelement gezogen hat, soll der Pfad der gezogenen Datei in das Textfeld <b>txtDateipfad <\/b>eingetragen werden. Das erledigen wir mit der folgenden Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragDrop(Data<span style=\"color:blue;\"> As <\/span> MSComctlLib.DataObject, Effect<span style=\"color:blue;\"> As Long<\/span>, Button<span style=\"color:blue;\"> As <\/span> Integer, Shift<span style=\"color:blue;\"> As Integer<\/span>, x<span style=\"color:blue;\"> As Single<\/span>, y<span style=\"color:blue;\"> As Single<\/span>)\r\n     objListItem.SmallIcon = 1\r\n     <span style=\"color:blue;\">If <\/span>Data.GetFormat(ccCFFiles)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtDateipfad = Data.Files(1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese stellt wieder das Bild im <b>ListView<\/b>-Steuerelement auf das erste Bild ein. Au&szlig;erdem pr&uuml;ft sie, ob das mit der Maus gezogene Element eine Datei ist. In diesem Fall tr&auml;gt sie den Namen der ersten Datei, den sie aus dem Array aus <b>Data.Files <\/b>mit dem Index <b>1 <\/b>ermittelt, in das Textfeld <b>txtDateipfad <\/b>ein.<\/p>\n<p>Damit haben wir die grundlegendste L&ouml;sung bereits erstellt. Wir werden nun Varianten dieser L&ouml;sung vorstellen.<\/p>\n<p><b>Datei nach Drag and Drop in Verzeichnis kopieren<\/b><\/p>\n<p>Wenn Sie die Drag and Drop-Funktion daf&uuml;r nutzen wollen, Dateien aus beliebigen Verzeichnissen nicht nur per Verweis auf den aktuellen Pfad zu referenzieren, sondern diese auch noch in ein neues Verzeichnis kopiert werden sollen, k&ouml;nnen Sie wie folgt vorgehen.<\/p>\n<p>Wir gehen dabei davon aus, dass Sie ein festes Verzeichnis als Zielverzeichnis verwenden wollen, dass sich im gleichen Verzeichnis befindet wie die Datenbankdatei mit der gew&uuml;nschten Funktion. Den Namen dieses Verzeichnisses speichern wir in einer Konstanten, die wir im Kopf des Klassenmoduls definieren. Hier soll der Name des Verzeichnisses schlicht <b>PDF <\/b>lauten:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Const cstrVerzeichnis<span style=\"color:blue;\"> As String<\/span> = \"PDF\"<\/pre>\n<p>F&uuml;r dieses Beispiel haben wir das zuvor erstellte Formular &uuml;brigens in das Formular <b>frmDateienPerDragAndDrop_Kopieren <\/b>kopiert.<\/p>\n<p>Die Ereignisprozedur <b>objDragAndDrop_OLEDragDrop <\/b>&auml;ndern wir wie folgt, indem wir einen Aufruf der Funktion <b>DateiKopierenUndZuweisen <\/b>hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragDrop(Data<span style=\"color:blue;\"> As <\/span> MSComctlLib.DataObject, Effect<span style=\"color:blue;\"> As Long<\/span>, Button<span style=\"color:blue;\"> As <\/span> Integer, Shift<span style=\"color:blue;\"> As Integer<\/span>, x<span style=\"color:blue;\"> As Single<\/span>, y<span style=\"color:blue;\"> As Single<\/span>)\r\n     objListItem.SmallIcon = 1\r\n     <span style=\"color:blue;\">If <\/span>Data.GetFormat(ccCFFiles)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtDateipfad =  DateiKopierenUndZuweisen(Data.Files(1))\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Funktion <b>DateiKopierenUndZuweisen <\/b>nimmt den Pfad der in das <b>ListView<\/b>-Steuerelement gezogenen Datei als Parameter entgegen:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>DateiKopierenUndZuweisen( strDateipfad<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strZielpfad<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Dann ermittelt es aus dem &uuml;bergebenen Pfad den reinen Dateinamen und speichert diesen in der Variablen <b>strDateiname<\/b>:<\/p>\n<pre>     strDateiname =  <span style=\"color:blue;\">Mid<\/span>(strDateipfad, <span style=\"color:blue;\">InStrRev<\/span>(strDateipfad, \"\") + 1)<\/pre>\n<p>Den Zielpfad ermitteln wir aus dem aktuellen Datenbankverzeichnis, dem Verzeichnis aus <b>cstrVerzeichnis<\/b> und dem Dateinamen:<\/p>\n<pre>     strZielpfad = CurrentProject.Path & \"\"  & cstrVerzeichnis & \"\" & strDateiname<\/pre>\n<p>Dann erstellen wir bei deaktivierter Fehlerbehandlung das in <b>cstrVerzeichnis <\/b>angegebene Verzeichnis im Datenbankverzeichnis:<\/p>\n<pre>     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     MkDir CurrentProject.Path & \"\" & cstrVerzeichnis\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0<\/pre>\n<p>Dann kopiert die Funktion die Datei in das neue Zielverzeichnis und gibt den Dateinamen als Funktionswert zur&uuml;ck:<\/p>\n<pre>     FileCopy strDateipfad, strZielpfad\r\n     DateiKopierenUndZuweisen = strDateiname\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Dieser wird dann von der aufrufenden Ereignisprozedur in das Textfeld <b>txtDateipfad <\/b>eingetragen. Die Angabe des kompletten Pfades ist hier nicht mehr n&ouml;tig, da wir ja wissen, in welchem Verzeichnis sich die kopierte Datei befindet.<\/p>\n<p><b>Ausschneiden und einf&uuml;gen<\/b><\/p>\n<p>Die Prozedur von oben k&ouml;nnen Sie noch dahingehend erg&auml;nzen, dass die gezogenen und somit kopierten Dateien anschlie&szlig;end am Ausgangsordner gel&ouml;scht werden.<\/p>\n<p>Somit werden die Dateien also quasi verschoben. Dazu f&uuml;gen Sie noch die folgende Zeile zur Prozedur <b>DateiKopierenUndZuweisen <\/b>hinzu:<\/p>\n<pre>...\r\nFileCopy strDateipfad, strZielpfad\r\nKill strDateipfad\r\nDateiKopierenUndZuweisen = strDateiname<\/pre>\n<p>&#8230;<\/p>\n<p>Sie k&ouml;nnen auch noch einen zus&auml;tzlichen Parameter zur Funktion hinzuf&uuml;gen, der angibt, ob die Dateien nach dem Verschieben am Ausgangsort gel&ouml;scht werden sollen:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>DateiKopierenUndZuweisen( strDateipfad<span style=\"color:blue;\"> As String<\/span>,  <span style=\"color:blue;\">Optional<\/span> bolLoeschen<span style=\"color:blue;\"> As Boolean<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     ...\r\n     FileCopy strDateipfad, strZielpfad\r\n     <span style=\"color:blue;\">If <\/span>bolLoeschen<span style=\"color:blue;\"> Then<\/span>\r\n         Kill strDateipfad\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     DateiKopierenUndZuweisen = strDateiname\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Dieser Parameter wird dann in der <b>If&#8230;Then<\/b>-Bedingung gepr&uuml;ft, in der sich die <b>Kill<\/b>-Anweisung befindet.<\/p>\n<p>Den Parameter f&uuml;gen Sie dann im Aufruf von <b>DateiKopierenUndZuweisen <\/b>wie folgt hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragDrop(...)\r\n     objListItem.SmallIcon = 1\r\n     <span style=\"color:blue;\">If <\/span>Data.GetFormat(ccCFFiles)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtDateipfad = DateiKopierenUndZuweisen( Data.Files(1), Me!chkLoeschen)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier wird der Parameter &uuml;ber den Wert eines Steuerelements namens chkLoeschen ermittelt. Dieses Steuer-element m&uuml;ssen Sie nat&uuml;rlich noch zum Formular hinzuf&uuml;gen. Dieses sieht dann anschlie&szlig;end wie in Bild 8 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_009.png\" alt=\"Formular mit Kontrollk&auml;stchen zum Aktivieren der L&ouml;schfunktion\" width=\"599,593\" height=\"259,7906\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Formular mit Kontrollk&auml;stchen zum Aktivieren der L&ouml;schfunktion<\/span><\/b><\/p>\n<p><b>Dateien zur Datenblattansicht hinzuf&uuml;gen<\/b><\/p>\n<p>Gegebenenfalls wollen Sie Dateien per Drag and Drop zu den Datens&auml;tzen in einer Datenblattansicht hinzuf&uuml;gen. In dem Fall m&uuml;ssen wir improvisieren, denn in der Datenblattansicht k&ouml;nnen nur die Steuer-elemente Textfeld, Kombinationsfeld und Kontrollk&auml;stchen angezeigt werden.<\/p>\n<p>Wir haben also keine M&ouml;glichkeit, ein <b>ListView<\/b>-Steuerelement f&uuml;r jeden einzelnen Datensatz des Datenblatts anzuzeigen, auf das wir dann die Dateien ziehen k&ouml;nnten.<\/p>\n<p>Hierzu legen wir ein neues Beispielformular an, anhand dessen wir auch gleich zeigen, welche Elemente sie alle zu diesem Formular hinzuf&uuml;gen m&uuml;ssen, um die Drag and Drop-Funktion zu implementieren.<\/p>\n<p>Das Hauptformular soll <b>frmDateienPerDragAndDrop_Datenblatt <\/b>hei&szlig;en, das Unterformular, dass die Dateipfade in der Datenblattansicht anzeigt, hei&szlig;t <b>sfmDateienPerDrag-AndDrop_Datenblatt<\/b>.<\/p>\n<p>Dem Unterformular weisen wir die Tabelle <b>tblDateipfade <\/b>als Datensatzquelle zu und f&uuml;gen die beiden Felder dieser Tabelle in den Detailbereich des Entwurfs ein. Au&szlig;erdem legen wir f&uuml;r die Eigenschaft <b>Standardansicht <\/b>den Wert <b>Datenblatt <\/b>fest. Das Unterformular f&uuml;gen wir dann nach dem Speichern und Schlie&szlig;en dem Entwurf des Hauptformulars hinzu.<\/p>\n<p>Nun folgenden die f&uuml;r die Implementierung der Drag and Drop-Funktion wichtigen Schritte:<\/p>\n<ul>\n<li>Kopieren des <b>ImageList<\/b>-Steuerelements aus dem zuvor erstellen Formular in das Hauptformular <b>frmDateienPerDragAndDrop_Datenblatt<\/b>.<\/li>\n<li>Kopieren des <b>ListView<\/b>-Steuerelements aus dem zuvor erstellen Formular in das Hauptformular <b>frmDateienPerDragAndDrop_Datenblatt<\/b>.<\/li>\n<\/ul>\n<p>F&uuml;r diese beiden Schritte &ouml;ffnen Sie die beteiligten Formulare in der Entwurfsansicht, kopieren die Steuer-elemente mit <b>Strg + V <\/b>und f&uuml;gen diese mit <b>Strg + C<\/b> in das Zielformular ein. Access meldet auf unserem Rechner beim Kopieren des <b>ImageList<\/b>-Steuerelements einen unbekannten Fehler, st&uuml;rzt aber nicht ab. Wir haben die Anwendung nicht neu gestartet, wie von der Meldung empfohlen, sondern einfach das n&auml;chste Steuer-element kopiert.<\/p>\n<p>Der Weg ohne Fehler w&auml;re, das Formular <b>frmDateienPerDragAndDrop <\/b>zuerst in ein ein neues Formular zu kopieren und dann das Datenblatt et cetera hinzuzuf&uuml;gen.<\/p>\n<p>Danach erg&auml;nzen wir den Code des Formulars. Als Erstes kopieren wir die beiden Deklarationszeilen f&uuml;r die Variablen <b>objDragAndDrop <\/b>und <b>objListItem<\/b>. Dann &uuml;bertragen wir den kompletten Inhalt der Ereignisprozedur <b>Form_Load<\/b>. Au&szlig;erdem kopieren Sie die Prozeduren <b>Detailbereich_MouseMove<\/b>, <b>Form_Timer<\/b>, <b>objDragAndDrop_OLEDragOver <\/b>und <b>objDragAndDrop_OLEDragDrop<\/b>. Wenn Sie nun in die Formularansicht wechseln und eine Datei auf das <b>ListView<\/b>-Steuerelement ziehen, l&ouml;st dies einen Fehler aus, weil wir die Prozedur <b>objDragAndDrop_OLEDragDrop <\/b>noch nicht angepasst haben. Dort soll der Dateiname n&auml;mlich noch in <b>Me!txtDateipfad <\/b>gezogen werden:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragDrop(...)\r\n     objListItem.SmallIcon = 1\r\n     <span style=\"color:blue;\">If <\/span>Data.GetFormat(ccCFFiles)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtDateipfad = Data.Files(1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies m&uuml;ssen wir so anpassen, dass die Information im aktuell markierten Datensatz der Datenblattansicht im Unterformular landet.<\/p>\n<p>Dazu passen wir die Zeile mit der Zuweisung von <b>Data.Files(1) <\/b>so an, dass der Inhalt in das Feld <b>Dateipfad <\/b>des Unterformulars geschrieben wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDragAndDrop_OLEDragDrop(...)\r\n     objListItem.SmallIcon = 1\r\n     <span style=\"color:blue;\">If <\/span>Data.GetFormat(ccCFFiles)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!sfmDateienPerDragAndDrop_Datenblatt. Form!Dateipfad = Data.Files(1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach gelingt das Hinzuf&uuml;gen von Dateipfaden per Drag and Drop, sodass das Ergebnis wie in Bild 9 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_1226_008.png\" alt=\"Einf&uuml;gen von Dateinamen per Drag and Drop in die Datens&auml;tze eines Datenblatts\" width=\"700\" height=\"359,4828\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Einf&uuml;gen von Dateinamen per Drag and Drop in die Datens&auml;tze eines Datenblatts<\/span><\/b><\/p>\n<p>Dadurch, dass beim Zugriff auf Felder im Datenblatt immer der aktuell markierte Datensatz referenziert wird, brauchen wir nicht extra im Programmcode zu ermitteln, welcher Datensatz aktuell markiert ist.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag beschreibt, wie Sie ein ListView-Steuerelement als Drag and Drop-Ziel in einem Formular platzieren k&ouml;nnen.<\/p>\n<p>Beim Fallenlassen von Dateien auf diesem Steuer-element k&ouml;nnen verschiedene Aktionen ausgel&ouml;st werden &#8211; zum Beispiel das einfache Eintragen des Pfades der gezogenen Datei in ein Textfeld, das Kopieren oder Ausschneiden samt Einf&uuml;gen der Datei und anschlie&szlig;endes Referenzieren. Oder auch das Einf&uuml;gen von Dateinamen in den aktuellen Datensatz eines Datenblatts.<\/p>\n<p>Damit spart man sich in vielen F&auml;llen den Einsatz eines Dateiauswahldialogs &#8211; zum Beispiel immer dann, wenn ohnehin ein Windows Explorer mit den zu bearbeitenden Dateien ge&ouml;ffnet ist.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DateienDragAndDrop.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/B1257EBB-6068-4597-87DB-A306AEA9F91D\/aiu_1226.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt verschiedene M&ouml;glichkeiten, Dateien mit Access zu verwalten. Je nach Speicherplatz speichert man diese in einem Anlage-Feld oder in einem externen Ordner und verweist dann &uuml;ber die Angabe des Pfades auf diese Datei. Es gibt zwar auch noch OLE-Felder, aber Anlagefelder sind intuitiver zu nutzen, da man diesen auch ohne Code Dateien hinzuf&uuml;gen kann. Aufgrund der begrenzten Gr&ouml;&szlig;e von Access-Dateien mit zwei Gigabyte ist es oft sinnvoller, nur die Dateipfade zu speichern. Spannend wird es beim Hinzuf&uuml;gen der Dateien selbst: Dies geschieht in der Regel durch &Ouml;ffnen eines Dateiauswahl-Dialogs. In vielen F&auml;llen ist das Verzeichnis mit den Dateien aber bereits im Windows Explorer ge&ouml;ffnet und man k&ouml;nnte diese schneller per Drag and Drop hinzuf&uuml;gen. Wie das gelingt, zeigen wir im vorliegenden Beitrag.<\/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":[66022020,662020,44000023],"tags":[],"class_list":["post-55001226","post","type-post","status-publish","format-standard","hentry","category-66022020","category-662020","category-Mit_Formularen_arbeiten"],"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>Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen - 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\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen\" \/>\n<meta property=\"og:description\" content=\"Es gibt verschiedene M&ouml;glichkeiten, Dateien mit Access zu verwalten. Je nach Speicherplatz speichert man diese in einem Anlage-Feld oder in einem externen Ordner und verweist dann &uuml;ber die Angabe des Pfades auf diese Datei. Es gibt zwar auch noch OLE-Felder, aber Anlagefelder sind intuitiver zu nutzen, da man diesen auch ohne Code Dateien hinzuf&uuml;gen kann. Aufgrund der begrenzten Gr&ouml;&szlig;e von Access-Dateien mit zwei Gigabyte ist es oft sinnvoller, nur die Dateipfade zu speichern. Spannend wird es beim Hinzuf&uuml;gen der Dateien selbst: Dies geschieht in der Regel durch &Ouml;ffnen eines Dateiauswahl-Dialogs. In vielen F&auml;llen ist das Verzeichnis mit den Dateien aber bereits im Windows Explorer ge&ouml;ffnet und man k&ouml;nnte diese schneller per Drag and Drop hinzuf&uuml;gen. Wie das gelingt, zeigen wir im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-10T09:40:05+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e\" \/>\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=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen\",\"datePublished\":\"2020-07-10T09:40:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/\"},\"wordCount\":2826,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/0733610745aa44fd98ff0c74c195d59e\",\"articleSection\":[\"2\\\/2020\",\"2020\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/\",\"name\":\"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/0733610745aa44fd98ff0c74c195d59e\",\"datePublished\":\"2020-07-10T09:40:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/0733610745aa44fd98ff0c74c195d59e\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/0733610745aa44fd98ff0c74c195d59e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen\"}]},{\"@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":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen - 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\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/","og_locale":"de_DE","og_type":"article","og_title":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen","og_description":"Es gibt verschiedene M&ouml;glichkeiten, Dateien mit Access zu verwalten. Je nach Speicherplatz speichert man diese in einem Anlage-Feld oder in einem externen Ordner und verweist dann &uuml;ber die Angabe des Pfades auf diese Datei. Es gibt zwar auch noch OLE-Felder, aber Anlagefelder sind intuitiver zu nutzen, da man diesen auch ohne Code Dateien hinzuf&uuml;gen kann. Aufgrund der begrenzten Gr&ouml;&szlig;e von Access-Dateien mit zwei Gigabyte ist es oft sinnvoller, nur die Dateipfade zu speichern. Spannend wird es beim Hinzuf&uuml;gen der Dateien selbst: Dies geschieht in der Regel durch &Ouml;ffnen eines Dateiauswahl-Dialogs. In vielen F&auml;llen ist das Verzeichnis mit den Dateien aber bereits im Windows Explorer ge&ouml;ffnet und man k&ouml;nnte diese schneller per Drag and Drop hinzuf&uuml;gen. Wie das gelingt, zeigen wir im vorliegenden Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-07-10T09:40:05+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen","datePublished":"2020-07-10T09:40:05+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/"},"wordCount":2826,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e","articleSection":["2\/2020","2020","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/","url":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/","name":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e","datePublished":"2020-07-10T09:40:05+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/0733610745aa44fd98ff0c74c195d59e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dateiverknuepfung_per_Drag_and_Drop_hinzufuegen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dateiverkn&uuml;pfung per Drag and Drop hinzuf&uuml;gen"}]},{"@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\/55001226","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=55001226"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001226\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}