DatenbankManufaktur

Dateien auflisten mit einem temporären Recordset

Beispieldatenbank zum Einlesen, Anzeigen, Sortieren und Filtern von Ordnerinhalten mit einem temporären ADO-Recordset.

Als ich die Tippdatenbank Bilder überarbeitet hatte, habe ich mich an eine Technik erinnert, mit der sich die Beschränkung auf eine bestimmte Zeichenanzahl umgehen lässt: temporäre (teilweise auch virtuell genannte) Recordsets. Dabei wird (nur im Hauptspeicher) eine 'Tabelle' definiert und befüllt, die dann (solange die Datenbank geöffnet ist und kein Fehler auftritt) wie eine richtige Tabelle benutzt werden kann.

In meiner Beispieldatenbank können die Inhalte mit einem Klick auf die Spaltenüberschriften sortiert werden oder über das Suchen-Feld gefiltert werden, ohne die Daten erneut eingelesen zu müssen. Ich habe noch einen Ordner-Auswahldialog und die Anzeige der Dateianzahl eingebaut. Und mit einem Klick auf die entsprechende Zeile werden die Dateien in Ihrem jeweiligen Standardprogramm geöffnet.

So geht's

Mit ADO wird zunächst ein Recordset definiert, ähnlich, wie man es auch bei Erstellung einer echten Tabelle tun würde:

Public rstTemp As ADODB.Recordset

...

' Temporäres Recordset definieren
   Set rstTemp = New ADODB.Recordset
   With rstTemp
      .Fields.Append "FileName", adVarChar, 255
      .Fields.Append "FileExt", adVarChar, 10
      .Fields.Append "FileDate", adDate
      .Fields.Append "FileSize", adBigInt
      .CursorType = adOpenStatic
      .CursorLocation = adUseClient
      .LockType = adLockOptimistic
      .Open
   End With

Dann wird das Recordset mit Daten befüllt, hier den Dateien eines Ordners:

' Temporäres Recordset füllen
   sDatei = Dir(Me!txtOrdner, vbDirectory)
   Do While sDatei <> vbNullString
      ' keine Ordner anzeigen
      If sDatei <> "." And sDatei <> ".." And (Not GetAttr(Me!txtOrdner & sDatei) And vbDirectory) Then
         With rstTemp
            .AddNew
            .Fields("FileName").Value = sDatei
            .Fields("FileExt") = Mid(sDatei, InStrRev(sDatei, ".", -1, vbTextCompare) + 1)
            .Fields("FileSize") = FileLen(Me!txtOrdner & sDatei)
            .Fields("FileDate") = FileDateTime(Me!txtOrdner & sDatei)
            .Update
            DoEvents
         End With
      End If
      sDatei = Dir
   Loop

Jetzt kann man dieses Recordset an das Formular binden und damit die Daten anzeigen lassen:

' Formular an das temporäre Recordset binden
   Set Me.Recordset = rstTemp

Und weil es sich um ein Recordset handelt, kann man es natürlich auch filtern und sortieren, ohne die Daten jedesmal erneut einlesen zu müssen.

' Dateien nach Datum auf-/absteigend sortieren
   If rstTemp.Sort Like "*FileDate ASC*" Then
      rstTemp.Sort = "FileDate DESC, FileName ASC"
   Else
      rstTemp.Sort = "FileDate ASC, FileName ASC"
   End If

' Alten Filter löschen, neuen setzen und an das Formular binden
   rstTemp.Filter = ""
   
   If Nz(Me!txtSuche, "") <> "" Then
      rstTemp.Filter = " FileName LIKE '*" & Me!txtSuche & "*' "
   End If
   
   Set Me.Recordset = rstTemp

Auf diese Art kann man sich leicht einen einfachen Datei-Explorer für seine Anwendung bauen, um die Daten eines Ordners aufzulisten.

Download

Temporäre Recordsets für Access 2016 (und neuer)
(Datei: rstTemp.zip, ca. 70 KB)

Bitte denken Sie daran, dass Sie die Datei(en) nach dem Download Zulassen müssen.
Hier steht, warum und wie.