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: hCHIP-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 Import? routine 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.