PDA

Vollständige Version anzeigen : Dateiliste importieren


jamiga
20.10.2000, 11:55
Hi,
ich möchte ein Verzeichnis mit Wildcards durchsuchen und den gefundenen, vollständigen Pfad inkl. dem Dateinamen (auch \\Netzwerk) in eine Tabelle importieren.
Hat jemand eine Indee oder vielleicht sogar eine fertige Lösung ?

Vielen Dank im Voraus

jamiga

Manuela Kulpa
20.10.2000, 18:33
Hallo jamiga!

Anbei ein Beispiel für A2K. Wenn du Access 97 hast oder Probleme mit der Umsetzung, melde dich.

Das Beispiel nutzt das FileSearch-Objekt ;) und ist kommentiert!


Public Sub TabelleFuellen()

' Eine Fehlerbehandlung kann nie schaden ;-)
On Error GoTo HandleErr

'Das Beispiel verwendet zur Suche der Dateien das
'FileSearch-Objekt. Dazu benötigen du einen Verweis
'auf die MS Office 8.0 bzw. 9.0 Objektbibliothek

' die Objektvariablen
Dim objFileSearch As FileSearch
Dim daoRs As DAO.Recordset

' allgemeine Variablen
Dim lngI As Long
Dim strPfad As String
Dim strDateiname As String
Dim iHelp As Integer

' Sanduhr ein
DoCmd.Hourglass True

' Objekt zuweisen
Set objFileSearch = Application.FileSearch

' Zwei Konstanten
' Filter: z.B. alle Word-Dokumente cFILTER = "*.DOC"
Const cFILTER = "*.*"
' Laufwerk: z.B. cLAUFWERK = "C:\"
Const cLAUFWERK = "H:\Download"

' Suchkriterium festlegen
With objFileSearch

.FileType = msoFileTypeAllFiles
.FileName = cFILTER
.LookIn = cLAUFWERK

' Unterordner durchsuchen -> JA
.SearchSubFolders = True

' Wurde was gefunden
Select Case .Execute(msoSortByFileName, msoSortOrderAscending)
' Wenn nein, Meldung
Case Is = 0
' Sanduhr aus
DoCmd.Hourglass False
' Ausgabe Meldung
MsgBox "Es wurden keine Dateien gefunden"

' Wenn ja, durchlaufe die Schleife
Case Is >= 1
' Recordset zuweisen, Tabelle -> tblDateien
Set daoRs = Application.CurrentDb.OpenRecordset("tblDateien")
' Schleife über alle gefundenen Files
For lngI = 1 To .FoundFiles.Count
' Übergabe des kompletten Pfades einschliesslich der Datei
strPfad = .FoundFiles(lngI)

' Was jetzt kommt kannst du erstmal nur in Access 2000 ein-
' setzen, da die Funktion InStrRev erst ab o.g. Version vor-
' handen ist. Falls du Interesse (Access 97) hast, melde dich!
' Du kannst iHelp auch auskommentieren bzw. die Variable
' strDateiname und daoRs.Fields("Beschreibung").Value = strDateiname,
' dann erhälst du nur den kompletten Pfad

' Steht denn was im Pfad
If Len(strPfad) > 0 Then
' Wenn ja, suche den letzten \ und schreibe die Position des
' Zeichens in die Variable
iHelp = InStrRev(strPfad, "\")
' Wurde denn auch was gefunden
If iHelp > 0 Then
' Wenn ja, extrahiere mir den Dateinamen
strDateiname = Mid(strPfad, iHelp + 1)
' Lege einen neuen Datensatz an
daoRs.AddNew
' schreibe den kompletten Pfad mit Dateiname in das Feld Verzeichnis
daoRs.Fields("Verzeichnis").Value = strPfad
' schreibe den Dateinamen mit Endung in das Feld Beschreibung
daoRs.Fields("Beschreibung").Value = strDateiname
' speicher den Datensatz
daoRs.Update
End If
End If
' Gehe zum nächsten File
Next lngI
' Sanduhr aus
DoCmd.Hourglass False
' Ausgabe Anzahl Files
MsgBox "Es wurde(n) " & .FoundFiles.Count _
& " Datei(en) gefunden."
End Select
End With

ExitHere:
' Speicher freigeben
If Not objFileSearch Is Nothing Then Set objFileSearch = Nothing
If Not daoRs Is Nothing Then daoRs.Close: Set daoRs = Nothing
Exit Sub

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "Form_frmTabelleFüllen.cmdTabelleFuellen_Click"
End Select
Resume ExitHere
End Sub


LLAP

<font size="1" face="Century Gothic">Moderatorenanmerkung: Überarbeitung, durch den Wechsel der Forensoftware zum 01.01.2003 verursacht: in diesem Beitrag Link(s) korrigiert.
jinx – 23.11.2003</font>

jamiga
21.10.2000, 20:43
Ich dreh mich im Kreis.
Klasse. Genau das was ich gesucht habe.

Nachdem ich mich nun auch mit den Funktionen im Forum angefreundet habe, kann ich dir nun auch auf diesem Weg naochmals danken.

jamiga

spiessa
01.01.2001, 13:26
Hallo Manuela,

ich habe ein ähnliches Problem (ich möchte automatisch alle JPEG Files aus einem Directory in je ein OLE Feld einer Tabelle einfüllen lassen:

BildNr1 OLEObject1 (File 1)
BildNr2 OLEObject2 (File 2)
BildNr3 OLEObject3 (File 3)
Dafür scheint sich dein Programm oben zu eignen. Ich habe es in ein modul kopiert und wollte es starten. Leider kriege ich auf der Zeile:
Dim objFileSearch As FileSearch
die fehlermeldung: Compile Error: User-defined type not defined.
Was mache ich falsch?

Vielen Dank in Voraus
andreas

Joggi
20.08.2001, 21:47
Hallo zusammen

ich habe ein paar VB Zeilen vom Januar genommen und auf meine Datenbank angepasst

es soll ausgeführt werden, wenn ein Button geklickt wird.


wer kann mir helfen?

Public Sub TabelleFuellen()

End Sub
' Eine Fehlerbehandlung kann nie schaden ;-)
On Error GoTo HandleErr
'Das Beispiel verwendet zur Suche der Dateien das
'FileSearch-Objekt. Dazu benötigen du einen Verweis
'auf die MS Office 8.0 bzw. 9.0 Objektbibliothek
' die Objektvariablen

Dim objFileSearch As FileSearch
Dim daoRs As DAO.Recordset ' allgemeine Variablen
Dim lngI As Long
Dim strPfad As String
Dim strDateiname As String
Dim iHelp As Integer ' Sanduhr ein
DoCmd.Hourglass True ' Objekt zuweisen
Set objFileSearch = Application.FileSearch
' Zwei Konstanten

' Filter: z.B. alle Word-Dokumente cFILTER = "*.DOC"
Const cFILTER = "*.*"

Const cLAUFWERK = "C:\"
'Const cLAUFWERK = "H:\Download"

' Suchkriterium festlegen With objFileSearch
.FileType = msoFileTypeAllFiles
.FileName = cFILTER
.LookIn = cLAUFWERK

' Unterordner durchsuchen -> JA
.SearchSubFolders = True

' Wurde was gefunden
Select Case .Execute(msoSortByFileName, msoSortOrderAscending)

' Wenn nein, Meldung
Case Is = 0

' Sanduhr aus
DoCmd.Hourglass False

' Ausgabe Meldung
MsgBox "Es wurden keine Dateien gefunden"

' Wenn ja, durchlaufe die Schleife
Case Is >= 1

' Recordset zuweisen, Tabelle -> tblDateien
Set daoRs = Application.CurrentDb.OpenRecordset("Tabelle1")

' Schleife über alle gefundenen Files
For lngI = 1 To .FoundFiles.Count

' Übergabe des kompletten Pfades einschliesslich der Datei
strPfad = .FoundFiles(lngI)

' Was jetzt kommt kannst du erstmal nur in Access 2000 ein-
'setzen, da die Funktion InStrRev erst ab o.g. Version vor-
' handen ist. Falls du Interesse (Access 97) hast, melde dich!


' Du kannst iHelp auch auskommentieren bzw. die Variable
' strDateiname und daoRs.Fields("Beschreibung").Value = strDateiname,
' dann erhälst du nur den kompletten Pfad

' Steht denn was im Pfad
If Len(strPfad) > 0 Then

' Wenn ja, suche den letzten \ und schreibe die Position des
' Zeichens in die Variable

iHelp = InStrRev(strPfad, "\")
' Wurde denn auch was gefunden

If iHelp > 0 Then

' Wenn ja, extrahiere mir den Dateinamen
strDateiname = Mid(strPfad, iHelp + 1)

' Lege einen neuen Datensatz an
daoRs.AddNew

' schreibe den kompletten Pfad mit Dateiname in das Feld Verzeichnis
daoRs.Fields("Verzeichnis").Value = strPfad

' schreibe den Dateinamen mit Endung in das Feld Beschreibung
daoRs.Fields("Beschreibung").Value = strDateiname
' speicher den Datensatz
daoRs.Update
End If
End If

' Gehe zum nächsten File
Next lngI

' Sanduhr aus
DoCmd.Hourglass False

' Ausgabe Anzahl Files
MsgBox "Es wurde(n) " & .FoundFiles.Count _
& " Datei(en) gefunden."
End Select

End With

ExitHere:
' Speicher freigeben

If Not objFileSearch Is Nothing Then Set objFileSearch = Nothing
If Not daoRs Is Nothing Then
daoRs.Close:
Set daoRs = Nothing

Exit Sub

HandleErr():
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, _
"Form_frmTabelleFüllen.cmdTabelleFuellen_Click"
End Select
Resume ExitHere

End Sub