BEISPIEL
Kapitel 6: DAO-Programmierung
Alle weiteren Aktionen in diesem Arbeitsbereich werden mit den Rechten des Users Anton ausgeführt
(beim Anlegen von Tabellen und Abfragen wird Anton zum Owner dieser Objekte).
Datenbank anlegen und öffnen
Für manche mag die Frage nach dem Anlegen einer Datenbank vielleicht unbegründet erscheinen, wird das
Access-Programm doch durch eine Datenbank gekapselt. An dieser Stelle sei deshalb noch einmal darauf
hingewiesen, dass Sie Access-Programm und Access-Datenbank durchaus in zwei verschiedenen Dateien
ablegen können.
Ausgangspunkt für das Erstellen einer Access-Datenbank ist das Workspace-Objekt. Mit der Methode
CreateDatabase legen Sie eine leere Access-Datenbank an. Das nachfolgende Listing zeigt, wie es geht.
Anlegen einer Datenbank:
Dim ws As Workspace ' Objektvariable vom Typ Workspace anlegen
Dim db As Database ' Objektvariable vom Typ Database anlegen
' Zuweisen der aktuellen Arbeitsumgebung ...
Set ws = DBEngine.Workspaces(0)
' Erstellen der eigentlichen Datei ...
Set db = ws.CreateDatabase("c:\test.accdb", dbLangGeneral)
' Die neue Datenbank wird geschlossen ...
db.Close
Wie Sie dem Beispiel entnehmen können, wird nach Initialisieren des Workspace-Objektes die Methode
CreateDatabase aufgerufen. Übergabeparameter ist neben dem Dateinamen die interne Sortierreihenfolge
(dbLangGeneral) und das Datenbankformat (dbVersion30). Während Sie an der Sortierreihenfolge wahr-
scheinlich keine Änderungen vornehmen (es sei denn, Sie entwickeln Datenbanken, die auch im Ausland
laufen sollen), ist das Datenbankformat ein wichtiger Parameter. Neben der Einstellung, ob die Datenbank
verschlüsselt werden soll (optional), können Sie auch die älteren Access-Formate erzeugen. Diese Möglich-
keit dürfte vor allem für den Datenaustausch interessant sein, unterstützt doch nicht jedes Programm die
jeweils neueste Access-Version. Welche Konstanten Sie verwenden können, zeigt die Tabelle 6.1 (beachten
Sie, dass Versionskonstanten nicht kombiniert werden dürfen).
Konstante Bedeutung
dbEncrypt Erstellt eine verschlüsselte Datenbank.
dbVersion10 Datenbanktyp Version 1.0
dbVersion11 Datenbanktyp Version 1.1
dbVersion20 Datenbanktyp Version 2.0
dbVersion30 Datenbanktyp Version 3.0 (kompatibel mit Version 3.5)
dbVersion120 Access 2007-Format
Tabelle 6.1 Werte für den Parameter Option
296
BEISPIEL
BEISPIEL
BEISPIEL
Die beiden Anweisungen stehen für korrekte Parameter:
dbVersion30 + dbEncrypt
dbVersion11 + dbEncrypt
Das Verschlüsseln der Datenbank bedeutet jedoch noch lange nicht, dass die Datenbank auch vor uner-
laubten Zugriffen geschützt ist. Dazu werden wir später das abgeleitete Database-Objekt verwenden. Bevor
es so weit ist, beachten Sie folgende Fehlermöglichkeit: Existiert die Datenbank bereits, tritt ein Laufzeit-
fehler auf (3204), den Sie über eine Fehlerbehandlungsroutine abfangen müssen.
Anlegen einer Access 2003-Datenbank:
On Error Goto Dateifehler
Dim ws As Workspace
Dim db As Database
Set ws = DBEngine.Workspaces(0)
Set db = ws.CreateDatabase("c:\test.mdb", dbLangGeneral, dbVersion30)
db.Close
Exit Sub
Dateifehler:
MsgBox Err.Description,16,"Problem"
Exit Sub
Resume Next
Noch besser wäre allerdings ein vorhergehender Test, ob die Datei bereits vorhanden ist. Allerdings werden
Sie an dieser Stelle keine Unterstützung von Access bekommen, eine fertige Funktion existiert leider nicht.
Die folgende Funktion zeigt, wie es trotzdem geht:
Function FileExist (dateiname As String) As Boolean
On Error GoTo fehler:
FileExist = Dir$(dateiname) <> ""
Exit Function
fehler:
FileExist = False
Resume Next
End Function
Mit der neuen Funktion FileExist können wir eine etwas speziellere Fehlerbehandlung programmieren. Ziel
ist eine geöffnete Datenbank, egal ob sie schon existiert oder nicht.
Die folgende Sequenz dient zum Anlegen bzw. Öffnen einer Datenbank:
On Error GoTo openFehler
Dim ws As Workspace
Dim db As Database
Dim datenbank As String
297
Grundlegende Arbeitstechniken
Kapitel 6: DAO-Programmierung
datenbank = "c:\test.accdb"
Set ws = DBEngine.Workspaces(0)
If Not FileExist(datenbank) Then
MsgBox "Datenbank wird angelegt!", 64, "Information"
Set db = ws.CreateDatabase(datenbank, dbLangGeneral)
Else
Set db = ws.OpenDatabase(datenbank, False, False)
End If
...
Exit Sub
openFehler:
MsgBox "Datenbank konnte nicht geöffnet werden! " & Err.Description, 16, "Problem"
Exit Sub
Resume Next
Sollte die Datenbank noch nicht existieren, wird sie angelegt, andernfalls wird sie geöffnet (OpenDatabase-
Methode). In jedem Fall ist nach der Ausführung der If-Then-Else-Bedingung die Database-Variable (db)
initialisiert. Kommt es zu einem Fehler, wenn beispielsweise die Datenbank exklusiv gesperrt oder be-
schädigt ist, wird die aktuelle Prozedur nach einer Fehlermeldung abgebrochen.
Damit wären wir auch schon beim Öffnen von existierenden Datenbanken angekommen.
Set db = ws.OpenDatabase( dbName [, exclusive [, readOnly]] )
Parameter Wert Bedeutung
dbName Dateiname Der Pfad und das Verzeichnis der Datenbank.
Exclusive True/False Mit True wird die Datenbank exklusiv für einen Nutzer geöffnet. Andere Nutzer haben keinen
Zugriff auf die gesamte Datenbank. Diese Option sollten Sie nur verwenden, wenn Sie Änderungen
an Tabellen vornehmen wollen.
readOnly True/False Die Datenbank wird schreibgeschützt geöffnet, spätere Zugriffe mit den Methoden Append oder
Edit führen zu einem Laufzeitfehler.
Tabelle 6.2 Parameter zum Öffnen einer Datenbank
Eine weitere Möglichkeit zum Erstellen eines Database-Objekts stellt die folgende Anweisungsfolge dar:
Dim db As Database
Set db = CurrentDb()
Diese erstellt eine neue Instanz der aktuellen Datenbank.
Die Syntax:
Set db = DBEngine.Workspaces(0).Databases(0)
' bzw.
Set db = DBEngine(0)(0)
sollten Sie nicht mehr verwenden, da in diesen Fällen keine neue Instanz angelegt, sondern mit der aktu-
ellen Datenbank-Instanz gearbeitet wird. Dies kann in Multiuser-Umgebungen zu Problemen führen.
298

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.