Problemstellung:
Nur für 32Bit Office Versionen
Einlesen von Dateien, mit ohne ohne Unterverzeichnissen und Filterfunktion.
Voraussetzungen:
Das Bsp ist ab A00lauffähig.
Zur Funktionsfähigkeit wird die VBEx32.DLL benötigt. Diese muss sich im WindowsSystem-Verzeichnis befinden und muss nicht registiert werden.
Desweiteren kommt in der Bsp-DB das ActiveX-Control sevListbox zum Einsatz.
Dieses Control wurde bei Installation registriert.
Es ist aber nur für das DEMO hier erforderlich, da man im Control komfortabel Spalten sortieren
kann und auch die Spaltenbreite automatisch angepasst wird.
Die Sub ReadFilesArray liest alle Dateien ein und schreibt diese in die Tabelle tbl_Files.
Dafür werden einige Funktionen der VBEx32.DLL aufgerufen.
Public Sub ReadFilesArray(strFolder As String, Optional intSubfolder As Integer = 0, _ Optional strFilter As String = "*.*") '******************************************* 'Name: ReadFilesArray (Sub) benötigt die VBEx32.DLL 'Purpose: Ermittelt alle Dateien aus einem Verzeichnis und schreibt diese in ein Array 'Author: Thomas Keßler 'Date: Januar 26, 2003, 09:01:34 'Inputs: strFolder=Pfad, intSubfolder=mit Subfolder=1 ohne=0 ' strFilter=Dateifilter setzen 'Output: '******************************************* Dim db As DAO.Database, rs As DAO.Recordset Dim varElement As Variant Dim lCount As Long Dim nBytes As Currency ' Löscht den Inhalt der Tabelle "tbl_Files" CurrentDb.Execute "DELETE * FROM tbl_Files;" ' zunächst Anzahl Dateien ermitteln lCount = VBEX_FileCount(strFolder, intSubfolder, strFilter, nBytes) If lCount = -1 Then MsgBox "Keine Dateien enthalten, keine CD eingelegt oder Laufwerk nicht bereit." & vbNewLine & _ "Bitte legen Sie eine CD ein", vbCritical + vbOKOnly, "Fehler..." Exit Sub Else ' Array dimensionieren ReDim sFiles(lCount) As String ' Dateinamen ermitteln lCount = VBEX_FileList(strFolder, intSubfolder, strFilter, sFiles(), nBytes) 'Neuen Inhalt in die Tabelle übertragen... Set db = CurrentDb() Set rs = db.OpenRecordset("tbl_Files", dbOpenDynaset) DoCmd.Echo False, "Bitte warten..., die Tabelle 'Files' wird mit Daten gefüllt" For Each varElement In sFiles() rs.AddNew rs("Datei") = strFolder & varElement rs("Dateigrösse") = FileLen(strFolder & varElement) rs("Dateidatum") = FileDateTime(strFolder & varElement) If GetAttr(strFolder & varElement) And vbReadOnly Then rs("ReadOnly") = -1 If GetAttr(strFolder & varElement) And vbHidden Then rs("Hidden") = -1 If GetAttr(strFolder & varElement) And vbSystem Then rs("System") = -1 If GetAttr(strFolder & varElement) And vbArchive Then rs("Archiv") = -1 If GetAttr(strFolder & varElement) And 2048 Then rs("Komprimiert") = -1 rs.Update DoEvents Next End If DoCmd.Echo True MsgBox "Es wurden " & lCount + 1 & " Dateien eingelesen.", vbInformation + vbOKOnly, "Erfolg" rs.Close db.Close End Sub
Folgende Werte werden ermittelt und in die DB geschrieben: 1. kompletter Pfad und Dateiname
2. Dateigrösse in Bytes
3. Dateidatum
4. Die Attribute "ReadOnly", "Versteckt", "System", "Archiv" und "Komprimiert"
Im Formular wird oben als erstes ein Verzeichnis gewählt:
Im nächsten Schritt wird in der Optionsgruppe fesgelegt ob nur das angegebene Verzeichnis einlesen wird oder einschließlich vorhandener Unterverzeichnisse.
Dann erfolgt die Eingabe des Filters.
Bei Nichteingabe wird der Standardwert "*.*" gesetzt.
Es sind aber ein paar Dinge zubeachten die vom Standard der Wildcards abweichen:
Mögliche Eingaben wären z.B.:
*.* ist der Standarwert und liest alle Dateien ein
*.zip würde alle Zip-Dateien einlesen
test*.xls würde alle Excel-Dateien einlesen, die mit test.. beginnen.
?est*.xls würde alle Excel-Dateien einlesen, die mit est.. beginnen, z.B. test..., pest...
Nicht gelesen würde aber ppest... hier müsste ??est*.xls gesetzt werden.
*.md* würde alle Access Dateien, mdb, mda, mde usw. einlesen
Mit einem Klick auf den Button "Dateien Einlesen" erfolgt das Einlesen.
Im Listenfeld erfolgt dann die Ausgabe des Ergebnisses:
Die Spaltenbreite passt sich automatisch dem breitesten Eintrag an
Mit einem Klick auf den Spaltenkopf lässt sich jede Spalte sortieren.
Nur für 32Bit Office Versionen
Einlesen von Dateien, mit oder ohne Unterverzeichnissen und Filterfunktion
in eine MS-Access Datenbank
ab A00
Ähnliche Artikel
Weiterlesen...