{"id":55001598,"date":"2026-06-01T00:00:00","date_gmt":"2026-05-06T11:22:42","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1598"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/","title":{"rendered":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/526138816e6243d6ba440f8b1d56224b\" width=\"1\" height=\"1\" alt=\"\"><b>Im ersten Teil dieses Beitrags haben wir die Grundlagen f&uuml;r die Arbeit mit Ordnern und Dateien im TreeView-Steuerelement gelegt: Ordner und Dateien im Explorer anzeigen und &ouml;ffnen, das Ermitteln des Pfades &uuml;ber die Tabellen-IDs, Kontextmen&uuml;s f&uuml;r Ordner- und Datei-Elemente sowie die vollst&auml;ndige Implementierung der Ordner-Operationen Kopieren, Ausschneiden, Einf&uuml;gen, Umbenennen und L&ouml;schen. Im vorliegenden zweiten Teil erg&auml;nzen wir die noch fehlenden Datei-Operationen und er&ouml;rtern die Funktionen im Modul &#8222;mdlDateisystem&#8220;, welche die TreeView-&Auml;nderungen tats&auml;chlich auf das Dateisystem &uuml;bertragen.<\/b><\/p>\n<h2>Voraussetzung<\/h2>\n<p>Dieser Beitrag baut unmittelbar auf Teil 1 auf (<b>www.access-im-unternehmen.de\/1585<\/b>). Alle dort beschriebenen Module, Funktionen und Formulare werden vorausgesetzt und hier nicht erneut erkl&auml;rt.<\/p>\n<p>Wir setzen auf dem dort beschriebenen Formular <b>frmDateienImTreeView <\/b>auf (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1598_007.png\" alt=\"Das TreeView-Steuerelement mit den Ordnern und Dateien\" width=\"649,559\" height=\"562,409\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Das TreeView-Steuerelement mit den Ordnern und Dateien<\/span><\/b><\/p>\n<h2>Erg&auml;nzung im Formular: SelectedItem setzen<\/h2>\n<p>Im Vergleich zum Listing aus Teil 1 wurde die Ereignisprozedur <b>ctlTreeView_MouseDown<\/b> um eine zus&auml;tzliche Zuweisung erg&auml;nzt. Bislang wurde <b>objCurrentNode<\/b> nur dann geleert und das markierte Element abgew&auml;hlt, wenn kein Node getroffen wurde. Nun wird au&szlig;erdem in allen anderen F&auml;llen &#8211; also wenn tats&auml;chlich ein Node-Element angeklickt wurde &#8211; die Eigenschaft <b>SelectedItem<\/b> des <b>TreeView<\/b>-Steuerelements explizit auf dieses Element gesetzt:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> objCurrentNode = ctlTreeView.Object.HitTest(x, y)\r\n<span style=\"color:blue;\">If <\/span>objCurrentNode Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n    Me.ctlTreeView.Object.SelectedItem = Nothing\r\n<span style=\"color:blue;\">Else<\/span>\r\n    Me.ctlTreeView.Object.SelectedItem = objCurrentNode\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Das stellt sicher, dass beim Aufruf von Kontextmen&uuml;-Funktionen, die &uuml;ber <b>Screen.ActiveControl<\/b> auf das aktive Steuerelement zugreifen, das angeklickte Element stets korrekt als markiert gilt.<\/p>\n<h2>Datei einf&uuml;gen &#8211; neuer Kontextmen&uuml;-Eintrag im Ordner-Men&uuml;<\/h2>\n<p>Das Kontextmen&uuml; f&uuml;r Ordner-Elemente wurde gegen&uuml;ber dem in Teil 1 gezeigten Listing um einen weiteren Eintrag erg&auml;nzt.<\/p>\n<p>Nach dem Eintrag <b>Ordner umbenennen<\/b> erscheint nun auch <b>Datei einf&uuml;gen<\/b>, der die Funktion <b>DateiEinfuegen<\/b> ohne Parameter aufruft:<\/p>\n<pre><span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n    .Caption = \"Datei einf&uuml;gen\"\r\n    .OnAction = \"=DateiEinfuegen()\"\r\n    .FaceId = 2512\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Dieser Eintrag erlaubt es, eine zuvor kopierte oder ausgeschnittene Datei in den Zielordner einzuf&uuml;gen, ohne dass das Datei-Kontextmen&uuml; ben&ouml;tigt wird.<\/p>\n<p>Da <b>DateiEinfuegen<\/b> keinen Key-Parameter erwartet, ermittelt die Funktion das Ziel-Element selbst &uuml;ber <b>Screen.ActiveControl.Object.SelectedItem<\/b>.<\/p>\n<h2>Das Kontextmen&uuml; f&uuml;r Dateien<\/h2>\n<p>Das Kontextmen&uuml; f&uuml;r Datei-Elemente wird in der Prozedur <b>CreateCommandBarFile<\/b> zusammengesetzt. Es enth&auml;lt die f&uuml;nf Eintr&auml;ge <b>Datei kopieren<\/b>, <b>Datei ausschneiden<\/b>, <b>Datei umbenennen<\/b>, <b>Datei l&ouml;schen<\/b> und <b>Datei mit Zielanwendung &ouml;ffnen<\/b> (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1598_008.png\" alt=\"Kontextmen&uuml; f&uuml;r Dateien\" width=\"549,559\" height=\"490,7151\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Kontextmen&uuml; f&uuml;r Dateien<\/span><\/b><\/p>\n<p>Der Aufbau der Prozedur aus Listing 1 ist identisch mit dem Ordner-Kontextmen&uuml; aus Teil 1.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>CreateCommandBarFile()\r\n    <span style=\"color:blue;\">Dim <\/span>strKey<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>Office.CommandBar\r\n    strKey = objCurrentNode.Key\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    CommandBars(\"Ordner\").Delete\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n    <span style=\"color:blue;\">Set<\/span> cbr = CommandBars.Add(\"Ordner\", msoBarPopup, False, <span style=\"color:blue;\">True<\/span>)\r\n    <span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n        .Caption = \"Datei kopieren\"\r\n        .OnAction = \"=DateiKopieren('\" & strKey & \"')\"\r\n        .FaceId = 1667\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n        .Caption = \"Datei ausschneiden\"\r\n        .OnAction = \"=DateiAusschneiden('\" & strKey & \"')\"\r\n        .FaceId = 1667\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n        .Caption = \"Datei umbenennen\"\r\n        .OnAction = \"=DateiUmbenennen()\"\r\n        .FaceId = 1667\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n        .Caption = \"Datei l&ouml;schen\"\r\n        .OnAction = \"=DateiLoeschen('\" & strKey & \"')\"\r\n        .FaceId = 1667\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">With<\/span> cbr.Controls.Add(msoControlButton)\r\n        .Caption = \"Datei mit Zielanwendung &ouml;ffnen\"\r\n        .OnAction = \"=DateiOeffnen('\" & strKey & \"')\"\r\n        .FaceId = 1667\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    cbr.ShowPopup\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Anzeigen des Kontextmen&uuml;s f&uuml;r Dateien<\/span><\/b><\/p>\n<p>Der Key des angeklickten <b>Nodes<\/b> wird aus <b>objCurrentNode.Key<\/b> gelesen und an die jeweilige Funktion &uuml;bergeben.<\/p>\n<p>Alle f&uuml;nf Funktionen liegen im Modul <b>mdlKontextmenues<\/b>.<\/p>\n<h2>Dateien kopieren und ausschneiden<\/h2>\n<p>Analog zu den bereits beschriebenen Ordner-Variablen <b>strKeyOrdnerKopiert<\/b> und <b>strKeyOrdnerAusgeschnitten<\/b> gibt es im Modulkopf von <b>mdlKontextmenues<\/b> zwei weitere &ouml;ffentliche Variablen f&uuml;r Dateien:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>strKeyDateiKopiert<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Public <\/span>strKeyDateiAusgeschnitten<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Die zugeh&ouml;rigen Funktionen schreiben den Key in die jeweilige Variable und leeren die andere:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiKopieren(strKey<span style=\"color:blue;\"> As String<\/span>)\r\n    strKeyDateiKopiert = strKey\r\n    strKeyDateiAusgeschnitten = \"\"\r\n<span style=\"color:blue;\">End Function<\/span>\r\n<span style=\"color:blue;\">Public Function <\/span>DateiAusschneiden(strKey<span style=\"color:blue;\"> As String<\/span>)\r\n    strKeyDateiAusgeschnitten = strKey\r\n    strKeyDateiKopiert = \"\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Das Vorgehen ist das gleiche, das wir in Teil 1 bereits f&uuml;r Ordner beschrieben haben.<\/p>\n<h2>Eine Datei umbenennen<\/h2>\n<p>Beim Umbenennen einer Datei gibt es einen kleinen Unterschied zu Ordnern. Die Funktion <b>OrdnerUmbenennen<\/b> greift direkt &uuml;ber die globale Variable <b>objTreeView<\/b> auf das Steuerelement zu.<\/p>\n<p>F&uuml;r Dateien wurde eine andere L&ouml;sung gew&auml;hlt, weil der Umbenennen-Befehl &uuml;ber das Datei-Kontextmen&uuml; ohne <b>Key<\/b>-Parameter aufgerufen wird. Die Funktion holt sich das aktive Steuerelement &uuml;ber <b>Screen.ActiveControl<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiUmbenennen()\r\n    <span style=\"color:blue;\">Dim <\/span>ctlTreeView<span style=\"color:blue;\"> As Object<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> ctlTreeView = Screen.ActiveControl\r\n    ctlTreeView.Object.StartLabelEdit\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Das bereits aus Teil 1 bekannte Ereignis <b>ctlTreeView_AfterLabelEdit<\/b> im Formularmodul &uuml;bernimmt dann den neuen Namen sowohl in die Tabelle <b>tblFiles<\/b> als auch im Dateisystem &uuml;ber den Aufruf von <b>FS_DateiUmbenennen<\/b>.<\/p>\n<h2>Eine Datei l&ouml;schen<\/h2>\n<p>Die Funktion <b>DateiLoeschen<\/b> l&ouml;scht eine Datei aus dem Dateisystem, aus der Tabelle <b>tblFiles<\/b> und aus dem <b>TreeView<\/b>-Steuerelement (Listing 2).<\/p>\n<p>Sie &uuml;bernimmt den Key des zu l&ouml;schenden Elements, ermittelt daraus die ID und holt sich das aktive Steuerelement &uuml;ber <b>Screen.ActiveControl<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiLoeschen(strKey<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>lngID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>ctlTreeView<span style=\"color:blue;\"> As Object<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> ctlTreeView = Screen.ActiveControl\r\n    lngID = <span style=\"color:blue;\">Mid<\/span>(strKey, 2)\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    <span style=\"color:blue;\">If <\/span>FS_DateiLoeschen(lngID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n        db.Execute \"DELETE FROM tblFiles WHERE FileID = \" _\r\n            & lngID, dbFailOnError\r\n        ctlTreeView.Object.Nodes.Remove \"i\" & lngID\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Nur wenn <b>FS_DateiLoeschen<\/b> den Wert <b>True<\/b> zur&uuml;ckgibt &#8211; also die Datei tats&auml;chlich im Dateisystem gel&ouml;scht werden konnte &#8211; werden auch der Datenbank-Datensatz und der TreeView-Eintrag entfernt. Das vermeidet inkonsistente Zust&auml;nde.<\/p>\n<h2>Eine Datei &ouml;ffnen<\/h2>\n<p>Um eine Datei in der zugeh&ouml;rigen Standardanwendung zu &ouml;ffnen, nutzen wir die Funktion <b>DateiOeffnen<\/b>. Sie ermittelt aus dem Key die ID, ruft <b>GetFilePath<\/b> auf und &uuml;bergibt den vollst&auml;ndigen Pfad an <b>FollowHyperlink<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiOeffnen(strKey<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strPath<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngID<span style=\"color:blue;\"> As Long<\/span>\r\n    lngID = <span style=\"color:blue;\">Mid<\/span>(strKey, 2)\r\n    strPath = GetFilePath(lngID)\r\n    FollowHyperlink strPath\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Das Ergebnis ist identisch mit dem Doppelklick-Verhalten, das wir bereits in Teil 1 beschrieben haben. Zus&auml;tzlich ist der Befehl nun auch &uuml;ber das Kontextmen&uuml; erreichbar.<\/p>\n<h2>Eine Datei einf&uuml;gen<\/h2>\n<p>Die Funktion <b>DateiEinfuegen<\/b> ist die komplexeste der Datei-Kontextmen&uuml;-Funktionen, weil sie sowohl den Fall des Einf&uuml;gens einer kopierten als auch einer ausgeschnittenen Datei behandelt (siehe Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiEinfuegen()<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database, ctlTreeView<span style=\"color:blue;\"> As Object<\/span>, objSourceItem<span style=\"color:blue;\"> As <\/span>MSComctlLib.Node\r\n    <span style=\"color:blue;\">Dim <\/span>lngSourceID<span style=\"color:blue;\"> As Long<\/span>, lngTargetID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strSourceKey<span style=\"color:blue;\"> As String<\/span>, strSourceText<span style=\"color:blue;\"> As String<\/span>, strTargetKey<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>bolKopiert<span style=\"color:blue;\"> As Boolean<\/span>, bolAusgeschnitten<span style=\"color:blue;\"> As Boolean<\/span>, lngNewID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(strKeyDateiKopiert) = 0<span style=\"color:blue;\"> Then<\/span>\r\n        lngSourceID = <span style=\"color:blue;\">Mid<\/span>(strKeyDateiKopiert, 2)\r\n        bolKopiert = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(strKeyDateiAusgeschnitten) = 0<span style=\"color:blue;\"> Then<\/span>\r\n            lngSourceID = <span style=\"color:blue;\">Mid<\/span>(strKeyDateiAusgeschnitten, 2)\r\n            bolAusgeschnitten = <span style=\"color:blue;\">True<\/span>\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> lngSourceID = 0<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">Set<\/span> ctlTreeView = Screen.ActiveControl\r\n        strTargetKey = ctlTreeView.Object.SelectedItem.Key\r\n        lngTargetID = <span style=\"color:blue;\">Mid<\/span>(strTargetKey, 2)\r\n        <span style=\"color:blue;\">If <\/span>bolKopiert = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n            <span style=\"color:blue;\">If <\/span>FS_DateiKopieren(lngSourceID, lngTargetID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                strSourceKey = \"i\" & lngSourceID\r\n                <span style=\"color:blue;\">Set<\/span> objSourceItem = ctlTreeView.Object.Nodes(strSourceKey)\r\n                strSourceText = objSourceItem.Text\r\n                db.Execute \"INSERT INTO tblFiles SELECT Filename, \" _\r\n                    & lngTargetID & \" AS ParentID, FileSize, Filedatetime\" _\r\n                    & \" FROM tblFiles WHERE FileID = \" & lngSourceID, dbFailOnError\r\n                lngNewID = db.OpenRecordset(\"SELECT @@IDENTITY\").Fields(0)\r\n                ctlTreeView.Object.Nodes.Add \"f\" & lngTargetID, tvwChild, _\r\n                    \"i\" & lngNewID, strSourceText, \"book\"\r\n            <span style=\"color:blue;\">End If<\/span>\r\n        <span style=\"color:blue;\">Else<\/span>\r\n            <span style=\"color:blue;\">If <\/span>FS_DateiVerschieben(lngSourceID, lngTargetID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                strSourceKey = \"i\" & lngSourceID\r\n                <span style=\"color:blue;\">Set<\/span> objSourceItem = ctlTreeView.Object.Nodes(strSourceKey)\r\n                strSourceText = objSourceItem.Text\r\n                db.Execute \"UPDATE tblFiles SET ParentID = \" & lngTargetID _\r\n                    & \" WHERE FileID = \" & lngSourceID, dbFailOnError\r\n                <span style=\"color:blue;\">If <\/span>db.RecordsAffected = 1<span style=\"color:blue;\"> Then<\/span>\r\n                    ctlTreeView.Object.Nodes.Remove strSourceKey\r\n                    ctlTreeView.Object.Nodes.Add \"f\" & lngTargetID, tvwChild, _\r\n                        \"i\" & lngSourceID, strSourceText, \"book\"\r\n                <span style=\"color:blue;\">End If<\/span>\r\n            <span style=\"color:blue;\">End If<\/span>\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Funktion zum Einf&uuml;gen einer kopierten oder ausgeschnittenen Datei<\/span><\/b><\/p>\n<p>Die Funktion pr&uuml;ft zun&auml;chst, ob eine Datei zum Kopieren oder zum Ausschneiden markiert ist. Das Ziel-Element &#8211; also der Ordner, in den eingef&uuml;gt werden soll &#8211; wird &uuml;ber das aktuell im <b>TreeView<\/b>-Steuerelement selektierte Element bestimmt.<\/p>\n<p>Die Quelle wird &uuml;ber die ID aus <b>strKeyDateiKopiert<\/b> beziehungsweise <b>strKeyDateiAusgeschnitten<\/b> ermittelt.<\/p>\n<p>Beim Kopieren rufen wir <b>FS_DateiKopieren<\/b> auf. Ist das erfolgreich, legen wir in der Tabelle <b>tblFiles<\/b> einen neuen Datensatz an &#8211; mit einem <b>INSERT INTO &#8230; SELECT<\/b>-Ausdruck, der Dateiname, Gr&ouml;&szlig;e und Datum &uuml;bernimmt, aber die neue <b>ParentID<\/b> verwendet.<\/p>\n<p>Die neue <b>FileID<\/b> ermitteln wir danach mit <b>SELECT @@IDENTITY<\/b> und f&uuml;gen das Element unter dem Zielordner in das <b>TreeView<\/b>-Steuerelement ein.<\/p>\n<p>Beim Ausschneiden rufen wir <b>FS_DateiVerschieben<\/b> auf. Nach erfolgreichem Verschieben aktualisieren wir die <b>ParentID<\/b> des vorhandenen Datensatzes in <b>tblFiles<\/b> per <b>UPDATE<\/b>.<\/p>\n<p>Wir pr&uuml;fen &uuml;ber <b>db.RecordsAffected<\/b>, ob genau ein Datensatz ge&auml;ndert wurde.<\/p>\n<p>Ist das der Fall, entfernen wir den Node an seiner alten Position und f&uuml;gen ihn beim Zielordner neu ein.<\/p>\n<h2>Ordner l&ouml;schen: FS-Aufruf erg&auml;nzt<\/h2>\n<p>Im Vergleich zum Listing aus Teil 1 wurde die Funktion <b>OrdnerLoeschen<\/b> um einen Aufruf von <b>FS_OrdnerLoeschen<\/b> erg&auml;nzt, der vor dem L&ouml;schen der Datenbankdatens&auml;tze ausgef&uuml;hrt wird:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>bolNichtLoeschen = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n    <span style=\"color:blue;\">Call<\/span> FS_OrdnerLoeschen(lngID)\r\n    <span style=\"color:blue;\">Call<\/span> UntergeordneteElementeLoeschen(lngID)\r\n    db.Execute \"DELETE FROM tblFolders WHERE FolderID = \" _\r\n        & lngID, dbFailOnError\r\n    objTreeView.Nodes.Remove strKey\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Im Artikel-Listing aus Teil 1 fehlte noch der Aufruf von <b>FS_OrdnerLoeschen<\/b>.<\/p>\n<p>Erst durch diesen Aufruf wird der Ordner tats&auml;chlich auch aus dem Dateisystem gel&ouml;scht &#8211; mit allen enthaltenen Unterordnern und Dateien.<\/p>\n<h2>Die Funktionen im Modul mdlDateisystem<\/h2>\n<p>S&auml;mtliche Dateisystem-Operationen sind im Modul <b>mdlDateisystem<\/b> zusammengefasst. Alle Funktionen nutzen das <b>Scripting.FileSystemObject<\/b> aus der Microsoft Scripting Runtime. Wir gehen im Folgenden die Funktionen der Reihe nach durch.<\/p>\n<h2>Pr&uuml;fen, ob Ordner vorhanden ist<\/h2>\n<p>Die Funktion <b>FS_OrdnerVorhanden <\/b>haben wir bereits in Teil 1 im Zusammenhang mit <b>NeuerOrdner<\/b> vorgestellt.<\/p>\n<p>Sie &uuml;bernimmt die ID des Zielordners und den gew&uuml;nschten Ordnernamen, ermittelt &uuml;ber <b>GetFolderPath<\/b> den vollst&auml;ndigen Pfad und pr&uuml;ft mit <b>FolderExists<\/b>, ob der Ordner bereits existiert.<\/p>\n<h2>Ordner kopieren<\/h2>\n<p>Die Funktion <b>FS_OrdnerKopieren<\/b> &uuml;bernimmt die IDs von Quell- und Zielordner (siehe Listing 3). Sie ermittelt den Quellpfad mit <b>GetFolderPath<\/b> und den Zielpfad f&uuml;r den kopierten Ordner. Existiert am Ziel bereits ein gleichnamiger Ordner, meldet sie das mit einem Hinweisdialog.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FS_OrdnerKopieren(lngQuelleID<span style=\"color:blue;\"> As Long<\/span>, lngZielID<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>objFSO<span style=\"color:blue;\"> As <\/span>Scripting.FileSystemObject\r\n    <span style=\"color:blue;\">Dim <\/span>strQuellpfad<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>strQuellOrdner<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> objFSO = <span style=\"color:blue;\">New<\/span> Scripting.FileSystemObject\r\n    strQuellOrdner = DLookup(\"Foldername\", \"tblFolders\", \"FolderID = \" & lngQuelleID)\r\n    strQuellpfad = GetFolderPath(lngQuelleID)\r\n    strZielpfad = GetFolderPath(lngZielID) & \"\\\"\r\n    <span style=\"color:blue;\">If <\/span>objFSO.FolderExists(strZielpfad)<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">MsgBox<\/span> \"Ordner existiert schon:\" & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & strZielpfad, _\r\n            vbOKOnly + vbExclamation, \"Ordner vorhanden\"\r\n        <span style=\"color:blue;\">Exit Function<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    objFSO.CopyFolder strQuellpfad, strZielpfad\r\n    <span style=\"color:blue;\">If <\/span>objFSO.FolderExists(strZielpfad & strQuellOrdner)<span style=\"color:blue;\"> Then<\/span>\r\n        FS_OrdnerKopieren = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Funktion zum Kopieren eines Ordners im Dateisystem<\/span><\/b><\/p>\n<p>Andernfalls kopiert sie mit <b>CopyFolder<\/b> und pr&uuml;ft anschlie&szlig;end, ob der Ordner tats&auml;chlich entstanden ist.<\/p>\n<h2>Verschieben eines Ordners<\/h2>\n<p>Die n&auml;chste Funktion <b>FS_OrdnerVerschieben<\/b> arbeitet &auml;hnlich wie <b>FS_OrdnerKopieren<\/b>. Der Zielpfad wird dabei aus dem Pfad des Zielordners und dem tats&auml;chlichen Namen des zu verschiebenden Ordners zusammengesetzt. Dazu liest die Funktion den Ordnernamen &uuml;ber <b>objFSO.GetFolder(strQuellpfad).name<\/b> aus.<\/p>\n<p>Nach dem Verschieben per <b>MoveFolder<\/b> wird gepr&uuml;ft, ob der Ordner am Ziel tats&auml;chlich vorhanden ist, und erst dann gibt die Funktion <b>True<\/b> zur&uuml;ck.<\/p>\n<h2>L&ouml;schen eines Ordners<\/h2>\n<p>Um einen Ordner zu l&ouml;schen, nimmt die Funktion <b>FS_OrdnerLoeschen<\/b> die ID des zu l&ouml;schenden Ordners entgegen, ermittelt den Pfad und ruft <b>DeleteFolder<\/b> auf.<\/p>\n<p>Die Fehlerbehandlung &uuml;bertr&auml;gt eventuelle Fehlernummern zur Diagnose ins Direktfenster. Die Funktion ist als <b>Sub<\/b> deklariert und gibt keinen R&uuml;ckgabewert zur&uuml;ck.<\/p>\n<h2>Neuen Ordner anlegen<\/h2>\n<p>Mit der Funktion <b>FS_NeuerOrdner<\/b> erzeugen wir im Dateisystem den neuen Ordner, dessen Name bereits von <b>NeuerOrdner<\/b> in <b>mdlKontextmenues<\/b> ermittelt wurde. Die Funktion pr&uuml;ft vorab nochmals mit <b>FolderExists<\/b>, ob der Ordner schon vorhanden ist, und legt ihn andernfalls mit <b>CreateFolder<\/b> an. Bei Erfolg gibt sie <b>True<\/b> zur&uuml;ck.<\/p>\n<h2>FS_OrdnerUmbenennen<\/h2>\n<p>Um einen Ordner umzubenennen, verwendet <b>FS_OrdnerUmbenennen<\/b> die VBA-Anweisung <b>Name &#8230; As &#8230;<\/b>.<\/p>\n<p>Der neue Pfad wird aus dem alten Pfad gebildet, indem der letzte Abschnitt nach dem letzten Backslash durch den neuen Namen ersetzt wird.<\/p>\n<p>Nach dem Umbenennen wird mit <b>FolderExists<\/b> gepr&uuml;ft, ob der Ordner am neuen Pfad vorhanden ist:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FS_OrdnerUmbenennen(lngID, _\r\n        strNeuerName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strQuellpfad<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>objFSO<span style=\"color:blue;\"> As <\/span>Scripting.FileSystemObject\r\n    <span style=\"color:blue;\">Set<\/span> objFSO = <span style=\"color:blue;\">New<\/span> Scripting.FileSystemObject\r\n    strQuellpfad = GetFolderPath(lngID)\r\n    strZielpfad = <span style=\"color:blue;\">Left<\/span>(strQuellpfad, _\r\n        <span style=\"color:blue;\">InStrRev<\/span>(strQuellpfad, \"\\\")) & strNeuerName\r\n    Name strQuellpfad<span style=\"color:blue;\"> As <\/span>strZielpfad\r\n    <span style=\"color:blue;\">If <\/span>objFSO.FolderExists(strZielpfad & \"\\\")<span style=\"color:blue;\"> Then<\/span>\r\n        FS_OrdnerUmbenennen = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<h2>Dateien umbenennen<\/h2>\n<p>Das Umbenennen von Dateien &uuml;bernimmt die Funktion <b>FS_DateiUmbenennen<\/b>. Sie funktioniert nach dem gleichen Prinzip wie <b>FS_OrdnerUmbenennen<\/b>.<\/p>\n<p>Der Unterschied besteht darin, dass der Quellpfad per <b>GetFilePath<\/b> statt <b>GetFolderPath<\/b> ermittelt wird und die abschlie&szlig;ende Pr&uuml;fung mit <b>FileExists<\/b> statt <b>FolderExists<\/b> erfolgt.<\/p>\n<h2>Datei l&ouml;schen<\/h2>\n<p>In der Funktion <b>FS_DateiLoeschen<\/b> ermitteln wir &uuml;ber <b>GetFilePath<\/b> den vollst&auml;ndigen Pfad der zu l&ouml;schenden Datei und rufen anschlie&szlig;end <b>DeleteFile<\/b> auf.<\/p>\n<p>Ob das L&ouml;schen erfolgreich war, pr&uuml;ft die Funktion mit <b>Not objFSO.FileExists(strPfad)<\/b> und gibt entsprechend <b>True<\/b> oder <b>False<\/b> zur&uuml;ck.<\/p>\n<h2>Datei verschieben<\/h2>\n<p>Die Funktion <b>FS_DateiVerschieben<\/b> &uuml;bernimmt die IDs von Quelldatei und Zielordner (siehe Listing 4). Sie ermittelt den Quellpfad der Datei und den Pfad des Zielordners.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FS_DateiVerschieben(lngQuelleID<span style=\"color:blue;\"> As Long<\/span>, lngZielID<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>objFSO<span style=\"color:blue;\"> As <\/span>Scripting.FileSystemObject\r\n    <span style=\"color:blue;\">Dim <\/span>strQuellpfad<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strZielordner<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>\r\n    strQuellpfad = GetFilePath(lngQuelleID)\r\n    strZielordner = GetFolderPath(lngZielID) & \"\\\"\r\n    <span style=\"color:blue;\">Set<\/span> objFSO = <span style=\"color:blue;\">New<\/span> Scripting.FileSystemObject\r\n    strDateiname = objFSO.GetFile(strQuellpfad).name\r\n    strZielpfad = strZielordner & strDateiname\r\n    <span style=\"color:blue;\">If <\/span>objFSO.FileExists(strZielpfad)<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">MsgBox<\/span> \"Datei existiert schon:\" & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & strZielpfad, vbOKOnly + vbExclamation, \"Datei vorhanden\"\r\n        <span style=\"color:blue;\">Exit Function<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    objFSO.MoveFile strQuellpfad, strZielordner\r\n    <span style=\"color:blue;\">If <\/span>objFSO.FileExists(strZielordner & strDateiname)<span style=\"color:blue;\"> Then<\/span>\r\n        FS_DateiVerschieben = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Funktion zum Verschieben einer Datei im Dateisystem<\/span><\/b><\/p>\n<p>Den Dateinamen liest sie mit <b>objFSO.GetFile(strQuellpfad).name<\/b> aus dem Dateisystem aus. Der vollst&auml;ndige Zielpfad wird aus Zielordner und Dateiname zusammengesetzt. Gibt es die Datei am Ziel bereits, meldet die Funktion das und bricht ab. Andernfalls verschiebt sie mit <b>MoveFile<\/b> und pr&uuml;ft den Erfolg mit <b>FileExists<\/b>.<\/p>\n<h2>Datei kopieren<\/h2>\n<p>Es fehlt noch das Kopieren von Dateien, was wir mit <b>FS_DateiKopieren<\/b> erledigen. Dies funktioniert analog zu <b>FS_DateiVerschieben<\/b>. Statt <b>MoveFile<\/b> wird <b>CopyFile<\/b> aufgerufen.<\/p>\n<p>Die Pr&uuml;fung auf das Vorhandensein einer gleichnamigen Datei am Ziel und die R&uuml;ckgabe des Erfolgsstatus verlaufen identisch.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Mit den in diesem zweiten Teil vorgestellten Funktionen ist die L&ouml;sung vollst&auml;ndig. S&auml;mtliche Operationen &#8211; Kopieren, Ausschneiden, Einf&uuml;gen, Umbenennen und L&ouml;schen &#8211; sind nun sowohl f&uuml;r Ordner als auch f&uuml;r Dateien implementiert.<\/p>\n<p>Alle &Auml;nderungen im <b>TreeView<\/b>-Steuerelement werden sofort auch im Dateisystem nachgezogen. Das Modul <b>mdlDateisystem<\/b> kapselt dabei alle Dateisystem-Operationen und nutzt konsequent das <b>FileSystemObject<\/b>.<\/p>\n<p>S&auml;mtliche Funktionen geben &#8211; mit Ausnahme von <b>FS_OrdnerLoeschen<\/b>, die als <b>Sub<\/b> deklariert ist &#8211; einen <b>Boolean<\/b>-Wert zur&uuml;ck, sodass die aufrufenden Stellen im Modul <b>mdlKontextmenues<\/b> immer pr&uuml;fen k&ouml;nnen, ob die Aktion im Dateisystem erfolgreich war, bevor Datenbank und <b>TreeView<\/b>-Steuerelement angepasst werden.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>OrdnerUndDateienInAccessEinlesen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/40B6F157-EF0E-4D33-AA39-5727F7F3B4A5\/aiu_1598.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil dieses Beitrags haben wir die Grundlagen f&uuml;r die Arbeit mit Ordnern und Dateien im TreeView-Steuerelement gelegt: Ordner und Dateien im Explorer anzeigen und &ouml;ffnen, das Ermitteln des Pfades &uuml;ber die Tabellen-IDs, Kontextmen&uuml;s f&uuml;r Ordner- und Datei-Elemente sowie die vollst&auml;ndige Implementierung der Ordner-Operationen Kopieren, Ausschneiden, Einf&uuml;gen, Umbenennen und L&ouml;schen. Im vorliegenden zweiten Teil erg&auml;nzen wir die noch fehlenden Datei-Operationen und er&ouml;rtern die Funktionen im Modul &#8222;mdlDateisystem&#8220;, welche die TreeView-&Auml;nderungen tats&auml;chlich auf das Dateisystem &uuml;bertragen.<\/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":[662026,66032026,44000026,44000027],"tags":[],"class_list":["post-55001598","post","type-post","status-publish","format-standard","hentry","category-662026","category-66032026","category-Interaktiv","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mit Ordnern und Dateien im TreeView arbeiten, Teil 2 - 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\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2\" \/>\n<meta property=\"og:description\" content=\"Im ersten Teil dieses Beitrags haben wir die Grundlagen f&uuml;r die Arbeit mit Ordnern und Dateien im TreeView-Steuerelement gelegt: Ordner und Dateien im Explorer anzeigen und &ouml;ffnen, das Ermitteln des Pfades &uuml;ber die Tabellen-IDs, Kontextmen&uuml;s f&uuml;r Ordner- und Datei-Elemente sowie die vollst&auml;ndige Implementierung der Ordner-Operationen Kopieren, Ausschneiden, Einf&uuml;gen, Umbenennen und L&ouml;schen. Im vorliegenden zweiten Teil erg&auml;nzen wir die noch fehlenden Datei-Operationen und er&ouml;rtern die Funktionen im Modul &quot;mdlDateisystem&quot;, welche die TreeView-&Auml;nderungen tats&auml;chlich auf das Dateisystem &uuml;bertragen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-06T11:22:42+00:00\" \/>\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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2\",\"datePublished\":\"2026-05-06T11:22:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/\"},\"wordCount\":1845,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/526138816e6243d6ba440f8b1d56224b\",\"articleSection\":[\"2026\",\"3\\\/2026\",\"Interaktiv\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/\",\"name\":\"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/526138816e6243d6ba440f8b1d56224b\",\"datePublished\":\"2026-05-06T11:22:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/526138816e6243d6ba440f8b1d56224b\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/526138816e6243d6ba440f8b1d56224b\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2\"}]},{\"@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":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2 - 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\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2","og_description":"Im ersten Teil dieses Beitrags haben wir die Grundlagen f&uuml;r die Arbeit mit Ordnern und Dateien im TreeView-Steuerelement gelegt: Ordner und Dateien im Explorer anzeigen und &ouml;ffnen, das Ermitteln des Pfades &uuml;ber die Tabellen-IDs, Kontextmen&uuml;s f&uuml;r Ordner- und Datei-Elemente sowie die vollst&auml;ndige Implementierung der Ordner-Operationen Kopieren, Ausschneiden, Einf&uuml;gen, Umbenennen und L&ouml;schen. Im vorliegenden zweiten Teil erg&auml;nzen wir die noch fehlenden Datei-Operationen und er&ouml;rtern die Funktionen im Modul \"mdlDateisystem\", welche die TreeView-&Auml;nderungen tats&auml;chlich auf das Dateisystem &uuml;bertragen.","og_url":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-05-06T11:22:42+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2","datePublished":"2026-05-06T11:22:42+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/"},"wordCount":1845,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/526138816e6243d6ba440f8b1d56224b","articleSection":["2026","3\/2026","Interaktiv","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/","url":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/","name":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/526138816e6243d6ba440f8b1d56224b","datePublished":"2026-05-06T11:22:42+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/526138816e6243d6ba440f8b1d56224b","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/526138816e6243d6ba440f8b1d56224b"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mit_Ordnern_und_Dateien_im_TreeView_arbeiten_Teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mit Ordnern und Dateien im TreeView arbeiten, Teil 2"}]},{"@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\/55001598","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=55001598"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001598\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}