Zugriff auf Server über ODBC

Manchmal stehen Sie vor der Aufgabe, die Daten eines SQL-Servers unter Access zu verwalten, oder sogar einen solchen als Backend zu verwenden. Grund für seinen Einsatz ist meist eine Mehrbenutzerumgebung, bei der Access-Backends schnell in die Knie gehen. Ein Buch mit sieben Siegeln Keine Scheu, die Sache ist nicht gar so kompliziert und die ersten Schritte sind schnell gemacht!

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1607_ODBC.zip.

SQL-Server und ODBC

Greifen Sie unter Access auf die Daten von Tabellen zu, so befinden sich diese entweder in der aktuellen Datenbankdatei, oder in einer externen ACCDB oder MDB. Handelt es sich um eine externe Datei, so müssen deren Tabellen über den Tabellenverknüpfungsdialog von Access verlinkt werden. Auch wenn dies nicht so offensichtlich ist, kommt hier in beiden Fällen eine zusätzliche Komponente in Gestalt der Access Database Engine als zusätzliche Schicht ins Spiel. Diese Engine kann sogar ohne Access selbst unter Windows installiert werden – Microsoft bietet sie als freien Download an. Diese Engine stellt quasi den Datenbankserver von Access dar.

Ein SQL-Server verrichtet ähnliche Arbeit, wie die Access Database Engine, verwaltet seine Tabellendateien jedoch unsichtbar im Hintergrund. Erst auf eine SQL-Anfrage über einen Kommunikationskanal zu ihm, sei es das TCP/IP-Protokoll oder eine sogenannte Pipe, liefert er die gewünschten Daten aus. Access allein ist nicht imstande, solche Anfragen zu stellen, denn es kennt ja die Schnittstelle zum Server, seine API, nicht. Deshalb wurde einst eine allgemeingültige Schnittstelle unter Windows geschaffen, die auf den Namen Open Database Connectivity (ODBC) hört. Diese standardisierte Schnittstelle hat einen Satz von Zugriffsmethoden, die Access anzusprechen weiß. Das ODBC-System vermittelt diese Zugriffe über einen speziellen Treiber, der für den jeweiligen SQL-Server installiert sein muss. Der Treiber allein kennt die API des Servers und übersetzt die Anfragen auf dessen Schnittstelle. Damit der Unterschied etwas deutlicher wird folgt hier zunächst im Groben die Darstellung des Zugriffs von Access auf eine ACCDB-Datei:

Access
|
Access Database Engine
|
(Netzwerk)
|
ACCDB-Datei

Access fragt die Access Database Engine an, die ihrerseits entweder lokal oder gegebenenfalls über ein Netzwerk auf die Datei zugreift, um deren Daten auszulesen oder zu schreiben. ähnlich sieht dies bei der ODBC-Kommunikation aus, nur dass hier zusätzliche Schichten nach der Access Database Engine eingezogen sind, die ihrerseits nun natürlich andere Methoden zum Zugriff absetzen muss:

Access
|
Access Database Engine
|
ODBC-Administrator
|
ODBC-Treiber
|
(Netzwerk)
|
DBMS (SQL-Server)

Der ODBC-Administrator ist das Framework für alle ODBC-Vorgänge. Er lädt oder entlädt etwa einen bestimmten installierten ODBC-Treiber, der von der Engine bestimmt wird. Dieser Administrator enthält auch eine Oberfläche, die sich über die Systemsteuerung von Windows aufrufen lässt. Allerdings geht das zunächst nur mit administrativen Rechten, weil sich hier Systemeinstellungen ändern ließen.

Der schließlich geladene ODBC-Treiber kontaktiert den SQL-Server und verarbeitet als Mittler die Zugriffe. In der Regel geschieht dies über einen TCP/IP-Kanal, und das selbst dann, wenn der SQL-Server lokal installiert ist. ähnlich, wie ein HTML-Web-Server, nimmt der SQL-Server die Anfragen auf, sucht die gewünschten Daten aus seinem DBMS (Database Management System) heraus, und schickt sie zurück. Das Ganze schlägt nun die entgegengesetzte Richtung ein, bis die Daten schließlich an Access gelangen.

Konkrete SQL-Server

An dieser Stelle wären einige frei verfügbare Implementationen von SQL-Servern zu nennen. Der prominenteste ist wohl der aus dem Hause Microsoft selbst. Er nennt sich denn auch schlicht und ungeniert SQL-Server (Microsoft SQL Server). Die großen Versionen sind kostenpflichtig, und das nicht zu knapp! Die Developer Edition, seit der Version 2014 für jeden installierbar, der einen Account auf der Visual Studio-Seite anlegt, ist genauso mächtig, sein Einsatz jedoch ausschließlich für Entwicklungszwecke gedacht. Produktiver Einsatz ist untersagt. Anders bei der Express Edition, die beliebig einsetzbar ist, dafür aber einige Einschränkungen aufweist. Die Gegenüberstellung zeigt die wichtigsten Unterschiede:

Developer Edition
- Arbeitet mit allen CPU-Kernen
- Gesamter RAM ist ansprechbar 
- Datenbankgröße beliebig
- Für den Download ist ein Visual Studio-Account erforderlich
Express 2014
- Arbeitet mit max. 4 CPU-Kernen 
- Nur 1 GB RAM pro Instanz
- Datenbankgröße max. 10 GB
- Frei downloadbar

Wenn man die Limitationen von Access und ACCDBs kennt, so erscheinen die Beschränkungen der Express-Edition ziemlich verkraftbar. Im Gegenteil! Mit 10 GB kann eine Datenbank sogar erheblich größer sein, als eine ACCDB.

Die Tools zur Verwaltung der Server hingegen sind frei erhältlich.

Nicht weniger verbreitet ist der MySQL-Server, welcher einen langen Weg vom Open Source-Projekt über die Firmen MySQL AB, Sun und nun Oracle hinter sich hat. Die MySQL Community Edition unterliegt funktionell keinen wesentlichen Beschränkungen gegenüber der recht teureren Enterprise Edition. Liest man die Lizenzbedingungen des im Quellcode verfügbaren Servers allerdings genau, so wird klar, dass Closed Source untersagt ist. Das bedeutet für Sie als Access- Entwickler, dass Ihre Datenbank, sobald sie auf den Server zugreift, ebenfalls quelloffen sein muss. Eine ACCDE mit verstecktem VBA-Code wäre somit nicht erlaubt, es sei denn, ihr Quellcode wäre öffentlich dokumentiert. Die meisten Firmen wären damit nicht glücklich. Die Entscheidung, ob man das alles so genau nehmen muss, überlassen wir Ihnen…

Ein Ausweg aus dem Dilemma führt zu MariaDB. Der Server ist ein kompletter Ersatz für MySQL und wird auch vom Team um den ursprünglichen Hauptentwickler Johansson weiterprogrammiert, der Wert auf wirkliches Open Source legt. MariaDB ist kompatibel und kann sogar über den ODBC-Treiber für MySQL angesprochen werden.

Noch mehr Open Source bekommt man mit dem immer verbreiteteren PostGreSQL. Die Engine lässt in keiner Hinsicht zu wünschen übrig und ist inzwischen eher fortschrittlicher und funktionell umfangreicher, als MySQL.

Schließlich zu erwähnen wäre noch der SQL-Server ORACLE Express 11g (XE), die abgespeckte Version des in Unternehmen weltweit verbreitetsten DBMS. Man bekommt auch hier einen sehr professionellen Server, muss dafür aber ziemliche Abstriche machen:

- Arbeitet mit nur 1 CPU-Core
- Kann nur 1 GB RAM ansprechen
- 11 GB pro Datenbank
- Nur eine Datenbank pro Rechner

All diese SQL-Server installieren Sie komfortabel über eine Setup-Datei. Anschließend unterstützen Sie in der Regel Assistenten bei der Konfiguration der Server oder dem Anlegen erster Datenbankinstanzen. Zur ausführlicheren Verwaltung der Server verwenden Sie die zumeist mitgelieferten Administrations-Tools.

SQLite

Um Ihnen den Umgang mit ODBC näher zu bringen, benötigen Sie zum Glück keinen der erwähnten SQL-Server, die ohne weiteres mehrere GB Festplattenspeicher auf die Waage bringen können. Mit SQLite gibt es einen Open Source-Server, der unter Android das wichtigste Datenbanksystem darstellt. Er ähnelt stark der Access Database Engine, denn eine Datenbank besteht hier ebenfalls nur aus einer Datei. Krass ist der Umstand, dass die Engine selbst aus nur einer EXE oder DLL mit etwa 4 MB besteht! Der Funktionsumfang ist gegenüber ausgewachsenen DBMS natürlich bescheiden, aber eher vielseitiger, als der von Access.

Auch zu SQLite gibt es einen ODBC-Treiber, den SQLite ODBC Driver, über den Sie aus Access heraus mit der Datenbankdatei kommunizieren können. Dabei handelt es sich einen sehr speziellen Treiber: Der Server ist quasi bereits in ihn eingebaut! Sie benötigen also außer dem Treiber keine weiteren Komponenten, um auf SQLite-Datenbanken zuzugreifen oder solche zu erstellen. Sie finden das Treiber-Setup mit der aktuellen Version auch im Download zu diesem Beitrag.

Schreiten wir zur Tat!

ODBC-verknüpfte Tabellen

Der Download zum Beitrag enthält auch die SQLite-Datei adressen.sqlite, in der bereits vier Tabellen gespeichert sind. Wir machen uns nun an die Aufgabe, diese Tabellen in die Beispieldatenbank zu verknüpfen.

Voraussetzung ist die Installation des ODBC-Treibers, welche ganz unspektakulär verläuft, allerdings nur unter einem Administrator-Konto vollzogen werden kann. Ist dies geschehen, so klicken Sie im Ribbon unter dem Reiter Externe Daten | Importieren und Verknüpfen auf die Schaltfläche ODBC-Datenbank. Dies öffnet den Dialog zum Import oder zur Verknüpfung externer Datenbankelemente. Aktivieren Sie letztere Option. Mit Klick auf OK gelangen Sie zu einem Teil des Windows-ODBC-Administrators (siehe Bild 1), welcher bereits angelegte Datenquellen (DSN) auflistet, oder neue anzulegen gestattet. Eine DSN ist nichts weiter, als ein Set von Konfigurationsparametern, die einerseits den gefragten SQL-Treiber angeben, wie auch Einstellungen für diesen. Gespeichert werden kann dieses Set entweder als Datei (Dateidatenquelle), oder in der Registry (Computerdatenquelle). Entscheiden Sie sich für letzteres.

Der in Access  gestartete Windows-ODBC-Administrator

Bild 1: Der in Access gestartete Windows-ODBC-Administrator

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar