Regelmäßiger Datenimport realisieren

By , 26. September 2008

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

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy