Einrichtung eines BDE-Alias für den Zugriff auf Access-Datenbanken
von Roland Wingerter

 

IN DEN NEWSGROUPS zu dBASE wird immer wieder danach gefragt, wie man einen BDE-Alias für den Zugriff auf Access-Tabellen einrichtet. Die Unsicherheit besteht deshalb, weil es verschiedene Versionen von Microsoft Access gibt, die ein unterschiedliches Vorgehen erfordern. Trotzdem ist im Grunde alles ganz einfach. Lassen Sie sich nicht von der Länge dieses Artikels abschrecken. Lesen Sie nur den Teil, der Sie interessiert: Am meisten können Sie von diesem Artikel profitieren, wenn Sie die Anleitungen gleich ausprobieren. Sie können dies mit den Access-Beispieldaten oder mit eigenen Daten tun. Wenn Sie keine geeigneten Daten zur Verfügung haben können Sie die in diesem Artikel erwähnten Datenbanken im Format Access 97 und Access 2000 aus dem Internet herunterladen und auf ihrer Festplatte entpacken.

Bemerkung: Das Archiv mit dem Namen TeachYourselfSQLData.zip finden Sie unter http://www.forta.com/books/0672316641/ (auf der Seite unten). Es enthält Beispieldatenbanken zu dem Buch “Teach Yourself SQL in 10 minutes”, das übrigens trotz des albernen Titels uneingeschränkt zu empfehlen ist.

Manuelle Einrichtung für Access 95/97

Zur Einrichtung des Datenbank-Alias starten wir die BDE-Verwaltung und gehen vor wie im Folgenden beschrieben. Es ist das gleiche Vorgehen wie beim Anlegen eines Alias für eine dBASE-Datenbank, nur dass im ersten Dialogfenster als Treiber MSACCESS ausgewählt werden muss.

  1. Aus dem Hauptmenü die Option Objekt|Neu... wählen.

  2. Es erscheint das Dialogfenster Neuer Datenbank-Alias (Abbildung 1). Als Treiber MSACCESS auswählen und mit der Schaltfläche OK bestätigen.


    Abbildung 1: Auswahl des Treibers für Zugriff auf Access-Datenbank

  3. Anschließend erscheint im linken Fenster (Datenbanken) den neu angelegten Datenbank-Alias, der standardmäßig MSACCESS1 heißt. Den Namen wie gewünscht ändern, z.B. in “Access_97”.

  4. Im rechten Fenster (Definition) bei der Eigenschaft DATABASE NAME auf die zugehörige Schaltfläche rechts außen klicken. Es erscheint ein Dialogfenster zur Auswahl des Laufwerks, des Verzeichnisses und des Namens der .mdb-Datei, auf die zugegriffen werden soll (Abbildung 2). Nach Auswahl der gewünschten *.mdb-Datei das Dialogfenster mit der Schaltfläche Öffnen[!] schließen.


    Abbildung 2: Auswahl der *.mdb-Datei

  5. Bis hierher ist das Vorgehen für Access 95 und Access 97 identisch. Abschließend müssen wir den für die jeweilige Access-Version passenden Treiber einstellen. Dazu gehen wir im linken Fenster zu dem Reiter Konfiguration und klicken dann auf das Pluszeichen vor Treiber und Native, um die in der BDE mitgelieferten Treiber anzuzeigen. Wir gehen zu dem Treiber MSACCESS und dann im rechten Fenster (Konfiguration) zu der Eigenschaft DLL32. Mit dem Pfeil können wir den gewünschten Treiber auswählen: Vorgabe ist IDDA3532.DLL für Access 97 und Jet Engine 3.5, IDDAO32.DLL für Access 95 und Jet Engine 3.0. (Vgl. Hilfe zur BDE-Verwaltung, die Sie mit F1 erhalten).

  6. Wenn wir die BDE-Verwaltung über das Hauptmenü Objekt|Beenden schließen werden wir gefragt, ob wir die durchgeführten Änderungen speichern wollen. Diese Frage beantworten wir mit Ja.

  7. Nach dem Anlegen eines neuen BDE-Alias muss dBASE neu gestartet werden,  damit auf die neu eingerichtete Datenbank zugegriffen werden kann.

Achtung: Leider scheint es nicht möglich, die BDE-Einstellungen so vorzunehmen, dass sowohl auf Access-95-Datenbanken als auch auf Datenbanken im Format Access 97 zugegriffen werden kann. Das hängt offensichtlich damit zusammen, dass die in DLL32 angegebene Einstellung für alle Datenbanken gilt, die den Treiber MSACCESS verwenden. Für die Praxis dürfte das verschmerzbar sein, da das ältere Format wohl immer seltener verwendet wird.

Manuelle Einrichtung Access 2000 (und neuer)

Voraussetzung: ODBC-Treiber für Microsoft Access

Für den Zugriff auf Access 2000 benötigen wir die Microsoft Database Access Components (abgekürzt “MDAC”), weil mit Access 2000 ein neues Datenformat eingeführt wurde, das der in der BDE mitgelieferte Treiber MSACCESS nicht versteht. Meines Wissens ist MDAC beim Betriebssystem Windows XP standardmäßig enthalten, ansonsten muss MDAC ggf. von der Microsoft Webseite heruntergeladen und installiert werden. Wenn eine neuere Access-Version auf dem Rechner installiert ist, müsste MDAC ebenfalls bereits vorhanden sein.

ODBC-Datenquelle einrichten

BDE-Administrator starten, dann im Menü Objekt|ODBC-Verwaltung auswählen.

  1. Im Dialog ODBC-Datenquellen-Administrator auf Register System-DSN klicken.

     Auf Schaltfläche Hinzufügen klicken, um eine System-DSN hinzuzufügen.

  2. Im Dialog Neue Datenquelle erstellen den Treiber “Microsoft Access-Treiber (*.mdb)” auswählen, dann auf Fertig stellen klicken.

  3. Im folgenden Dialog ODBC Microsoft Access Setup:

  4. In das Feld Datenquellenname wird der Name eingegeben, der später auch als Name für den BDE-Alias verwendet wird, z.B. “Access_ODBC”. Der Namen sollte keine Leerzeichen enthalten, auch keine Sonderzeichen außer Unterstrich. (Ich habe auch einen Namen mit Leerzeichen eingegeben und alles schien zu funktionieren, nur weiß man nicht wie lange.)

  5. In das Feld Beschreibung können Sie einen erläuternden Text eingeben, z.B. “Zugriff auf Access-Datenbank mit ODBC”.

  6. Im Rechteck Datenbank auf die Schaltfläche Auswählen klicken. Es erscheint der Dialog Datenbank auswählen. Im rechten Fenster zu dem Verzeichnis navigieren, in dem sich die Access-Datenbank (*.mdb) befindet. Dann im linken Fenster Doppelklick auf die gewünschte *.mdb-Datei, um sie in das Eingabefeld zu übernehmen. Anschließend den Dialog mit der Schaltfläche OK beenden.

  7. Nun sind wir wieder zurück im Dialog ODBC Microsoft Access Setup. Im Rechteck Datenbank müsste jetzt der Pfad und Name der gewünschten Datenbank stehen (ansonsten Schritt 6. wiederholen). Dialog mit OK beenden.

  8. Jetzt sind wir zurück im Dialogfenster ODBC-Datenquellen-Administrator (ODBC Data Source Administrator). Wenn alles geklappt hat, erscheint der Name unserer neu eingerichteten Datenquelle in der Liste Systemdatenquellen. Dialogfenster mit OK schließen.

  9. Ggf. müssen wir die BDE-Verwaltung schließen, da diese die neu eingerichtete ODBC-Datenquelle erst nach Neustart erkennt.

Kürzer geht es, wenn wir die ODBC-Verwaltung direkt aufrufen, ohne den Umweg über den BDE-Administrator. Dann entfallen die Schritte 1 und 9. Die ODBC-Verwaltung findet man in Windows 2000 und Windows XP über Start | [Einstellungen] | Systemsteuerung | Verwaltung | Datenquellen (ODBC). Für den Aufruf aus dBASE kann man die Funktion RUN() verwenden:
 
 
run( true, "odbcad32.exe")
   

Konfiguration abschließen und speichern

  1. Die BDE-Verwaltung neu starten.

  2. Im linken Fenster die neue Datenbank (in unserem Beispiel: “Access_ODBC”) auswählen.
    Im rechten Fenster (Definition) Mausklick auf den Pfeil im Feld LANGDRIVER und den gewünschten Treiber (z.B. Access General) auswählen. Man kann den Treiber auch wieder löschen, es scheint jedoch notwendig, in der BDE-Verwaltung eine Änderung an der ODBC-Datenbank vorzunehmen und die Änderung zu speichern (z.B. Rechtsklick und im Kontextmenü Übernehmen auswählen), damit die Konfiguration gespeichert wird und anschließend die Datenbank nach Neustart von dBASE zur Verfügung steht.
Zugriff auf Access-Tabellen aus dBASE erproben

Um auszuprobieren, ob alles richtig funktioniert müssen wir dBASE PLUS neu starten.

  1. Im Regiezentrum auf Registerseite Tabellen klicken.

  2. Auf die Dropdown-Liste Aktuelles Verzeichnis: klicken und gewünschten Alias auswählen.

  3. In der Registerseite Tabellen werden jetzt die Tabellen der Datenbank angezeigt.

  4. Zum Öffnen Doppelklick auf eine Tabelle oder im Befehlsfenster USE <Tabelle> oder Select * from <Tabelle> eingeben.
Auch der Zugriff auf Access-Tabellen per Programm unterscheidet sich nicht vom Zugriff auf Tabellen im dBASE-Format.

Wenn die Tabelle sich nicht öffnen lässt (oder ein Passwort-Dialog erscheint) hat bei der Konfiguration etwas nicht geklappt. Lesen Sie den Abschnitt Problembehandlung.

Problembehandlung

Wenn beim Öffnen der Access-Datenbank ein Passwort-Dialog erscheint ist das nach meiner Erfahrung ein Hinweis darauf, dass die Konfiguration der ODBC-Datenquelle nicht korrekt bzw. unvollständig ist.

Öffnen Sie noch einmal den BDE-Administrator und dort die ODBC-Verwaltung (Menü Objekt|ODBC-Verwaltung), und gehen Sie zu der gewünschten Registerseite Benutzer-DSN bzw. System-DSN. Klicken Sie auf den Namen der Access-Datenbank (z.B. “Access_ODBC”), dann auf die Schaltfläche Konfigurieren. Das bringt Sie wieder zu dem Dialog ODBC Microsoft Access Setup.

Stellen Sie sicher, dass im Rechteck Datenbank der Name der Datenbank eingetragen ist. Wenn nicht, auf Button Auswählen und im Dialog Datenbank auswählen zu dem Verzeichnis navigieren, in dem sich die Access *.mdb-Datei befindet und die *.mdb-Datei auswählen. Dann auf OK klicken und ODBC-Verwaltung sowie BDE-Verwaltung schließen.

Manuelle Einrichtung mit dem Datenbank-Assistenten von dQuery

  1. Wir öffnen dQuery und starten den Datenbank-Assistenten (Database Connection Wizard) durch einen Klick auf das Datenbank-Icon.

  2. Im ersten Schritt übernehmen wir die Voreinstellung Create a Connection und klicken auf Next.

  3. Im folgenden Schritt können wir den gewünschten Datenbanktyp wählen. Zur Auswahl stehen u.a. Access 2000 (und neuer) sowie Access (ältere Versionen). Wir wählen Access 2000.

  4. Der Assistent fordert uns auf, einen Namen für den Datenbank-Alias einzugeben. Einen beliebigen Namen eingeben und auf die Schaltfläche Next klicken.

  5. Im nächsten Schritt stehen zwei Optionen zur Wahl: 1. Bestehende DSN verwenden 2. Neue DSN erstellen. Bei Option 1 können wir im nächsten Schritt eine vorhandene ODBC-Datenquelle auswählen. Es werden jedoch nur solche System-Datenquellen angezeigt, die den englischen Microsoft-Access-Treiber verwenden. Wir wollen aber eine neue Datenquelle erstellen und wählen deshalb die zweite Option.

  6. Auf der nächsten Seite können wir die gewünschte Datenbank auswählen.

  7. Wir beenden den Datenbank-Assistenten. Nun müsste im Regiezentrum auf der Registerseite Tabellen der neu eingerichtete BDE-Datenbankalias zur Verfügung stehen.
Wenn wir die ODBC-Verwaltung öffnen,  finden wir die neu eingerichteten ODBC-Datenquellen auf der Registerseite Benutzer-DSN. Der Datenbank-Assistent von dQuery bietet keine Option, eine System-DSN anzulegen.

Die Einrichtung eines BDE-Alias für ältere Access-Versionen ist analog, jedoch entfällt der Schritt 5.

Einrichtung per Programm

Beispiel: Alias für Access 97 einrichten

Hierfür können wir auf bdeAliasEx.cc aus der dBASE Users' Function Library (dUFLP) zurückgreifen.

Diese Klasse ist von bdeAlias.cc abgeleitet. Die dort enthaltene Methode createAlias() musste nur geringfügig modifiziert werden, damit sie auch für die Einrichtung eines Alias für Access 95/97 verwendet werden kann. Das folgende Beispiel zeigt die Verwendung. Um das Beispiel anzupassen, einfach den Alias-Namen und Pfad ändern. Bitte beachten, dass der Pfad den vollständigen Namen der Access-Datenbank einschließlich der Dateierweiterung (*.mdb) enthalten muss.
 
 
// Klasse laden
set procedure to :dUFLP:bdealiasEx.cc additive

// Objektinstanz erstellen
oBDE = new bdeAliasEx()

// Eigenschaften Name, Pfad und Treiber zuweisen
cAliasName = "Access_97_Beispiel"

// Pfad einschließlich Name der mdb.-Datei!
cPfad = "C:\Daten\Access\teachsql_97.mdb"
cTreiber = "MSACCESS"

// Klassenmethode aufrufen
lSuccess = oBDE.createAlias(cAliasName, cPfad, cTreiber)

   

Abbildung 3: Einrichtung eines BDE-Alias für den Zugriff auf Access 97.


Beispiel: Alias für Access 2000 einrichten

Hiefür benötigen wir das Programm odbc.prg von Andreas Beckhaus, das ebenfalls in der dUFLP enthalten ist. Das folgende Beispiel zeigt die Verwendung. Um das Beispiel anzupassen, einfach den Alias-Namen und Pfad ändern. Auch hier muss der Pfad den vollständigen Namen der Access-Datenbank (*.mdb) enthalten.
 
 
// BDE-Alias und ODBC-Eintrag für den Zugriff auf MS Access
// via ODBC erstellen.
// odbc.prg muss im aktuellen Pfad vorhanden sein
cAliasName  = "Access_ODBC"
cPfad = ["C:\Daten\Access\teachsql_2000.mdb"]
cTreiber  = "Microsoft Access-Treiber (*.mdb)"

lSuccess = odbc( cAliasname, cPfad, cTreiber)

   

Abbildung 4: Beispiel für den Aufruf des Programmes odbc.prg von Andreas Beckhaus.

FAQ zum Umgang mit Access-Datenbanken

Wie kann ich eine neue Access-Datenbank erstellen?

Access-Datenbanken verschiedener Formate können mit Hilfe der Microsoft ODBC-Verwaltung, auch ODBC-Datenquellen-Administrator genannt, erstellt werden. Access muss dafür nicht installiert sein. Die ODBC-Verwaltung kann aus dBASE aufgerufen werden mit dem Befehl:
 
 
t =  run(true,"odbcad32.exe")
   

Dann kann per Dialog im Register “System-DSN” eine Datenquelle erstellt und konfiguriert werden:

  1. Register System-DSN, Schaltfläche Hinzufügen.

  2. Im Dialogfenster Neue Datenquelle erstellen den gewünschten Treiber (z.B. “Microsoft Access-Treiber (*.mdb)”) auswählen und auf Fertig stellen klicken.

  3. In das Feld Datenquellenname den gewünschten Namen eingegeben, der später als Name für den BDE-Alias verwendet wird, z.B. “Access_ODBC_Neu”.

  4. Im Rechteck Datenbank auf die Schaltfläche Erstellen klicken.

  5. Es erscheint der Dialog Neue Datenbank. Gewünschtes Verzeichnis auswählen (ggf. vorher neues Verzeichnis anlegen, z.B. mit dem Windows Explorer) und den Namen der Datenbank eingeben, z.B. Neu.mdb.

  6. Im rechten Teil des Fensters können wir das Format der zu erstellenden Access-Datenbank festlegen. Die Tabelle zeigt die unterschiedlichen Formate und Versionen, wie sie der OLH zu entnehmen sind.

  7. Dialogfenster mit Schaltfläche OK schließen. Das erfolgreiche Anlegen einer neuen ODBC-Datenquelle wird durch eine Meldung bestätigt.

  8. Alle offenen Dialogfenster schließen.
Nach dem Neustart von dBASE steht die neue ODBC-Datenquelle zur Verfügung.
 
  Format  der Access-Datenbank   Access-Version   Version der Jet-Engine   BDE-Treiber
  Version 2.x   Access 95   3.0   IDDAO32.DLL
  Version 3.x   Access 97   3.x   IDDA3532.DLL
  Version 4.x   Access 2000   4.x   —

Tabelle 1: Formate für Access-Datenbanken


Wie kann ich einen Alias-Eintrag für eine ODBC-Datenquelle  aus der BDE löschen?

Ein BDE-Alias, der einen ODBC-Treiber verwendet kann nur in der ODBC-Verwaltung gelöscht werden. Alle in der ODBC-Verwaltung durchgeführten Änderungen (auch Hinzufügen, Entfernen von Einträgen) werden von der BDE-Verwaltung beim nächsten Neustart automatisch übernommen.

Wie kann ich eine dBase-Tabelle nach MS Access konvertieren?

Voraussetzung ist, dass ein BDE-Alias für die Access-Datenbank eingerichtet ist. Dann kann die dBASE-Tabelle in die Access-Datenbank kopiert werden.
 
 
close databases
open database dbasesamples
open database myaccess
set database to dbasesamples
use :dbasesamples:fish
copy to :myaccess:fish
   

Abbildung 5: dBASE-Tabelle nach Access kopieren (Beispiel in xdml)

Wie kann ich Tabellen aus einer Access-Datenbank nach dBASE kopieren?

Wenn ein Alias eingerichtet ist, können die Tabellen manuell kopiert werden, analog dem Beispiel im vorherigen Abschnitt. Das folgende Beispiel zeigt, wie man alle Tabellen einer Access-Datenbank per Programm in eine bestehende dBASE-Datenbank kopieren kann.
 
 
/*
  copy_mdb_sample.prg
  Beispiel: Tabellen aus einer Access-Datenbank (*.mdb) nach dBASE kopieren
*/
set procedure to :dUFLP:bdeAlias.cc additive

local cAccessDB, cDbaseDB, cDestination
local oAlias, aTables
local d1, d2, q, u, i

// Gewünschte Alias-Namen hier einsetzen
cAccessDB  = "myAccess"       // <== Access Aliasname einsetzen
cDbaseDB   = "myDbaseAlias"   // <== dBASE Aliasname einsetzen

d1 = new database(cAccessDB)
d1.active  := true

d2 = new database(cDbaseDB)
d2.active  := true

oAlias = new bdeAlias()
aTables = oAlias.listTables(cAccessDB)

for i = 1 to aTables.Size
   q = new Query()
   q.database  := d1
   q.sql       := "select * from " + aTables[i]
   q.active    := true

   // Beim Kopieren von Tabellen aus einem fremden Datenbankformat
   // muss die Namenserweiterung dbf hinzugefügt werden
   cDestination = ":" + cDbaseDB + ":" + aTables[i] + "*.dbf"
   u = new UpdateSet()
   u.source       := q.rowset
   u.destination  := cDestination
   u.copy()

   // Clean up
   release object u
   u = null
endfor

   

Ich hoffe, dass diese Beschreibung hilfreich war. Weiterhin viel Spaß mit dBASE!