AC2000 - im Listenfeld Dateien anzeigen

Hallo Exzessler,

wiedermal stehe ich vor einem (für mich) kniffligen Problem.

Ich möchte Dateien eines bestimmten Typs (CSV), die sich entweder auf Diskette (A:) oder Festplatte (C:) oder auf CD (D:) befinden, in einem Listenfeld anzeigen lassen, um sie dann in Access einzulesen.

Also etwa so:
Aus einem vorgeschalteten Laufwerk Listen(Kombifeld) wähle ich meine konstanten Laufwerksbuchstaben (s.o.) aus, daraufhin soll eben dieses Laufwerk auf CSV-Dateien abgesucht werden (keine Suche in Unterverzeichnissen nötig!) und diese im Datei Listenfeld angezeigen.
Durch einen Doppelklick darauf wird dann meine Einlese-Proz gestartet.

Ist so ein automatisches Einlesen mit Access überhaupt möglich?
Falls jemand von Euch eine gute Idee hat würde ich mich riesig freuen …

Danke jetztschonmal
und Gruss
moritzbock

Hallo Moritzbock,

Du hast mir hier schon öfter weitergeholfen, also werd’ ich mal versuchen, mich zu revanchieren:

Ich habe mal in einem Formular eine Listbox mit dem Namen „DateienList“ angelegt und dazu folgenden Code geschrieben:

Private Sub Form\_Load()
 Dim StartPfad As String
 Dim tmp As String
 StartPfad = "c:\*.csv"
 With DateienList
 .RowSourceType = "Wertliste"
 .RowSource = Dir(StartPfad)
 Do
 tmp = Dir()
 .RowSource = .RowSource & ";" & tmp
 Loop While Len(tmp) \> 0
 .Requery
 End With
End Sub

Er bezieht sich NUR auf die Dateien in einem Ordner. Wie man eine Liste der verfügbaren Laufwerke bekommt, weiß ich allerdings auch nicht.

Ich würde Dir hier aber noch eine ganz andere Empfehlung aussprechen: Versuch’s mal mit „CommonDialog“. Der stellt Dir den ‚normalen‘ Windows-Standard-Dialog „Datei öffnen“ (natürlich auch Speichern, Drucken usw.) zur Verfügung. Dann brauchst Du das Ganze nicht selbst zu basteln.
Den „CommonDialog“ findest Du über die Toolbox-Symbolleiste unter „Weitere Steuerelemente“ und dort unter „Microsoft Common Dialog Control“. Setz’ das Element in Deine Form ein, gib ihm einen Namen (z. B. CommonDialog1) und dann den Code zur einem Öffnen-Button (hier Button1):

Private Sub Button1\_Click()
 Dim Dateiname As String
 With CommonDialog1
 .FileName = ""
 .InitDir = "c:\" '

Jetzt kannst Du wunderbar bequem einen Datei auswählen...

Gruß
_(Woly)_

2 Anmerkungen dazu:

  1. Ich würde schreiben:

    .RowSourceType = „Value List“

(Mich wundert, dass „Wertliste“ funktioniert…)

  1. Die RowSource kann max 2048 Zeichen lang werden - was für Dateilisten häufig nicht ausreicht. Ich würde auf jeden Fall auf die Längenbegrenzung abprüfen. (Oder halt doch besser einen anderen Weg gehen).

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

Hallo Woly,

tausend Dank für Deine Mühe +++++++++++++++++++++++++

Ich habe den ersten Teil (Sub Form_Load) genommen und das ist genau das, was ich gesucht habe. SUPER!

Die Sache mit „Common Dialog“ kann ich nicht ausprobieren, da ich hier im Netzwerk arbeite und wir für jeden Punkt und jedes Komma Admin-Rechte brauchen ;-}

Auf jeden Fall ist Dein Tipp allererste Sahne!

Ich will´s mal anders ausdrücken:
_ „Access ist nothing without Woly“ _

Gruss
moritzbock

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielleicht ist der Standard-Datei-Öffnen-Dialog für dich besser geeignet?! (http://www.donkarl.com/FAQ/FAQ8Kommunikation.htm#8.1 - FAQ 8.1 - bzw. bei mir das Beispiel „FileDialogs“)

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

Hallo Reinhard,

2 Anmerkungen dazu:

  1. Ich würde schreiben:

.RowSourceType = „Value
List“

(Mich wundert, dass „Wertliste“ funktioniert…)

Du hast Recht - habe ich vergessen zu erwähnen …

  1. Die RowSource kann max 2048 Zeichen lang werden - was für
    Dateilisten häufig nicht ausreicht. Ich würde auf jeden Fall
    auf die Längenbegrenzung abprüfen. (Oder halt doch besser
    einen anderen Weg gehen).

Mir hat dieser Weg schon geholfen …

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps &
Tricks)

Gruss aus dem Taunus
moritzbock

Wieso brauchst du da Admin-Rechte? Wenn du die DLL nicht aufrufen darfst, funktioniert dein Windows nicht - schließlich benutzt fast jedes Programm die Common Dialogs!

Gruß aus dem Norden
Reinhard

Hallo Reinhard,

ich stimme Dir in beiden Fällen zu!

(Mich wundert, dass „Wertliste“ funktioniert…)

Tut’s tatsächlich :smile:

Die RowSource kann max 2048 Zeichen lang werden - was für Dateilisten häufig nicht ausreicht. Ich würde auf jeden Fall auf die Längenbegrenzung abprüfen.

Sollte Moritzbock tatsächlich soo viele CSV-Dateien im Root liegen haben, könnte man das Makro so abändern, daß die Dateinamen über einen RS in eine Table geschrieben werden, auf die dann die Listbox verweist.

Gruß
(Woly)

Na ja - es geht um 2048 Zeichen - wenn man genügend lange Dateinamen hat, reichen schon ein paar Hundert Dateien aus, um an die Grenze zu kommen - und das ist ja so viel nicht…

Gruß aus dem Norden
Reinhard

Nun ja Reinhard,

ich bekomme beim Einbinden des Common Dialogs einen Hinweis
" Der OLE-Server nicht registriert. Damit der OLE-Server registriert wird müssen Sie ihn erneut installieren" - und ab da habe ich wohl keine Chance mehr ohne Admin-Rechte. Oder habe ich was falsch verstanden?

Gruss
moritzbock

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wenn du z.B. das Beispiel „FileDialogs“ bei mir verwendest, musst du keine OCXe o.ä. registrieren.

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)