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 SQL Server 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 SQL Server 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 von SQL Server LocalDB
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:UsersUser>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:UsersUser>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.
SQL Server LocalDB-Instanz starten
Um eine Instanz zu starten, verwenden Sie den Start-Parameter und geben den Namen der zu startenden Instanz an:
C:UsersUser>sqllocaldb start "MSSQLLocalDB" Die LocalDB-Instanz ''''mssqllocaldb'''' wurde gestartet.
Mit Stop können Sie die Instanz anhalten:
C:UsersUser>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:UsersUser>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:UsersUser>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:UsersUser>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:
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 in SQL Server LocalDB 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).
Bild 2: Bearbeiten einer Tabelle in einer LocalDB-Datenbank
Zugriff von Access auf SQL Server 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.
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: Aktueller Datenbanktreiber
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.
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
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo