- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:
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.
