Suche auf
Fit-for-Access.de

Wie Sie bei Access die Beschränkungen des „Dir“-Befehls umgehen

Viele Entwickler nutzen eine Routine wie die folgende aus Access_aktuell, um automatisch Sicherungskopien von allen Datenbanken anzulegen, die noch nicht im Zielverzeichnis vorhanden sind:

strPath = "Z:\Test\"
strDatsi = "Z:\Datsi\"
strFName = Dir$
(strPath & "*.mdb")
While strFName<> ""
DoEvents
If Dir$(strDatsi & strFName)
= "" Then
FileCopy strPath & strFName,
strDatsi & strFName
End if
strFName = Dir$()
Wend


Die Prozedur funktioniert jedoch immer nur bis zur ersten Datenbank, die sich nicht im Zielverzeichnis befindet; danach wird das Fehlen weiterer zu sichernder Datenbanken nicht mehr erkannt.

Ursache des Problems ist die Tatsache, dass „Dir$()“ nicht verschachtelt eingesetzt werden kann, da der Aufruf ohne Parameter (strFName = Dir$()) sich immer am letzten Aufruf mit Parameter (If Dir$(strDatsi & strFName) = „“ Then...) orientiert und so das ursprüngliche Ziel (strFName = Dir$(strPath & „*.mdb“)) „vergisst“.

Access_aktuell-Tipp: Abhilfe schaffen Sie durch eine Alternative, die für die Abfrage von Dateien oder Verzeichnissen zum Einsatz kommt: Die Microsoft Scripting Runtime Library. Diese Systemerweiterung stellt Objekte bereit, über die Sie unter anderem auf das Dateisystem zugreifen und so Dateien und Verzeichnisse auf Vorhandensein prüfen können:

  1. Öffnen Sie ein VBA-Modul im Entwurfsmodus.

  2. Wählen Sie das Menü EXTRAS > VERWEISE an, setzen Sie eine Referenz auf „Microsoft Scripting Runtime“ und übernehmen Sie die Änderungen mit OK.

  3. Geben Sie im Modul folgende Funktion ein:

    Function CheckFileOrDirExists
    (strName As String) As Boolean
    Dim fso As Scripting.
    FileSystemObject
    Set fso = CreateObject
    ("Scripting.FileSystemObject")
    If Right$(strName, 1)
    = "" Then ‘Verzeichnis
    CheckFileOrDirExists
    = fso.FolderExists(strName)
    Else
    CheckFileOrDirExists
    = fso.FileExists(strName)
    End If
    End Function


  4. Speichern Sie die Änderungen.


In Zukunft können Sie diese Funktion nun ohne Rücksicht auf einen eventuellen Einsatz der „Dir$()“-Funktion nutzen, um das Vorhandensein von Dateien und Verzeichnissen z. B. wie folgt zu prüfen:

If Not CheckFileOrDirExists
(strDatsi & strFName) Then
FileCopy strPath & strFName,
strDatsi & strFName
End if


Sie übergeben der Funktion also entweder den Namen der zu prüfenden Datei samt Laufwerk oder den Pfad des Verzeichnisses mit abschließendem Backslash. An einem eventuell vorhandenen abschließenden Backslash erkennt die Funktion, ob ein Verzeichnis oder eine Datei zu prüfen ist. Abhängig davon wird dann entweder die Funktion „FolderExists()“ oder die Funktion „FileExists()“ der FileSystemObject-Bibliothek aufgerufen.

Aus: Access_aktuell – Jetzt gratis testen!


Wie finden Sie diesen Beitrag? Durchschnittliche Bewertung
Bewertung
bei 0 Bewertungen
Mit der Abgabe einer Bewertung wird ausschließlich der Wert der Bewertung gespeichert. Ein Rückschluss auf die Identität bestimmter Personen ist damit nicht möglich!


 
Anzeige
PowerPoint aktuellPowerPoint aktuell
"Klauen" Sie sich jetzt ganz einfach die besten Präsentations-Ideen - kostenlos

Mit PowerPoint wird so viel Schindluder getrieben - da stechen Sie mit einer professionellen und ansprechenden Präsentation aus der Masse heraus. Wie Sie die jetzt in Rekordzeit erstellen und trotzdem richtig Eindruck machen, verrät PowerPoint-Experte Dieter Schiecke Ihnen völlig kostenlos, wenn Sie hier klicken.

Lesen Sie hier mehr über PowerPoint aktuell


Diese aktuellen News & Tipps könnten Sie interessieren:

    Leider wurde kein Beitrag gefunden.
Hier finden Sie eine Übersicht aller Beiträge

Ihr kostenloser E-Mail-Newsletter
von Fit-for-Access.de

Ihre E-Mail-Adresse: