Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2016.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Access und LocalDB

Seit SQL Server 2012 gibt es eine kleine, aber feine Instanz des SQL Servers namens LocalDB. Dabei handelt es sich um eine SQL Server-Engine, die zwar einige Unterschiede zur Vollversion des SQL Servers aufweist, aber auch einige Features bietet, die gerade für Access-Entwickler interessant sind. Eines vorweg: Sie können damit nur lokale Datenbanken betreiben, also solche, die auf dem gleichen Rechner wie das Frontend liegen. Ansonsten aber bietet diese Version fast alles, was das Entwicklerherz begehrt.

Der Grund, weshalb ich mich vor einiger Zeit über LocalDB informiert habe, war der, dass ich eine einfache Möglichkeit suchte, eine SQL Server-Instanz zu installieren und zu starten und ohne Umschweife damit arbeiten zu können. Ach ja – und kostenlos sollte sie auch noch sein. Wer schon einmal eine SQL Server-Installation durchgeführt hat, weiß, dass dies eine ziemlich aufwendige und zeitraubende Sache sein kann. Das ist auf jeden Fall nichts, was Sie mal eben durchführen wollen, um kurz etwas zu testen. Die schnelle Installation ist aber auch nur der wichtigste Punkt, weitere folgen weiter unten.

Download von LocalDB

Mit LocalDB verhält es sich anders: Mit der Google-Suche nach localdb download landen Sie schnell auf einer Seite, die den Download von Microsoft SQL Server 2016 Express anbietet. Diesen können Sie beziehen und die Installation starten, um dann im Auswahlmenü LocalDB zu installieren. Alternativ verwenden Sie den direkten Download der Datei SqlLocalDB.msi, die Sie zur Drucklegung dieses Beitrags etwa unter folgendem Link finden:

https://download.microsoft.com/download/E/1/2/E12B3655-D817-49BA-B934-CEB9DAC0BAF3/SqlLocalDB.msi

Installation von LocalDB

Die komplette Installationsdatei ist sage und schreibe nur 45 MB groß! Die Installation brauchen wir an dieser Stelle nicht zu beschreiben, denn diese enthält keinerlei Optionen, an denen Sie Entscheidungen treffen müssten. Dafür gibt es nach der Installation aber auch keinen einzigen neuen Eintrag etwa im Startmenü von Windows. Wozu auch? Das Programm wird ohnehin nur gestartet, wenn Sie von einem Client aus auf die Instanz zugreifen.

Stille Installation

Wenn Sie möchten, können Sie die Installation auch komplett ohne Benutzeroberfläche durchführen. Dazu rufen Sie über die Kommandozeile die folgende Anweisung auf (Sie müssen sich dazu im gleichen Verzeichnis wie die Datei SqlLocalDB.msi befinden):

msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES

Beachten Sie, dass Sie die Eingabeaufforderung dazu als Administrator ausführen müssen. Dazu suchen Sie den Befehl Eingabeaufforderung, beispielsweise über das Suchfeld von Windows, und klicken dann mit der rechten Maustaste auf den gefundenen Eintrag. Dort finden Sie dann den Kontextmenü-Eintrag Als Administrator ausführen.

Zugriff per Eingabeaufforderung

Nun können Sie bereits über die Eingabeaufforderung auf LocalDB zugreifen. Geben Sie beispielsweise den Befehl sqllocaldb -? ein, um Informationen über die verfügbaren Befehle zu erhalten. Ein Befehl lautet etwa wie folgt:

C:\Users\User>sqllocaldb info
MSSQLLocalDB
v11.0

Dies gibt die Namen aller Instanzen aus. Auf diesem Rechner sind zwei verschiedene Versionen installiert – 2016 ist die aktuelle Instanz, die mit dem Namen MSSQLLocalDB angegeben wird. Die Instanz der Version von 2012 wird mit v11.0 angegeben. Dies sind auch gleich die Namen, unter denen Sie in den später vorgestellten Verbindungszeichenfolgen auf die Instanzen zugreifen können.

Wenn Sie genau wissen möchten, welche Versionen in­stalliert sind, setzen Sie folgende Anweisung ab:

C:\Users\User>sqllocaldb versions
Microsoft SQL Server 2012 (11.0.2100.60)
Microsoft SQL Server 2016 (13.0.1601.5)

Hier erhalten Sie also die vollständigen Versionshinweise.

Um eine Instanz zu starten, verwenden Sie den Start-Parameter und geben den Namen der zu startenden Instanz an:

C:\Users\User>sqllocaldb start "MSSQLLocalDB"
Die LocalDB-Instanz 'mssqllocaldb' wurde gestartet.

Mit Stop können Sie die Instanz anhalten:

C:\Users\User>sqllocaldb stop "MSSQLLocalDB"
Die LocalDB-Instanz 'mssqllocaldb' wurde beendet.

Hier haben wir nun die Standardinstanz gestartet. Sie können auch weitere Instanzen erzeugen. Um etwa eine Instanz namens Beispielinstanz zu starten, verwenden Sie den folgenden Befehl:

C:\Users\User>sqllocaldb create "Beispielinstanz"
Die LocalDB-Instanz 'Beispielinstanz' wurde mit Version 11.0 erstellt.

Eine solche Instanz können Sie natürlich auch wieder löschen:

C:\Users\User>sqllocaldb delete "Beispielinstanz"
Die LocalDB-Instanz 'Beispielinstanz' wurde gelöscht.

Wenn Sie mehrere Versionen installiert haben und eine Instanz für eine spezielle Version erstellen möchten, geben Sie die Version wie folgt an:

C:\Users\User>sqllocaldb create "Beispielinstanz" 13.0
Die LocalDB-Instanz 'Beispielinstanz' wurde mit Version 13.0 erstellt.

Zugriff per SQL Server Management Studio

Für uns ist aber viel inte­ressanter: Wie kann ich nun auf eine solche Instanz zugreifen, um eine Datenbank mit Tabellen und weiteren Objekten zu erstellen? Und wie greife ich dann von Access aus auf diese Datenbank zu? Auch das ist kein Problem. Unter folgendem Link finden Sie eine kostenlose Version des SQL Server Management Studio in der neuesten Version von 2016:

https://msdn.microsoft.com/de-de/library/mt238290.aspx

Nach dem Download und der Installation können Sie SQL Server Management Studio auch direkt starten. Es erscheint nun das Hauptfenster und der Dialog zum Herstellen einer Verbindung mit dem gewünschten Server (s. Bild 1). Hier tragen Sie, wenn Sie nur eine Version von LocalDB installiert haben, den folgenden Server ein:

Das SQL Server Management Studio nach dem Start

Bild 1: Das SQL Server Management Studio nach dem Start

(localdb)\MSSQLLocalDB

Oder, wenn Sie eine ältere, parallel installierte Instanz verwenden wollen, wie etwa auf meinem Rechner, den folgenden Server für die Version 2012:

(localdb)\v11.0

Sie können auch auf die selbst erstellte Instanz zugreifen:

(localdb)\Beispielinstanz

Grundsätzlich gilt hier die Regel, dass Sie mit dem SQL Server Management Studio nicht auf LocalDB-Versionen zugreifen können, die neuer sind als die installierte SQL Server Management Studio-Version. Die Nutzung von LocalDB in der Version von 2016 ist also mit der hier installierten Version 2014 des SQL Server Management Studios nicht möglich.

Datenbanken bearbeiten

Sie können dann nach erfolgreichem Verbindungsaufbau direkt wie mit der Vollversion des SQL Servers neue Datenbanken anlegen, Tabellen hinzufügen, Felder bearbeiten und mehr. In Bild 2 sehen Sie eine Beispieldatenbank, die mit dem SQL Server Management Studio auf Basis von LocalDB erstellt wurde. Wie Sie das Datenmodell einer solchen Beispieldatenbank erstellen, erfahren Sie im Beitrag SQL Server-Datenbank erstellen (www.access-im-unternehmen.de/1055).

Bearbeiten einer Tabelle in einer LocalDB-Datenbank

Bild 2: Bearbeiten einer Tabelle in einer LocalDB-Datenbank

Zugriff von Access auf LocalDB

Nun kommt der interessanteste Teil: Wir wollen von Microsoft Access aus eine LocalDB-Datenbank als Backend verwenden. Das gelingt, nach aktueller Empfehlung von Microsoft, am besten mit einer ODBC-Verbindung. Um eine solche herzustellen, könnten Sie mit Bordmitteln arbeiten. Wir haben das ausprobiert und den neuesten ODBC-Treiber für den SQL Server verwendet, aber der Zugriff gelingt nicht, wie Bild 3 zeigt. Das Problem liegt darin, dass wir nicht über den Parameter SERVER, sondern DATA SOURCE auf LocalDB zugreifen müssen.

Fehler beim Versuch, per Datenquelle auf LocalDB zuzugreifen

Bild 3: Fehler beim Versuch, per Datenquelle auf LocalDB zuzugreifen

Zum Glück haben wir aber ein paar Tools entwickelt, mit denen das noch schneller und besser geht. Den aktuellen Stand dieser Tools beschreiben wir im Beitrag SQL Server-Tools (www.access-im-unternehmen.de/1061) in der nächsten Ausgabe – dort sind beispielsweise die Änderungen enthalten, die für den Zugriff auf LocalDB-Datenbanken nötig sind. Zumindest erhalten Sie damit eine gangbare Verbindungszeichenfolge, die wie folgt aussieht:

ODBC;DRIVER={ODBC Driver 11 for SQL Server};DATA SOURCE=(localdb)\MSSQLLocalDB;
DATABASE=Suedsturm;Trusted_Connection=Yes;OPTION=3;

Wichtig ist, dass Sie einen halbwegs aktuellen Datenbanktreiber verwenden. Das heißt also entweder mindestens den SQL Server Native Client 11.0 (SQL Server 2012) oder den entsprechenden ODBC Driver for SQL Server. Das ist wichtig, weil es LocalDB ja erst seit SQL Server 2012 gibt – vorherige Versionen verweigern den Zugriff auf LocalDB.

Mit den dort beschriebenen Techniken haben Sie im Handumdrehen Verknüpfungen zu den Tabellen der LocalDB-Datenbank angelegt, die dann wie in Bild 4 im Navigationsbereich erscheinen.

Lokale und verknüpfte Tabellen

Bild 4: Lokale und verknüpfte Tabellen

Wenn wir die verknüpften Tabellen öffnen, erhalten wir außerdem schnell Zugriff auf die enthaltenen Daten. Nun haben wir im Beitrag SQL Server-Datenbank erstellen (www.access-im-unternehmen.de/1055) erstmal nur die Daten der Tabelle tblAnreden hinterlegt.

Die übrigen Daten sind also noch offen. Aber da wir die Struktur der Tabellen eins zu eins übernommen haben, können wir die Daten theoretisch leicht von den lokalen Tabellen in die verknüpften Tabellen überführen. Dazu öffnen Sie einfach jeweils die beiden Versionen einer Tabelle, kopieren alle Datensätze der lokalen Tabelle und fügen diese in der verknüpften Version der Tabelle ein. So war zumindest der Plan.

Allerdings gelingt dies schon nicht mehr, sobald die Datensätze in den Ursprungstabellen nicht durchnummeriert sind. Denn beim Einfügen legt der SQL Server die Primärschlüsselwerte nach den vorgegebenen Regeln an und übernimmt nicht die Werte der hineinkopierten Datensätze. Die Details, wie wir die Daten aus den Access-Tabellen in die SQL-Server-Tabellen kopiert haben, beschreiben wir im Beitrag Daten von Access zum SQL Server kopieren (www.access-im-unternehmen.de/1056).

Von der .mdf-Datei zum Datenzugriff

Wenn Sie nun, wie es etwa mit den Beispieldateien zu diesem Beitrag der Fall ist, eine .mdf-Datei mit einer per LocalDB erstellten Datenbank und eine .accdb-Datei mit den entsprechenden Verknüpfungen auf die Tabellen der LocalDB-Datenbank erhalten, wollen Sie diese natürlich unter Access verfügbar machen. Wenn Sie die Datenbankdatei aus dem Download zu diesem Beitrag öffnen und einfach doppelt auf eine der dort angegebenen Tabelleverknüpfungen wie etwa tblAnreden klicken, erhalten Sie zunächst eine Fehlermeldung wie die aus Bild 5.

Fehler beim Zugriff ohne Vorhandensein von LocalDB

Bild 5: Fehler beim Zugriff ohne Vorhandensein von LocalDB

Ist es nun kompliziert, die Verbindung zu der .mdf-Datei herzustellen? Nein! Einer von zwei Schritten, die nötig sind, wenn sich die .accdb- und die .mdf-Datei im gleichen Verzeichnis befinden, ist die Installation von Microsoft SQL Server 2016 LocalDB, also der bereits weiter oben erwähnten rund 44 MB großen Datei.

Von obigem Fehler ausgehend brauchen wir noch nicht einmal die Access-Datenbank neu zu öffnen und können direkt per Doppelklick auf die Tabellenverknüpfung auf die Daten der LocalDB-Datenbank zugreifen.

Der zweite ist die Installation des Kommandozeilentools SQLCMD.exe. Dieses finden Sie in einem Download namens Microsoft SQL Server Feature Pack, für die Version 2016 etwa unter dem folgenden Link:

https://www.microsoft.com/de-DE/download/details.aspx?id=52676

Hier wählen Sie als Download den Eintrag DEU\x64\MsSqlCmdLnUtils.msi aus. Achten Sie auf die richtige Version für 32- oder 64bit, also x86 beziehungsweise x64 (s. Bild 6). Achtung: Wenn Sie beide Versionen herunterladen, erhalten Sie einen Download namens MsSqlCmdLnUtils.msi und einen namens MsSqlCmdLnUtils(1).msi. Die Version für 64bit (X64) ist jedoch in der Version für SQL Server 2016 etwas größer (ca. 2,5 MB).

Download des Kommandozeilentools SQLCMD

Bild 6: Download des Kommandozeilentools SQLCMD

Nach dem Download installieren Sie das Tool auf dem Zielrechner. Das Kommandozeilentool nutzen Sie, wie der Name schon sagt, über die Kommandozeile, die Sie etwa unter Windows 10 durch einfaches Eintragen der Zeichenfolge cmd in das Suchen-Fenster finden.

In der Liste der Suchergebnisse klicken Sie dann einfach auf den Eintrag Eingabeaufforderung (s. Bild 7).

Start der Eingabeaufforderung

Bild 7: Start der Eingabeaufforderung

Es erscheint dann das bekannte Fenster mit dem schwarzen Hintergrund, in das Sie dann auch gleich den Befehl SQLCMD eingeben können, um das Tool zu starten (s. Bild 8).

Start des Kommandozeilentools SQLCMD

Bild 8: Start des Kommandozeilentools SQLCMD

Damit haben Sie allerdings noch keine Verbindung mit einem SQL Server oder der Anwendung LocalDB hergestellt. Dazu geben Sie als Parameter noch zusätzlich Folgendes an:

sqlcmd -S "(localdb)\MSSQLLocalDB"
1>

Den Servernamen sollten Sie sicherheitshalber in Anführungszeichen setzen, da es sonst zu Problemen wegen der Klammer-Zeichen kommen könnte.

Datenbank anhängen

Wozu nun benötigen wir SQLCMD überhaupt? Wir gehen davon aus, dass Sie aus dem Clientrechner nicht extra noch das SQL Server Management Studio installieren möchten, nur um die LocalDB-Datenbank lauffähig zu machen. Wir benötigen aber ein Tool, um die Datenbankdatei, in unserem Fall also etwa Suedsturm.mdf und zusätzlich die Protokolldatei Suedsturm_log.mdf an LocalDB »anzuhängen«.

Dazu geben Sie nach dem Verbinden mit LocalDB einfach die Anweisungen aus Listing 1 in die Eingabeaufforderung ein. Lassen Sie sich nicht von der CREATE DATABASE-Anweisung irritieren, denn wenn die Dateien bereits vorhanden sind, werden diese nicht erzeugt, sondern nur angehängt – dafür dient auch das Schlüsselwort FOR ATTACH am Ende des Befehls.

USE [master]
GO
CREATE DATABASE [Suedsturm] ON 
( FILENAME = N'C:\...\Suedsturm.mdf' ),
( FILENAME = N'C:\...\Suedsturm_log.ldf' )
  FOR ATTACH
GO

Listing 1: Anhängen der Suedsturm-Datenbank an LocalDB

Wichtig ist immer die Eingabe des Befehls GO, damit die zuvor eingegeben Zeilen ausgeführt werden können. Danach können Sie mit dem Tool direkt auf die Datenbank zugreifen, indem Sie zunächst den Kontext wechseln:

1> USE Suedsturm
2> GO
Changed database context to 'Suedsturm'.

Der Zugriff erfolgt dann per SQL-Abfrage:

1> SELECT * FROM tblAnreden
2> GO
AnredeID    Anrede
----------- -------------------------------------------
           1 Herr
           2 Frau
(2 Zeilen betroffen)
1>

Nun können Sie mit einer Datenbank, für die Sie Verknüpfungen etwa mit der folgenden Verbindungszeichenfolge angelegt haben, direkt auf die LocalDB-Datenbank zugreifen:

ODBC;DRIVER={ODBC Driver 11 for SQL Server};DATA SOURCE=(localdb)\MSSQLLocalDB;
DATABASE=Suedsturm;Trusted_Connection=Yes;OPTION=3;

Zusammenfassung und Ausblick

LocalDB ist eine interessante Alternative zum SQL Server, wenn man schnell eine SQL Server-Datenbank zum Testen benötigt – aber auch, wenn man ein alternatives Backend für eine Einzelplatzanwendung benötigt, das im Gegensatz zu Access mehr als zwei GB Speicherplatz bietet.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

Suedsturm.mdf

AccessUndLocalDB.accdb

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.