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:
-
Der erste Abschnitt behandelt die
manuelle Einrichtung eines BDE-Alias für die älteren Access-Versionen
(95 und 97). mit Hilfe des BDE-Adminstrators.
-
Der zweiten Abschnitt beschreibt das
entsprechende Vorgehen für die neueren Access-Versionen (ab Access
2000).
-
Der dritte Abschnitt zeigt,
wie man die gleichen Aufgaben mit Hilfe des Datenbank-Assistenten von dQuery
erledigen kann.
-
Der vierten Abschnitt - kein richtiger
Entwickler macht etwas von Hand, wenn er ebensogut ein Programm schreiben
kann! – zeigt die Einrichtung von BDE-Aliasen per Programm.
-
Der fünfte und letzte Teil beantwortet
einige häufig gestellte Fragen zum Umgang mit Access-Datenbanken.
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.
-
Aus dem Hauptmenü die Option
Objekt|Neu... wählen.
-
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
-
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”.
-
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
-
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).
-
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.
-
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.
-
Im Dialog ODBC-Datenquellen-Administrator
auf Register System-DSN klicken.
Auf Schaltfläche Hinzufügen
klicken, um eine System-DSN hinzuzufügen.
-
Im Dialog Neue Datenquelle
erstellen den Treiber “Microsoft Access-Treiber (*.mdb)” auswählen,
dann auf Fertig stellen klicken.
-
Im folgenden Dialog ODBC
Microsoft Access Setup:
-
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.)
-
In das Feld Beschreibung
können Sie einen erläuternden Text eingeben, z.B. “Zugriff auf
Access-Datenbank mit ODBC”.
-
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.
-
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.
-
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.
-
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
-
Die BDE-Verwaltung neu starten.
-
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.
-
Im Regiezentrum auf Registerseite
Tabellen klicken.
-
Auf die Dropdown-Liste Aktuelles
Verzeichnis: klicken und gewünschten Alias auswählen.
-
In der Registerseite Tabellen
werden jetzt die Tabellen der Datenbank angezeigt.
-
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
-
Wir öffnen dQuery und starten
den Datenbank-Assistenten (Database Connection Wizard) durch einen
Klick auf das Datenbank-Icon.
-
Im ersten Schritt übernehmen
wir die Voreinstellung Create a Connection und klicken auf Next.
-
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.
-
Der Assistent fordert uns auf, einen
Namen für den Datenbank-Alias einzugeben. Einen beliebigen Namen eingeben
und auf die Schaltfläche Next klicken.
-
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.
-
Auf der nächsten Seite können
wir die gewünschte Datenbank auswählen.
-
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:
-
Register System-DSN, Schaltfläche
Hinzufügen.
-
Im Dialogfenster Neue Datenquelle
erstellen den gewünschten Treiber (z.B. “Microsoft Access-Treiber
(*.mdb)”) auswählen und auf Fertig stellen klicken.
-
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”.
-
Im Rechteck Datenbank auf die
Schaltfläche Erstellen klicken.
-
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.
-
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.
-
Dialogfenster mit Schaltfläche
OK schließen. Das erfolgreiche Anlegen einer neuen ODBC-Datenquelle
wird durch eine Meldung bestätigt.
-
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!