Möchtest Du den gesamten Artikel lesen? Und vielleicht sogar den Artikel im PDF-Format und die Beispieldateien herunterladen? Dann hole Dir den Artikel gleich hier - völlig kostenlos!
In Access gibt es verschiedene Möglichkeiten, Dateien zu speichern. Diese kann man zum Beispiel in Anlagefeldern ablegen, oder man belässt die eigentlichen Dateien im Dateisystem und notiert in den Tabellen lediglich den Pfad zu den Dateien oder auch nur die Dateinamen. Welche Variante man wählt, hängt letztlich von der Menge und der Größe der Dateien ab, sprich: vom benötigten Speicherplatz. Der ist nämlich in Access-Datenbanken auf zwei Gigabytes begrenzt. In SQL Server-Datenbanken sieht dies ganz anders aus. Selbst bei Verwendung der kostenlosen Express-Edition dürfen die einzelnen Datenbank-Dateien bis zu zehn Gigabytes an Platz auf der Festplatte einnehmen. Auch hier gibt es verschiedene Varianten zum Speichern der Dateien. Die erste ist, die Dateien in varbinary(max)-Feldern zu hinterlegen. Oder man nutzt dazu sogenannte Filetables. Hier werden die Dateien in einem speziell dazu vorgesehenen Bereich der Festplatte abgelegt, aber unter die Kontrolle des SQL Servers gestellt – und gleichzeitig über einen speziellen Typ von Tabelle verwaltet. Wie das gelingt, zeigen wir in diesem Artikel.
Dateien in Access und der Speicherplatz
Eines der großen Probleme von Access-Datenbanken ist der vergleichsweise geringe Speicherplatz. Sicher, wenn wir nur reine Textinformationen oder Zahlen verwalten, kommen wir damit eine Weile aus.
Soll die Datenbank aber auch in Feldern etwa des Typs OLE-Objekt oder Anlage noch Elemente wie Bilder oder Dateien aufnehmen, geraten wir schnell ans Limit.
Unter Access gibt es dabei die Möglichkeit, nur den Pfad zur jeweiligen Datei zu speichern und diese im Dateisystem zu belassen, aber damit sind einige Einschränkungen verbunden – zum Beispiel müssen wir die Pfadangaben ändern, wenn die Datenbank samt referenzierter Dateien einmal verschoben werden soll und wir müssen uns selbst darum kümmern, dass die Daten immer an Ort und Stelle bleiben und gesichert werden.
Alternativen im SQL Server
Die Möglichkeiten in einer SQL Server-Datenbank sehen ähnlich aus. Das Pendant zum Anlagefeld oder dem OLE-Objekt-Feld sind Felder mit dem Datentyp varbinary(max).
Dies ähnelt allerdings eher dem Datentyp OLE-Object in Access – die Dateien werden dort im Binärformat gespeichert, was bedeutet, dass wir diese, wenn wir beispielsweise Bilddateien in einem Bildsteuerelement anzeigen wollen, zuvor erst in das geeignete Format umwandeln müssen.
Praktischer für diesen Fall ist unter Access das Anlagefeld. Darin gespeicherte Bilder lassen sich durch Angabe des jeweiligen Feldes als Steuerelementinhalt direkt im Bildsteuerelement anzeigen.
FileTable: Kombination aus Dateisystem und Tabelle
Daher ist die Verwendung eines sogenannten FileTables unter SQL Server eine geeignete Alternative. Zwar lässt sich ein Bildsteuerelement nicht direkt an ein Feld dieser FileTable binden, aber in der FileTable werden die Pfadangaben zur jeweiligen Datei gespeichert, den wir ebenfalls als Datenquelle von Bildsteuerelementen angeben können.
Gleichzeitig können wir, entsprechende Berechtigungen vorausgesetzt, in einer FileTable gespeicherte Dateien in einem Bildsteuerelement von Access anzeigen.
Daher schauen wir uns in diesem Artikel einmal genau an, wie wir eine FileTable im SQL Server erstellen und nutzen können.
In weiteren Artikeln betrachten wir, wie die in einer FileTable-Tabelle gespeicherte Bilddateien in einem Access-Bildsteuerelement angezeigt werden können.
Voraussetzungen für den Einsatz von FileTables
Die erste und wichtigste Voraussetzung ist die Aktivierung eines speziellen Features des SQL Servers, nämlich FILESTREAM.
Dieses Feature wurde mit SQL Server 2008 eingeführt, FileTable gibt es seit 2012. Wenn Du also nicht mit einer vorsintflutlichen Version von SQL Server arbeitest, sollten die Voraussetzungen grundsätzlich erfüllt sein.
FILESTREAM ist standardmäßig nicht aktiviert, wir müssen diese Funktion also erst einmal an den Start bringen.
FILESTREAM aktivieren
Wir beschreiben das Aktivieren von FILESTREAM in den folgenden Abschnitten für eine frisch installierte Instanz der SQL Server Express Edition.
Dazu starten wir den SQL Server-Konfigurations-Manager, was zum Beispiel für SQL Server 2022 wie folgt gelingt:
- Ausführen-Fenster mit Windows + R starten
- Dort geben wir wie in Bild 1 SQLServerManager16.msc ein (Versionsnummer entsprechend Deiner Version anpassen).

Bild 1: Aufrufen des SQL Server-Konfigurationsmanagers
Danach klicken wir doppelt auf den Eintrag SQL Server-Dienste und dann mit der rechten Maustaste rechts auf die gewünschte Instanz, hier SQL Server (SQLEXPRESS) und wählen den Eintrag Eigenschaften aus – wobei der in Klammern angegebene Name der Instanzname ist und auch abweichen kann (siehe Bild 2).

Bild 2: Anzeigen der Eigenschaften der SQL Server-Instanz
Im nun erscheinenden Dialog wechseln wir zur Registerseite FILESTREAM (siehe Bild 3).

Bild 3: Eigenschaften mit dem FILESTREAM-Bereich
Dort finden wir folgende Optionen:
- FILESTREAM für Transact-SQL-Zugriff aktivieren: Aktiviert den FILESTREAM auf SQL Server-Basis.
- FILESTREAM für E/A-Datenzugriff aktivieren: Aktiviert FILESTREAM für den Zugriff über das Dateisystem.
- Windows-Freigabename: Gibt den Namen des Verzeichnisses an, in dem die Dateien gespeichert werden.
- Zugriff von Remoteclients auf FILESTREAM-Daten zulassen: Erlaubt den Zugriff von anderen Rechnern im Netzwerk.
Hier aktivieren wir die ersten beiden Optionen und belassen den Windows-Freigabenamen bei SQLEXPRESS.
Danach muss der SQL Server neu gestartet werden, was wir wiederum im SQL Server Konfigurationsmanager erledigen, indem wir dort den Kontextmenü Neu starten aufrufen (siehe Bild 4).

Bild 4: Neustart des SQL Servers
Alternativ starten wir den SQL Server direkt im SQL Server Management Studio neu, indem wir mit der rechten Maustaste auf den Eintrag für den Server klicken und den Befehl Neu starten betätigen.
Die hier vorgenommenen Einstellungen können wir auch über das SQL Server Management Studio vornehmen. Dazu zeigen wir die Eigenschaften des Eintrags für den SQL Server an und wechseln dort zur Seite Erweitert (siehe Bild 5).

Bild 5: FILESTREAM in den SQL Server-Eigenschaften im SQL Server Management Studio
Wenn wir FILESTREAM für den Zugriff über das Dateisystem aktiviert haben, finden wir im Windows Explorer eine entsprechende Freigabe vor (siehe Bild 6). Wenn diese nicht direkt sichtbar ist, geben wir in der Adressleiste des Windows Explorers folgendes ein:

Bild 6: Freigabe für SQLEXPRESS
Rechnername
Dann erscheinen zunächst die SQL Server-Instanzen. Hier klicken wir im Falle der Express-Edition doppelt auf SQLEXPRESS.
Auf diese können wir aber aktuell noch nicht zugreifen.
Dazu müssen wir im SQL Server Management Studio noch den vollen Zugriff aktivieren (siehe Bild 7).

Bild 7: Erweitern auf Vollzugriff
Danach können wir schließlich auf die Freigabe amvDesktop2023\SQLEXPRESS (oder wie sie bei Dir heißt) zugreifen, finden dort aber bisher weder Ordner noch Dateien vor.
Wozu diese Freigabe benötigt wird, erläutern wir in den folgenden Abschnitten.
Die FileTable-Technik basiert auf FILESTREAM. Damit können wir sowohl Dateien über die Datenbank speichern und diese dann über das Dateisystem öffnen als auch Dateien in dem für die Datenbank vorgesehenen Verzeichnis speichern und diese damit unter den Zugriff der SQL Server-Datenbank stellen.
FILESTREAM-Beispieldatenbank erstellen
Zu Beispielzwecken erstellen wir zunächst eine neue Datenbank, die mit FILESTREAM ausgestattet ist. Das erledigen wir im SQL Server Management Studio, indem wir in einer neuen Abfrage den Code aus Listing 1 ausführen.
CREATE DATABASE FileTableDB ON PRIMARY (NAME=FileTableDB, FILENAME=''C:\Program Files\Microsoft SQL Server\MSSQL17.SQLEXPRESS\MSSQL\DATA\FileTableDB.mdf''), FILEGROUP FileTableDB_GROUP CONTAINS FILESTREAM(NAME=FileTable_DB, FILENAME=''C:\Program Files\Microsoft SQL Server\MSSQL17.SQLEXPRESS\MSSQL\DATA\FileTableDB'') LOG ON (NAME=FileTableDB_LOG, FILENAME=''C:\Program Files\Microsoft SQL Server\MSSQL17.SQLEXPRESS\MSSQL\DATA\FileTableDB.ldf'')
Listing 1: Erstellen einer Datenbank mit FILESTREAM
Danach erscheint die neue Datenbank wie in Bild 8 im SQL Server Management Studio.

Bild 8: Die neue FileTable-Datenbank
FILESTREAM-Verzeichnis festlegen
Weiter oben haben wir bei der Anpassung des SQL Servers für die Verwendung von FILESTREAM und FileTable bereits einen Windows-Freigabenamen festgelegt, unter dem die vom SQL Server verwalteten Dateien aufzufinden sein sollen.
Diese Freigabe wird von der kompletten SQL Server-Instanz genutzt, was bedeutet, dass nicht nur eine, sondern auch mehrere Datenbanken darauf zugreifen. Deshalb müssen wir pro Datenbank noch ein Unterverzeichnis erstellen. Dieses legen wir in den Eigenschaften der Datenbank auf der Seite Optionen unter FILESTREAM fest.
Stelle also für die Eigenschaft FILESTREAM-Verzeichnisname einen entsprechenden Wert wie etwa FileTableDB ein und lege mit der Eigenschaft Nicht transaktionsgebundener FILESTREAM-Zugriff fest, wie weit der Zugriff von außerhalb des SQL Servers zugelassen werden soll – also beispielsweise über den Windows Explorer (siehe Bild 9). Das Verzeichnis können wir auch mit folgender Anweisung festlegen:

Bild 9: Anlegen eines Verzeichnisses für die FileStream-Datenbank
ALTER DATABASE FileTableDB SET FILESTREAM(DIRECTORY_NAME=''FileTableDB'');
Und diese Anweisung stellt die Zugriffsart auf FULL, READONLY oder OFF ein:
ALTER DATABASE FileTable SET FILESTREAM(NON_TRANSACTED_ACCESS=FULL);
Wenn wir nun noch einmal den Windows Explorer bemühen, werden wir unter der bereits vorhandenen Freigabe einen neuen Ordner vorfinden, der den angegebenen Namen trägt (siehe Bild 10).

Bild 10: Das Verzeichnis für die FileTable-Datenbank
Zum aktuellen Zeitpunkt können wir allerdings noch keine Dateien über das Dateisystem in diesem Verzeichnis ablegen. Um dies zu ändern, müssen wir eine Tabelle zum Speichern der Dateien erstellen. Für FileTables sieht der SQL Server einen eigenen Bereich im Objekt-Explorer vor, und zwar unterhalb des Eintrags Tabellen.
Für den Eintrag FileTables finden wir im Kontextmenü auch die Möglichkeit, eine neue FileTable zu erstellen (siehe Bild 11).

Bild 11: Erstellen einer neuen FileTable
Dies zeigt nun ein neues Abfragefenster mit einem Template zum Erstellen einer FileTable an (siehe Bild 12).

Bild 12: Code zum Erstellen einer neuen FileTable
FileTable ist prinzipiell ein eigener Tabellentyp, deren Struktur bestimmten Vorgaben unterliegt. Eine einfache Anweisung zum Erstellen einer FileTable ist die folgende:
CREATE TABLE dbo.tblFileTable AS FILETABLE WITH ( FILETABLE_DIRECTORY = ''tblFileTable'',
FILETABLE_COLLATE_FILENAME = database_default )
Dabei geben wir keine Spaltennamen an, sondern nur ein paar Eigenschaften. Die erste hier abgebildete heißt FILETABLE_DIRECTORY und gibt an, in welchem Verzeichnis unterhalb des Verzeichnisses für die aktuelle Datenbank die Dateien dieser Tabelle gespeichert werden sollen.
Die zweite heißt FILETABLE_COLLATE_FILENAME und legt die Sortierreihenfolge für die Tabelle fest.
Nach dem Anlegen erscheint die Tabelle in dem für FileTables vorgesehenen Bereich im Objekt-Explorer.
Wie wir dem Kontextmenü für diesen Eintrag entnehmen können, sehen die möglichen Aktionen etwas anders aus als für herkömmliche Tabellen – zum Beispiel fehlt die Möglichkeit zum Editieren der Tabelle.
Dies hat seinen Grund: Die Tabelle hat immer das gleiche Schema und wir können keine Spalten entfernen, umbenennen oder hinzufügen.
Interessant ist hingegen der Eintrag FileTable-Verzeichnis durchsuchen: Dieser Befehl öffnet den Windows Explorer mit dem Verzeichnis, das die Dateien dieser FileTable aufnimmt (siehe Bild 13).

Bild 13: Kontextmenü einer FileTable-Tabelle
Verzeichnisstruktur
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
