SQLite und Access

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

SQLite und Access

Ist Ihnen der Begriff SQLite schon einmal untergekommen? Wenn nicht, so ist das nicht weiter verwunderlich, handelt es sich dabei doch um ein Datenbanksystem, das Sie als Access-Benutzer wahrscheinlich nicht brauchen und viele Ähnlichkeiten mit Access aufweist. Wenn doch, so könnte das der Verbreitung von Android-Smartphones und -Tablets geschuldet sein, denn unter Android ist SQLite das Standarddatenbankformat mit Systemunterstützung - die allermeisten Apps verwenden es, wenn größere Datenmengen zu speichern sind. Grund genug, dieses Format einmal genauer unter die Lupe zu nehmen.

Was ist SQLite?

SQLite gibt es bereits seit dem Jahr 2000. Es wird im Kern von drei Programmierern weiterentwickelt, jedoch von einer großen Schar von Unterstützern mitbetreut, da der Quellcode unter Public Domain steht. Einst war es als Datenbanksystem für einige wenige Aufgaben gedacht gewesen. Statt etwa Programmeinstellungen in INI-Dateien unterzubringen, sollte die Möglichkeit bestehen, diese komfortabler in einer Datenbank zu verwalten, ohne dafür extra eine umfangreiche Datenbank-Engine installieren zu müssen. Dieser Grundgedanke – das Lite im Namen – steht auch heute noch an erster Stelle. Wenn Sie sich auf der Website von sqlite.org die Precompiled Binaries für Windows herunterladen, sind Sie vielleicht erstaunt, dass sich lediglich zwei Dateien im ZIP-Paket befinden. Die eine davon, die Kommandozeilenanwendung sqlite3.exe, reicht dabei schon völlig für die Verwaltung der Datenbankdateien aus.

Inzwischen hat sich SQLite gemausert und steht den Möglichkeiten der Access Database Engine (vormals Jet-Engine) kaum nach. Die Größe der Datenbanken kann in die Gigabytes gehen, alle analogen Datentypen sind vorhanden, der SQL-Dialekt ist umfangreicher als der von Access und ähnelt eher dem größerer DBMS, Fremdschlüssel werden unterstützt und Mehrbenutzerzugriffe sind kein Problem. Auch Transaktionen, Views und Trigger fehlen nicht. Inzwischen sind zahlreiche Schnittstellen zu allerlei Programmierumgebungen entstanden. Viele namhafte Software-Firmen haben das Format inzwischen adaptiert und verwenden es auch jenseits Android. Um einige Programme zu nennen, die einen großen Teil ihrer Daten über SQLite verwalten: Firefox, Chrome, Skype, Dropbox, XNView.

Um Missverständnisse zu vermeiden: SQLite ist ein Pendant zur Access Database Engine, nicht jedoch zu Access. Es gibt keine grafische Oberfläche wie für den Tabellenentwurf oder die Datenblatt­ansicht unter Access, sondern mit der sqlite3.exe lediglich ein Kommandozeilen-Tool zur Anlage und Abfrage der Datenbanken, oder mit der sqlite3.dll eine Programmierschnittstelle, die per API angesprochen werden muss. Wer eine grafische Verwaltung haben will, der benötigt separate Editoren, von denen allerdings zahlreiche vorhanden sind. Dazu später mehr.

Eine SQLite-Datenbank besteht aus nur einer Datei, die üblicherweise die Endung .sqlite oder .db aufweist, so, wie bei Access auch nur eine .mdb- oder .accdb-Datei nötig ist. Intern kann die Datei allerdings mehrere Datenbanken enthalten, wovon die eigentlich genutzte meist den Namen main trägt, während die anderen Systemdatenbanken sind. Darunter befinden sich die Tabellen, die relational miteinander verknüpft sein können. Dabei können Fremdschlüsselbeziehungen angelegt oder Beschränkungen (Constraints) definiert werden. Beziehungen zwischen mehreren Datenbankdateien, so wie gelinkte Tabellen unter Access, sind jedoch nicht direkt möglich. Views schließlich dienen der gefilterten Ausgabe der Tabellendaten. SQLite-Views sind im Unterschied zu den meisten DBMS aber nicht aktualisierbar.

Eine umfassende Darstellung des Formats und seiner Features kann an dieser Stelle nicht gegeben werden. Schauen Sie sich bei Interesse die durchaus gelungene Dokumentation auf der Seite der Herausgeber an. Betrachten wir eher, was wir unter Access mit SQLite anfangen können.

SQLite und Access

Wie kommen die Daten einer SQLite-Datenbank in oder zu Access? Eine direkte Verknüpfung ist zunächst nicht möglich, da hierfür der entsprechende ISAM-Treiber fehlt. Per Code könnten Sie die sqlite3.dll ansprechen, benötigten dafür aber API-Deklarationen, die Sie für VB(A) vergeblich suchen werden. Zum Glück ist das aber überflüssig, da Olaf Schmidt mit dem vbRichClient eine kostenlose Schnittstelle zur Verfügung stellt, deren Programmierung fast identisch zu der von DAO oder ADO ist.

ODBC

Um eine Datenbank eines fremden DBMS direkt in Access zu bekommen, braucht es einen ODBC-Treiber, wie ihn etwa der MS SQL-Server oder MYSQL mitbringen. Auch für SQLite existieren ODBC-Treiber, wobei sich jener von Christian Werner quasi zum Standard entwickelt hat. Andere Treiber sind meist Modifikationen seines Treibers, der im Quellcode veröffentlicht ist. Laden Sie sich also das Installationspaket von dessen Seite herunter und starten das Setup.

Danach finden Sie im ODBC-Datenquellen-Administrator von Windows einen neuen Eintrag SQLite3 ODBC Driver auf der Treiberseite, wie in Bild 1. Den Datenquellen-Administrator finden Sie in den neueren Windows-Versionen über Startmenü|Verwaltung|Daten­quellen (ODBC).

Der ODBC-Datenquellen-Administrator von Windows mit der Liste installierter Treiber

Bild 1: Der ODBC-Datenquellen-Administrator von Windows mit der Liste installierter Treiber

Um anschließend eine neue Datenquelle (DSN) zu einer SQLite-Datenbank im Administrator anzulegen, öffnen Sie die Seite Benutzer-DSN, klicken Hinzufügen an und wählen dann den neuen Treibereintrag aus. Ein Klick auf Fertig stellen führt zum Konfigurationsdialog des Treibers (s. Bild 2). Die Voreinstellungen des Dialogs können Sie zunächst getrost übernehmen. Essentiell sind jedoch zwei Einträge: Unter Database Name geben Sie den Pfad zur SQLite-Datei an, den Sie auch über die Schaltfläche Browse ermitteln können. Was dann passiert, hängt aber vom Kontrollkästchen Don't create Database ab. Ist hier kein Häkchen gesetzt, so wird nach dem Klick auf OK automatisch eine leere SQLite-Datei erstellt, falls die angegebene Datei noch nicht existiert. Ansonsten wird eine Verbindung zur bestehenden Datei hergestellt. Ist das Häkchen gesetzt, so wird keine leere Datei angelegt. Existiert die angegebene dann Datei nicht, so erfolgt beim Verbinden eine Fehlermeldung des Treibers. Lassen Sie für unseren Test, abweichend zur Abbildung, das Häkchen weg. Die wichtigsten weiteren Parameter des Dialogs:

Konfiguration einer SQLite-ODBC-Verbindung (DSN)

Bild 2: Konfiguration einer SQLite-ODBC-Verbindung (DSN)

  • No TXN bedeutet keine Transaktionen. Alle SQL-Anweisungen werden sofort ausgeführt, wenn hier ein Häkchen gesetzt ist. Andernfalls können Sie SQL-Anweisungen in BEGIN TRANSACTION .. COMMIT ... ROLLBACK ... END TRANSACTION-Blöcke einschließen.
  • Foreigns Keys: Fremdschlüsselunterstützung eingeschaltet/ausgeschaltet. Standardmäßig ist dies deaktiviert.
  • Lock Timeout: Hier können Sie einen Wert im Millisekunden angeben, die Zeitspanne, die eine Sperre zur SQLite-Datei maximal andauern darf, bevor der Treiber einen Schreibversuch abbricht. Für lokale Systeme hat dies normal keine Bedeutung.

Nachdem Sie den Dialog mit OK bestätigt haben, finden Sie in der Liste der Benutzerdatenquellen den Eintrag, den Sie im Dialog unter Data Source Name vergeben hatten.

Import/Export

Schreiten Sie nun zur Tat und öffnen eine beliebige Access-Datenbank, etwa die Demodatenbank sqlite_demo.mdb zu diesem Beitrag. Markieren Sie eine Tabelle, in unserem Test die Tabelle tblTest, und gehen Sie dann unter Access 2003 und früher auf Datei|Exportieren, wählen als Dateityp ODBC-Datenbanken() und geben einen neuen Namen für die zu exportierende Tabelle an.

Verwenden Sie hier tblTest2. Unter Access 2007 und neuer öffnen Sie stattdessen das Kontextmenü der Tabelle, gehen auf Exportieren|ODBC-Datenbank.

Anschließend öffnet sich der Datenquellendialog, in dem Sie unter Computerdatenquellen die zuvor angelegte SQLite-Verbindung auswählen. Im Normalfall sollte die Aktion nun erfolgreich quittiert werden – schon haben Sie eine Access-Tabelle nach SQLite transferiert.

Interessant ist, dass dies selbst bei Tabellen mit Anlagefeldern fehlerfrei funktioniert – versuchen Sie es etwa mit der versteckten Systemtabelle MsysResources unter Access 2010. Allerdings werden Sie anschließend mit dem Anlagefeld, welches als Memofeld in die SQLite-Datei exportiert wurde, nicht viel anfangen können. Dort steht dann nur der Name der Anlage, nicht aber deren Binärdaten.

Nachdem die Tabelle exportiert wurde, kommt jetzt der umgekehrte Vorgang. Wir möchten die Tabelle fürs Erste aber nicht reimportieren, sondern eine Verknüpfung zu ihr anlegen. Dazu gehen Sie unter Access 2003 auf Datei|Externe Daten|Tabellen verknüpfen und wählen wieder ODBC-Datenbanken().

Unter Access 2007 und neuer wählen Sie den Ribbon-Eintrag Externe Daten|ODBC-Datenbank|Verknüpfen. Nach Auswahl der SQLite-Verbindung sollten Sie mit einem Dialog konfrontiert werden, der die enthaltenen Tabellen anzeigt.

Lief im vorherigen Schritt alles glatt, dann sollte hier die Tabelle tblTest2 aufgeführt sein. Markieren Sie diese und klicken Sie auf OK – schon finden Sie die per ODBC verknüpfte Tabelle im Datenbankfenster oder Navigationsbereich vor.

Nun wird es spannend: was ist beim Export und Import aus den Feldern der ursprünglichen Tabelle geworden? Die tblTest enthält alle Feldtypen, die bis Access 2007 möglich waren. Öffnen Sie die Tabellen tblTest und tblTest2 parallel im Entwurf, sodass Sie das Schema vergleichen können – siehe Bild 3.

Originale Testtabelle unter Access und das ODBC-verknüpfte Pendant aus SQLite rechts im Entwurf

Bild 3: Originale Testtabelle unter Access und das ODBC-verknüpfte Pendant aus SQLite rechts im Entwurf

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.