Ordnerstruktur mit Unterordner anlegen

Moderator: ModerationP

Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 27. Apr 2021, 19:55

Hallo Leute!

Da bin ich nach 2 Jahren wieder und brauche wieder eure Hilfe!

Möchte eine Ordnerstruktur mit Unterordner lt. Abfrage erstellen lassen. Leider bekomm ich immer nur die erste zeile ausgegeben. Was mache ich falsch? Funktioniert das überhaupt?
Steh einfach am Schlauch - vieleicht seh ich auch den Wald vor lauter Bäumen nicht???

Hier mein Code:
Code: Alles auswählen
Option Compare Database
Option Explicit

''API Deklaration~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
  ByVal DirPath As String) As Long
''Ende API Deklaration~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Sub StringAusAbfrage()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim str As String
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("qryPfade", dbOpenDynaset)

   Do While Not rs.EOF
        str = str & rs!Pfad
If MakeSureDirectoryPathExists(str) <> 0 Then
  MsgBox "Der Pfad : " & str & " wurde erfolgreich angelegt!"
End If
        rs.MoveNext
    Loop
    Debug.Print str   
End Sub

Private Sub cmdOeffnenOrdner_Click()
Call StringAusAbfrage
End Sub


Hab leider die Datenbank dazu nicht anhängen können !?

LG Christina

PS.: Wenn jemand einen Tipp für mich hat wie ich diese verschachtelten Tabellen ordenlich in einem Formular anzeigen kann, bitte her damit. Habs ewig probiert und dann aufgegeben da ich so viele Unterformulare nicht verknüpfen konnte :(
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Bitsqueezer » 27. Apr 2021, 21:24

Hallo Christina,

welcome back!...:)

Klar bekommst Du nur die erste Zeile ausgegeben, wenn Du "Debug.Print" außerhalb der Schleife positionierst..;)

Ob das ansonsten funktioniert, kann man so nicht sagen, dazu müßte man das Ergebnis Deiner Abfrage kennen, z.B., ob die Pfade richtig sortiert sind, Schreibweisen stimmen, Pfadtrenner usw.

Zum Anhängen einer ACCDB mußt Du die Datenbank erst zippen...jaja, 2 Jahre ist eine lange Zeit... :P
Steht aber auch alles im ersten Beitrag im Access-Forum.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 27. Apr 2021, 22:08

Hallo Christian,

Ja zwei Jahre waren echt lang, muss mich erst wieder einfinden in die ganzen Codes :D

Also grundsätzlich stimmt die Zusammensetzung. 1 Ordner wird ja erstellt nur alle anderen Pfade eben nicht mehr?
Werde morgen früh gleich um 7:00 Uhr die Datenbank hochladen!
Vielleicht lichtet sich dann der Nebel.

Lg und danke für die schnelle Rückmeldung!
Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 28. Apr 2021, 05:16

Es hat funktioniert ;)
Danke für den Tipp mit dem Zippen :)

Hoffe ich habe sie so weit bereinigen können das es übersichtlich ist

Der Code findet sich unter:
frmEinstellung_cboOrdneroeffnen_click
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Bitsqueezer » 28. Apr 2021, 08:47

Hallo Christina,

hast Du mal, statt den Ordner anzulegen, einfach "str" ausgegeben?

Hier das,was da passiert:

Code: Alles auswählen
D:\Users\oem\Documents\TestOrdner\Schriftverkehr\
D:\Users\oem\Documents\TestOrdner\Schriftverkehr\D:\Users\oem\Documents\TestOrdner\Pläne\IN\
D:\Users\oem\Documents\TestOrdner\Schriftverkehr\D:\Users\oem\Documents\TestOrdner\Pläne\IN\D:\Users\oem\Documents\TestOrdner\Pläne\OUT\Freigabepläne OUT\
D:\Users\oem\Documents\TestOrdner\Schriftverkehr\D:\Users\oem\Documents\TestOrdner\Pläne\IN\D:\Users\oem\Documents\TestOrdner\Pläne\OUT\Freigabepläne OUT\D:\Users\oem\Documents\TestOrdner\Pläne\OUT\Ausführungspläne OUT\


Ich denke, es sollte klar sein, warum das nicht funktioniert.

Hierarchietabellen: Access hat keine Methode dafür, Hierarchien richtig darzustellen. Deine Idee, für jede Ebene eine neue Tabelle zu erstellen und entsprechend jeweils Unterformulare, wäre schon sehr aufwendig und würde die Tiefe begrenzen (maximal 7 geht in Access).

Stattdessen erstellt man einfach eine Tabelle mit den Unterordner-Namen und verweist über eine Parent-ID auf den übergeordneten Ordner (den Datensatz, der diesen enthält), damit sind beliebige Tiefen möglich. Die oberste Ebene enthält dann z.B. den Laufwerksbuchstaben und als Parent-ID entweder NULL oder 0.

Zur Darstellung gibt es entweder das TreeView-Control (das ich nicht mehr einsetze, weil zweifelhaft ist, wie lange noch von MS unterstützt und nach den vielen Problemen damit in den letzten Jahren) oder Du kannst meine TableTree-Lösung probieren, die so eine Hierarchietabelle als Endlosformular ähnlich dem TreeView-Control anzeigen kann. Auf meiner Downloadseite unter "CCTableTreeV2".

Und natürlich wie immer der Hinweis, daß man für die Datenbank besser einen DB-Server verwendet, etwa der kostenlose SQL Server Express, der mit einer CTE-Abfrage eine rekursive Abfrage ermöglicht, die solche Trees ganz einfach als Abfrage ausgeben kann.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 28. Apr 2021, 10:10

Hallo Christian

Hierarchietabellen: Access hat keine Methode dafür, Hierarchien richtig darzustellen. Deine Idee, für jede Ebene eine neue Tabelle zu erstellen und entsprechend jeweils Unterformulare, wäre schon sehr aufwendig und würde die Tiefe begrenzen (maximal 7 geht in Access).


Das hab ich gelesen aber leider nicht ganz verstanden - im Grunde sind es bei mir ja nur 4 Unterkategorien/Ordner/Hierachien...

hast Du mal, statt den Ordner anzulegen, einfach "str" ausgegeben?


Ja im Direktfenster wurde mir es ja angezeigt, aber wusste nicht wie ich die einzelnen Pfade teilen kann

Das TreeView.. kenn ich nicht und möchte auch nicht wirklich was einbauen was dann erst in ein paar Jahren nicht mehr funktioniert.
Und natürlich wie immer der Hinweis, daß man für die Datenbank besser einen DB-Server verwendet, etwa der kostenlose SQL Server Express, der mit einer CTE-Abfrage eine rekursive Abfrage ermöglicht, die solche Trees ganz einfach als Abfrage ausgeben kann.

Wie darf ich mir das vorstellen? Hast du da eine Seite wo das genauer erklärt wird?
Grundsätzlich ist ja meine Datenbank in Backend und Frontend aufgeteilt mit einer Benutzerverwaltung. Dafür hab ich ganz viel Hilfe hier aus dem Forum erhalten ;)

Gibt es also keine Möglichkeit diese neun Pfade auf einmal erstellen zu lassen?

LG Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Bitsqueezer » 28. Apr 2021, 12:38

Hallo Christina,

im Grunde sind es bei mir ja nur 4 Unterkategorien/Ordner/Hierachien

Auf meiner Downloadseite findest Du die Demodatenbank "AccessTreeView", die zeigt, was ich meine (bei Verwendung von Unterdatenblättern in der Datasheet-View).

Ich würde mich auf so eine Aussage nicht verlassen - sobald mal jemand eine fünfte Ebene anfordert, stehst Du da und mußt alles wieder anpassen. Wenn man eine ParentID verwendet, ist man flexibel und kann die Tiefe beliebig gestalten (und natürlich auch begrenzen).

aber wusste nicht wie ich die einzelnen Pfade teilen kann


Indem Du nicht die Pfade in jedem Durchlauf in "str" aneinanderhängst. Einfach den Gesamtpfad, der im Recordset steht, der API-Funktion übergeben, die legt den Pfad dann passend an. Du mußt nur sicherstellen, daß im Recordset der Komplettpfad bis zur jeweils tiefsten Ebene zurückgegeben wird, aber anhand der Liste oben sieht man ja, daß das schon der Fall ist, Du sie eben nur immer "hintendrangeklebt" hast.

Das TreeView.. kenn ich nicht

Kennst Du ganz sicher, ist in etlichen Anwendungen zu sehen. Ziemlich genau das, was auch im Explorer in der Ordneransicht zu sehen ist (nur daß die TreeView dort heute von .NET kommt und nicht mehr aus der TreeViewControl).

Wie darf ich mir das vorstellen? Hast du da eine Seite wo das genauer erklärt wird?

Aber sicher:
https://www.sqlservertutorial.net/sql-s ... rsive-cte/
https://docs.microsoft.com/de-de/sql/t- ... rver-ver15 (weiter unten auf der Seite)
http://sqlchitchat.com/sqldev/tsql/recursive-cte/
https://www.youtube.com/watch?v=GGoV0wTMCg0

(um nur ein paar zu nennen...)

Backend/Frontend ist ja auch schon mal ein Schritt, wenn Du dann als Backend einen DB-Server verwendest, bist Du in der Welt der "richtigen" Datenbanken...:)
Access als Backend ist heutzutage nicht mehr begründbar, insbesondere in einer Firmenumgebung. Privat kann man ja alles basteln, aber da hat man es i.d.R. nicht mit mehreren Usern oder wichtigen Unternehmensdaten zu tun.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 28. Apr 2021, 13:12

Vielen Dank

werd mir das bei Gelegenheit mit der DB-Server ansehen.

Indem Du nicht die Pfade in jedem Durchlauf in "str" aneinanderhängst. Einfach den Gesamtpfad, der im Recordset steht, der API-Funktion übergeben, die legt den Pfad dann passend an. Du mußt nur sicherstellen, daß im Recordset der Komplettpfad bis zur jeweils tiefsten Ebene zurückgegeben wird, aber anhand der Liste oben sieht man ja, daß das schon der Fall ist, Du sie eben nur immer "hintendrangeklebt" hast.


Kannst du mir dabei helfen? Wie übergibt man das in eine API Funktion?

Alle Funktionen hab ich aus dem Internet oder dem Forum, aber hab noch nie eines selbst geschrieben

LG
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Beaker s.a. » 28. Apr 2021, 14:09

Wie übergibt man das in eine API Funktion?

So, wie du es jetzt auch machst. Was Christian meint ist
Code: Alles auswählen
… MakeSureDirectoryPathExists(rs!Pfad) ...
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1136
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Bitsqueezer » 28. Apr 2021, 15:53

Hallo Christina,

ersetze das:

Code: Alles auswählen
str = str & rs!Pfad


gegen das:

Code: Alles auswählen
str = rs!Pfad


Das Übergeben an die API-Funktion wird bereits hier erledigt:

Code: Alles auswählen
If MakeSureDirectoryPathExists(str) <> 0 Then


"MakeSureDirectoryPathExists" ist der Name der API-Funktion, die zu Beginn mit "Declare" deklariert wird.

Alle Funktionen hab ich aus dem Internet oder dem Forum, aber hab noch nie eines selbst geschrieben


Naja, dann wird's ja Zeit, sich mal mit den Grundlagen zu befassen...;)

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Prinzessin87 » 28. Apr 2021, 17:46

Gott ich bin so doof :roll:

ersetze das:

Code: Alles auswählen
str = str & rs!Pfad


jetzt versteh ich es! durch das zweite str wurde es immer aneinandergeschachtelt :D
Ich liebe Access programmieren, jetzt wirds zeit wieder ordentlich einzuarbeiten.

Hab wikrlich den Wald vor lauter Bäume nicht gesehen :roll:

Danke Christian!

LG

Ps: Werd mir die API Deklaration noch ansehen, das hab ich auf meiner Agenda. Benutzt hab ich sie ja jetzt
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 218
Registriert: 01. Jul 2016, 17:31

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon Bitsqueezer » 28. Apr 2021, 20:46

Hallo Christina,

nicht doof...nur ungeübt...das wird schon wieder...;)

Informationen zu der API-Funktion:
https://docs.microsoft.com/en-us/window ... pathexists

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Ordnerstruktur mit Unterordner anlegen

Beitragvon knobbi38 » 29. Apr 2021, 12:22

Hallo,

MakeSureDirectoryPathExists ist mittlerweile etwas überholt. Als Ersatz kann man dafür SHCreateDirectoryEx() nehmen.
Hier ein fertiges Modul, welches einfach eingebunden werden kann:
modSHLCreateDirectoryEX.zip

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3263
Registriert: 02. Jul 2015, 14:23


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast