Regelmäßiger Datenimport realisieren
Importieren Sie regelmäßig Daten, z.B. von externen Mitarbeitern, so müssen Sie diese i.d.R. zuerst aufbereiten, d.h. mit dem vorhandenem Datenstamm abgleichen. Dazu empfiehlt sich die Daten in eine separate Hilfstabelle zu importieren, diese dann zu bearbeiten und dann erst zu den Stammdaten hinzuzufügen. Sie werden aber bald feststellen, dass dieses ständige importieren und wieder leeren der Hilfstabelle die Anwendung bzw. das Backend schnell anwachsen lässt.
D.H. der Administrator oder sonstig Verantwortliche muss regelmäßig das Backend anfassen und Komprimieren. Dabei muss er peinlich genau darauf achten, dass alle Mitarbeiter ihre Anwendung geschlossen halten. Eigentlich ein Unding, und bei einem 7×24 Stunden Betrieb sogut wie unmöglich.
Die Lösung aus der Misere ist, das Importieren und Aufbereiten außerhalb des Backends zu tätigen und dann erst die aufbereiteten Daten in das Backend einfügen, und das ganze soll natürlich auch automatisiert ablaufen. Dazu ist folgender Ablauf sinnvoll:
- temporäre Datenbank im Ordner des Backends erstellen
- Tabelle in temporärer Datenbank erstellen
- Daten in Tabelle schreiben
- Daten aufbereiten
- Daten in das Arbeits-Backend übernehmen
Beginnen wir mit der Funktion für das erstellen der temporären Datenbank und Tabelle. Das geschieht, indem ein Workspace-Objekt definiert wird, auf das die Methode CreateDatabase angewendet wird. Dessen Ergebnis wird dann an eine Database-Variable zugewiesen:
Function CreateNewDB(dbNam As String, TabNam As String, Fields As String) As Database Dim wrkDefault As DAO.Workspace Dim dbNeu As DAO.Database ' Standardarbeitsbereich bestimmen. Set wrkDefault = DBEngine.Workspaces(0) 'wenn Datenbank bereits vorhanden, dann löschen If Dir(CurrentProject.Path & "\" & dbNam & ".mdb") <> "" Then Kill CurrentProject.Path & "\" & dbNam & ".mdb" End If 'neue Datenbank erstellen Set dbNew = wrkDefault.CreateDatabase(CurrentProject.Path & "\" & _ dbNam & ".mdb", dbLangGeneral, dbEncrypt) 'Tabelle erstellen dbNew.Execute "CREATE TABLE " & TabNam & " (" & Fields & ")" 'Rückgabewert zuweisen Set CreateNewDB = dbNeu End Function
Übergabeparameter sind der Datenbankname, Tabellennamen und die Feldliste incl. Datentyps. Wie man sieht, wird eine bereits vorhandene Tabelle gelöscht, also Vorsicht! bei der Angabe der Tabelle. Vieleicht ist es auch besser die Temporäre Datenbank in einem Unterverzeichnis anzulegen, also so:
Set dbNew = wrkDefault.CreateDatabase(CurrentProject.Path & „\Temp\“ & _
dbNam & „.mdb“, dbLangGeneral, dbEncrypt)
Der Aufruf der Funktion sieht z.B. so aus:
Dim dbTemp AS DAO.Database Dim rsTemp AS DAO.Database Dim Fieldlist AS String Dim ExcelApp As Object Fieldlist = "mName String, adresse String, ort String, geburtstag Date" Set dbTemp = CreateNewDB("importDB", "importTab", Fieldlist) 'Datenimport aus ext. Quelle, z.B. Excel Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Workbooks.Open FileName:=AMZDatei, ReadOnly:=True With ExcelApp.ActiveWorkbook.Worksheets(1) For i = 1 To .UsedRange.rows.Count 'Import der Inhalte Next i End With Set rsTemp = dbTemp.OpenRecordset("Select * from importTab") Do until rsTemp.EOF 'Aufbereitung der Daten Loop 'Übernahme in Arbeitsbackend Currentdb.Execute "INSERT INTO Tabelle SELECT * FROM importTab"
Zum Schluss bleiben noch die üblichen Aufräumarbeiten übrig, auf die man nicht verzichten sollte:
rsTemp.close Set rsTemp = Nothing Set dbtemp = Nothing Set ExcelApp = Nothing
Die Temporäre Datenbank samt Tabelle braucht nicht unbedingt gelöscht werden, dies wird ja beim nächsten Import erledigt. Wichtig ist noch, dass ihr eine Fehlerbehandlung einbaut, um zu verhindern dass eventuell unvollständige oder fehlerhafte Daten in das Arbeitsbackend importiert werden. Der Vorgang des Aufbereiten der Daten nimmt i.d.R. eine gewisse Zeit in Anspruch, am besten ihr zeigt dem User die Sanduhr, damit er beruhigt ist und weiss die Anwendung sich nicht aufgehängt hat. Auch eine Progressbar, die das Fortschreiten der Bearbeitung anzeigt ist in so einem Falle hilfreich.
AV 2008