Dateien bequem importieren

In einer Stammdaten-Tabelle hinterlege ich zu jedem Datensatz den Namen einer zu importierenden ASCII-Datei. Access 97 soll feststellen, ob auf einer Diskette eine solche Datei existiert und im positiven Fall diese Datei mit dem Namen IMP in einen Ordner IMPORT kopieren. Anderenfalls soll eine entsprechende Fehlermeldung erscheinen. Wie geht das?

Mit Hilfe von VBA und der Funktion ╗existFile()½ stellt Access 97 fest, ob die Datei tatsΣchlich vorhanden ist. Die Funktion ist vom Typ ╗Boolean½ und gibt ╗True½ zurⁿck, wenn Access die Datei finden sollte. ╗Exist-File()½ nutzt den Befehl ╗Dir½, der den Namen einer Datei von ihrem Pfad trennt. Gibt der Befehl keinen Namen zurⁿck, existiert die Datei nicht.

Public Function existFile(file As String) As Boolean
On Error GoTo Err_existFile

   If Dir(file) = ää Then
      existFile = False
   Else
      existFile = True
   End If

Exit_existFile:
   Exit Function

Err_existFile:
   MsgBox Err.Description
   Resume Exit_existFile

End Function


Au▀erdem ben÷tigen Sie eine zweite Prozedur, die alle DatensΣtze einer Stammdaten-Tabelle liest und die Dateinamen auf der Diskette kopiert. Im abgedruckten Beispiel handelt es sich um die Prozedur ╗checkFiles()½. Sie greift auf eine Tabelle ╗Stammdaten½ zu; die Dateinamen finden sich im Feld ╗Dateiname½. Die Listings finden Sie als Textdatei auf der Heft-CD: CHIP-Code DATPRUEF

Public Sub checkFiles()
   Dim Datenbank As Database
   Dim rstDateinamen As Recordset
   Dim datei As String
   Dim dateiGefunden As Boolean

   dateiGefunden = False

On Error GoTo Err_checkFiles
   Set Datenbank = CurrentDb
   Set rstDateinamen = Datenbank.OpenRecordset("Stammdaten")

   rstDateinamen.MoveFirst

   Do Until rstDateinamen.EOF
      datei ="A:\ " & rstDateinamen!Dateiname
      If existFile(datei) = True Then
        FileCopy datei, "C:\import\ imp"
         dateiGefunden = True
         æ An dieser Stelle bauen Sie die Importroutine ein.
      End If
      rstDateinamen.MoveNext
   Loop

   rstDateinamen.Close

   If dateiGefunden = False Then
      MsgBox "Es wurde keine Datei gefunden!"
   End If

Exit_checkFiles:
   Exit Sub

Err_checkFiles:
   MsgBox Err.Description
   Resume Exit_checkFiles

End Sub


Das Listing definiert ein ╗Recordset½ und verbindet es mit der Tabelle ╗Stammdaten½. Mit der Methode ╗MoveFirst½ des Recordsets steuert die Funktion den ersten Datensatz der Tabelle an. Daraufhin folgt eine ╗Do-Until½-Schleife, die alle DatensΣtze abarbeitet. Die Eigenschaft ╗EOF½ gibt das Ende der Tabelle an, und die Methode ╗MoveNext½ rⁿckt vor zum nΣchsten Datensatz, bevor Access die Schleife ein weiteres Mal durchlΣuft. In der Schleife prⁿft die Funktion ╗existFile()½, ob die im aktuellen Datensatz angegebene Datei auf der Diskette existiert und kopiert die Datei mit ╗FileCopy½ in den Ordner C:\ IMPORT. Gleichzeitig benennt sie diese um.
Um festzustellen, ob wΣhrend der Schleife ⁿberhaupt eine Datei gefunden wurde, nutzt das Listing ein Flag namens ╗dateiGefunden½ des Typs ╗Boolean½. Dieses Flag belegt es vor der Schleife mit ╗False½ und setzt es im positiven Fall auf ╗True½. So kann es nach Durchlaufen der Schleife feststellen, ob es eine Fehlermeldung ausgeben muss.
Die Importroutine bauen Sie an der im Code gekennzeichneten Stelle ein, direkt nach dem ╗FileCopy½-Befehl. So importiert Access eine gefundene Datei, bevor die Funktion auf der Diskette nach einem weiteren File sucht.