Zum Inhalt springen
EnglishErstgespräch vereinbaren

Ratgeber · Verwaltung & Prozesse

Access-Datenbank ablösen: Wege, Bestand und Fallstricke

Kurz gesagt

Prüfen Sie zuerst Version und Grenzen: Für Access 2016, 2019 und 2021 ist der Support beendet. Genügt die Oberfläche, ziehen die Daten auf einen Datenbankserver und Access bleibt. Sonst entsteht eine Webanwendung, denn Formulare, Berichte und VBA wandelt Microsofts Werkzeug nicht um. Prüfen Sie danach Zeilen, Summen und Anlagen.

Das Wichtigste in Kürze

  • Für Access 2016 und 2019 endete der Support am 14.10.2025, für Access 2021 am 13.10.2026. Access 2024 wird bis zum 09.10.2029 unterstützt.
  • Der SQL Server Migration Assistant (SSMA) übernimmt vor allem Tabellen und Auswahlabfragen ohne Parameter, aber keine Formulare, Berichte, Makros oder VBA.
  • Die Zwischenstufe mit Datenbankserver erweitert Datenmenge und Nutzerzahl. Windows, Access und der VBA-Code bleiben.
  • Beim Abgleich zählen Sie Ja-Werte, statt zu summieren. In unserer Probe ergab die Summe über zwei Ja-Werte -2.
  • Über die Schnittstelle OLE DB erscheinen Anlagen und Mehrwertfelder als Text. Erst die Access-Bibliothek DAO nennt die Feldart.

Müssen Sie Ihre Access-Datenbank jetzt ablösen?

Nur, wenn Ihre Datenbank an Grenzen stößt, die ein Versionswechsel nicht behebt: Arbeit ohne Windows-Rechner, Datenmenge, Nutzerzahl oder VBA, das nur eine Person versteht. Access als Produkt bleibt: Access 2024 und Access in Microsoft 365 werden unterstützt. Für Access 2016 und 2019 endete der Support am 14.10.2025, für Access 2021 am 13.10.2026.

Warum: Nach dem Supportende gibt es laut Microsoft keine neuen Sicherheitsupdates mehr. Ein Versionswechsel schließt diese Lücke. Die anderen Grenzen bleiben: Eine Access-Datei fasst 2 GB abzüglich der Systemobjekte, und höchstens 255 Personen arbeiten gleichzeitig darin (Access-Spezifikationen (externe Website)). Access läuft auf dem Windows-Desktop und ist nur in bestimmten Plänen von Microsoft 365 enthalten (Microsoft zu Access und Excel (externe Website)). Zum Fernzugriff über ein VPN schreibt Microsoft: „Access und Virtual Private Networks (VPN) vertragen sich nicht.“ (Microsoft zur Migration nach SQL Server (externe Website))

Support der Access-Versionen nach Microsoft, Stand November 2026
VersionSupport endetFolge für Sie
Access 2016 und 201914.10.2025Keine neuen Sicherheitsupdates mehr.
Access 2021 und Access LTSC 202113.10.2026Keine neuen Sicherheitsupdates mehr.
Access 202409.10.2029Support läuft.
Access in Microsoft 365kein festes EnddatumSupport läuft, solange Sie lizenziert sind und Updates einspielen.

Quellen der Tabelle: Supportende 2025 (externe Website), Supportende 2026 (externe Website), Supportende 2029 (externe Website), Lebenszyklus von Microsoft 365 Apps (externe Website), Modern-Lifecycle-Richtlinie (externe Website).

So gehen Sie vor:

  1. Notieren Sie je Arbeitsplatz die Access-Version. Läuft eine Version ohne Support, planen Sie den Wechsel auf eine unterstützte Version, auch wenn die Ablösung danach ansteht.
  2. Halten Sie Dateigröße, Zahl der gleichzeitig Nutzenden, Standorte und Zugriffe von außen fest.
  3. Fragen Sie, wer VBA-Code und Makros heute noch ändern kann.
  4. Schätzen Sie die Stunden, die Störungen und Umwege pro Woche kosten. Wie Sie das messen, zeigt unser Ratgeber Prozesse digitalisieren.

Beispiel: Angenommen, ein Wartungsbetrieb mit 20 Beschäftigten plant Einsätze in einer Access-Datenbank auf dem Büroserver. Alle arbeiten mit Access 2016, die Datei ist 1,4 GB groß, und das VBA hat ein ehemaliger Kollege geschrieben. Der Außendienst soll Einsätze künftig unterwegs bestätigen.

Typischer Fehler: Das Supportende allein löst einen Neubau aus. Reicht die Oberfläche weiter, genügt oft ein Wechsel auf eine unterstützte Version.

Erledigt, wenn Version, Dateigröße, Nutzerzahl, Zugriffswege und die Person, die den Code kennt, schriftlich feststehen.

Welcher Weg passt: Zwischenstufe oder ganze Webanwendung?

Prüfen Sie zuerst, ob ein fertiges Produkt den Ablauf abdeckt. Wenn nicht, entscheidet der Zugriff: Müssen Menschen ohne Windows-Rechner oder von unterwegs arbeiten, führt der Weg zu einer Webanwendung. Drücken nur Datenmenge, Nutzerzahl oder Netz, und die Oberfläche passt weiter, reicht die Zwischenstufe: Die Daten ziehen auf einen Datenbankserver, Access bleibt als Oberfläche.

Vier Wege, von einfach bis aufwendig, nach unserer Einschätzung
WegPasst, wennGrenze
Access aktualisieren und teilen: unterstützte Version, Daten und Oberfläche in getrennten Dateienwenige Personen im lokalen Netz arbeiten und die Oberfläche passtZugriff nur mit Windows; Daten und Logik bleiben in Access-Dateien.
Zwischenstufe: Daten auf einem Datenbankserver, Access bleibt OberflächeDatenmenge, Nutzerzahl oder Verfügbarkeit drücken und die Formulare weiter taugenAccess oder Access Runtime auf jedem Arbeitsplatz; VBA bleibt und braucht Anpassungen.
Standardsoftware oder Low-Code-Plattformein Produkt alle Muss-Anforderungen per Einstellung erfülltIhr Ablauf richtet sich nach dem Produkt, und Lizenzen kosten laufend.
Webanwendung für Ihren AblaufMenschen ohne Windows-Rechner, von unterwegs oder von außen arbeitenFormulare, Berichte und VBA entstehen neu; höhere Kosten am Anfang und laufende Pflege.

So gehen Sie vor: Beantworten Sie die Fragen der Reihe nach. Die erste passende Antwort nennt Ihren Weg.

  1. Erfüllt ein fertiges Produkt alle Muss-Anforderungen? Dann nehmen Sie das Produkt. Wann sich Kauf oder Eigenbau lohnt, zeigt unser Vergleich Individualsoftware oder Standardsoftware? Ob eine Plattform reicht, steht in Low-Code oder Individualsoftware?
  2. Müssen Menschen ohne Windows-Rechner, von unterwegs oder von außerhalb Ihres Netzes arbeiten? Dann führt der Weg zu einer Webanwendung, denn Access ist ein Programm für den Windows-Desktop. Fernzugriff auf einen Windows-Rechner überbrückt das für Einzelne, ersetzt aber keine Anwendung im Browser.
  3. Soll das VBA weg, oder kennt es nur noch eine Person? Dann bringt die Zwischenstufe wenig, denn sie lässt das VBA an seinem Platz. Planen Sie die Webanwendung oder lassen Sie den Code zuerst dokumentieren.
  4. Drücken nur Datenmenge, Nutzerzahl oder Netz? Dann wählen Sie die Zwischenstufe.
  5. Trifft nichts davon zu? Dann bleiben Sie bei Access, wechseln auf eine unterstützte Version und teilen die Datenbank (Aufteilen einer Access-Datenbank (externe Website)).

Die Zwischenstufe kann der erste Schritt zur Webanwendung sein: Liegen die Daten auf einem Server, kann die neue Anwendung neben Access auf denselben Daten arbeiten. Microsoft nennt nach dem Umzug beide Fortsetzungen: weiter mit verknüpften Tabellen oder die Anwendung von Hand auf Code umstellen, der direkt mit dem Server arbeitet (Microsoft zur Vorbereitung der Migration (externe Website)).

Wir nehmen Ihren Ablauf im Prozess-Check gemeinsam auf und klären als Erstes, ob eine Standardsoftware reicht. Was zum Prozess-Check gehört, lesen Sie auf unserer Seite zur Verwaltungssoftware.

Typischer Fehler: Die Zwischenstufe wird gewählt, obwohl der Zugriff von außen die eigentliche Not ist. Die Oberfläche bleibt dann an Windows gebunden.

Erledigt, wenn jede der fünf Fragen beantwortet ist und der gewählte Weg mit Begründung schriftlich vorliegt.

Wie funktioniert die Zwischenstufe mit verknüpften Tabellen?

Die Tabellen liegen auf einem Datenbankserver, und eine Access-Datei auf jedem Arbeitsplatz greift über verknüpfte Tabellen darauf zu. Formulare, Berichte, Abfragen und VBA bleiben in Access. So wachsen Datenmenge und Nutzerzahl, doch jeder Arbeitsplatz braucht weiter Windows und Access oder die kostenlose Access Runtime.

Warum: Microsoft vergleicht die Migration mit einer geteilten Datenbank. Dort liegen die Tabellen im Back-End, Formulare, Berichte und Abfragen im Front-End. In Microsofts Beschreibung dient SQL Server als neues Back-End. Er verarbeitet laut Microsoft deutlich mehr gleichzeitige Nutzende und lässt sich im laufenden Betrieb sichern. Über ODBC verknüpft Access auch andere Datenquellen (Verknüpfte Tabellen verwalten (externe Website)). Welcher Datenbankserver passt, klären Sie im Projekt. Die kostenlose Access Runtime (externe Website) führt die Datenbank ohne installiertes Access aus; den Entwurf ändern lässt sie nicht.

Was sich nach dem Umzug ändert, nach Microsoft
StelleWas geschiehtWas Sie tun
Abfragen mit Access-Funktionen oder VBAAccess holt die Daten auf den Rechner und rechnet dort selbst, oft langsam.In Pass-Through-Abfragen, Sichten oder gespeicherte Prozeduren auf dem Server umwandeln.
Abfragen über lokale und verknüpfte Tabellen zugleichAccess lädt alle Serverdaten auf den Rechner.Vermeiden; lokal bleiben nur selten geänderte Listen.
AutoWert im VBA-CodeDer neue Wert steht erst nach dem Speichern bereit.Den Code anpassen.
Änderungen am TabellenaufbauIn Access nicht mehr möglich.Auf dem Server ändern und die Verknüpfung aktualisieren.
Anmeldung mit SQL-Server-KontoDas Kennwort steht im Klartext in den verknüpften Tabellen.Die Windows-Anmeldung verwenden.
Datumswerte mit SekundenbruchteilenVerknüpfte Tabellen zeigen #Deleted oder Schreibkonflikte.Auf dem Server eine rowversion-Spalte ergänzen.

Quellen: Verknüpfte Tabellen nach dem Umzug (externe Website), Microsoft zu #Deleted (externe Website), Microsoft zur Migration nach SQL Server (externe Website).

So gehen Sie vor:

  1. Sichern Sie die Datenbank, bevor Sie sie teilen oder umziehen. Das rät auch Microsoft.
  2. Verteilen Sie die Datei mit Formularen und Berichten auf jeden Arbeitsplatz, denn laut Microsoft arbeitet jede Person mit einer lokalen Kopie.
  3. Erstellen Sie vor der Übernahme den Bewertungsbericht von Microsofts Migrationswerkzeug SQL Server Migration Assistant (SSMA). Er zeigt Fehler, Warnungen und die Schritte, die Sie vor dem Verschieben erledigen müssen.
  4. Prüfen Sie nach dem Umzug jedes Formular und jeden Bericht in einer Testumgebung, an Fällen der letzten Wochen.

Typischer Fehler: Die Datei mit den Formularen bleibt auf dem Netzlaufwerk, und alle öffnen dieselbe. Microsoft sieht eine lokale Kopie je Person vor.

Erledigt, wenn jedes Formular und jeder Bericht in der Testumgebung läuft und kein Kennwort im Klartext in den Verknüpfungen steht.

Was gehört bei Access in die Bestands­aufnahme?

Neben Tabellen und Spalten gehören Beziehungen, Abfragen, verknüpfte Tabellen, Formulare, Berichte, Makros, VBA-Module, Anlagen und Mehrwertfelder in die Liste. Notieren Sie, was im Alltag wirklich genutzt wird und wer es kennt. Den technischen Bestand liest ein Skript aus; Geschäftsregeln in Formularen und VBA zeigt nur das Öffnen in Access.

Warum: Was nicht in der Liste steht, fehlt später. Wie Sie Dateien und Spalten allgemein erfassen, steht in Bestand aufnehmen, dem Abschnitt unseres Excel-Ratgebers. Für Access kommen diese Objekte dazu:

Objekte einer Access-Datenbank und wo Sie sie finden
ObjektWas Sie wissen müssenWo Sie es finden
Tabellen, Spalten, PrimärschlüsselDatentyp, Feldgröße, fehlender SchlüsselSkript, Datenbankdokumentierer
BeziehungenVerbundene Felder, Verhalten beim LöschenSkript, Fenster Beziehungen
AbfragenAuswahl oder Aktion, Parameter, Aufrufe von VBASkript (VIEW, PROCEDURE, DAO-Typ)
Verknüpfte TabellenWohin sie zeigen und ob das Ziel noch da istSkript, Tabellenverknüpfungs-Manager
Anlagen, Mehrwertfelder, Links, berechnete FelderJede Sonderart braucht einen eigenen ÜbernahmewegSkript über DAO
Formulare, BerichtePrüfregeln, Ausdrucke, was noch gebraucht wirdAnzahl über DAO, Inhalt nur in Access
Makros, VBA-ModuleWas der Code tut und wer ihn kenntAnzahl über DAO, Code nur in Access

So gehen Sie vor:

  1. Arbeiten Sie an einer Kopie. Bei alten .mdb-Dateien entfernen Sie vorher die Sicherheit auf Benutzerebene, denn mit Arbeitsgruppenschutz kann SSMA sie laut Microsoft nicht migrieren.
  2. Lassen Sie das Skript unter Aus der Praxis über die Kopie laufen.
  3. Lassen Sie Access die Entwurfsmerkmale dokumentieren: Datenbanktools, Gruppe Analyse, Datenbankdokumentierer (externe Website). Für den VBA-Code öffnen Sie jedes Modul.
  4. Fragen Sie die Menschen, die täglich damit arbeiten, welche Formulare und Berichte sie wirklich brauchen. Was niemand nutzt, muss nicht neu entstehen.
  5. Prüfen Sie, ob andere Programme auf die Datei zugreifen, etwa Excel-Auswertungen oder Serienbriefe.

Beispiel: Im angenommenen Betrieb findet die Aufnahme 38 Tabellen, 112 Abfragen, 64 Formulare und 21 Berichte. Nach Auskunft des Teams werden noch 23 Formulare und 9 Berichte gebraucht.

Typischer Fehler: Das Skript gilt als vollständige Aufnahme. Formulare, Berichte und VBA zählt es nur, ihren Inhalt kennt es nicht.

Erledigt, wenn jedes Objekt einen Plan hat (übernehmen, neu bauen oder weglassen) und für jede Regel feststeht, wer sie kennt.

Welche Datentypen und Beziehungen brauchen eine eigene Entscheidung?

Die meisten Access-Datentypen ordnet Microsofts Werkzeug SSMA automatisch zu. Eine eigene Entscheidung brauchen Anlagen, Mehrwertfelder, Links, Ja/Nein, Dezimalzahlen und Datumswerte vor 1753. Hinzu kommen Tabellen ohne Primärschlüssel und Beziehungen mit ungleichen Feldgrößen, denn beides führt beim Umzug zu Fehlern oder zu Tabellen, die sich nicht mehr ändern lassen.

Warum: Microsoft dokumentiert die Standardzuordnung für SQL Server, deshalb steht sie hier. Bei einem anderen Datenbankserver heißen die Typen anders, die Fragen bleiben dieselben.

Access-Datentypen und Standardziel nach Microsoft, Stand November 2026
Access-TypStandardziel in SQL ServerWorauf Sie achten
Kurzer Text, Langer Textnvarchar(n), nvarchar(max)Meist unkritisch.
Zahl: Dezimal (Decimal)floatfloat ist ein Näherungstyp. Für Beträge ordnen Sie von Hand decimal zu.
Zahl: Byte, Integer, Long Integer; Währungtinyint, smallint, int; moneyMeist unkritisch.
Datum/UhrzeitdatetimeSQL Server nimmt Werte ab dem 01.01.1753 an, Access ab dem Jahr 100.
Ja/NeinbitAccess speichert Ja als -1, bit als 1. Das Feld ohne NULL anlegen, um Datensatzsperren zu vermeiden.
OLE-Objektvarbinary(max)Prüfen Sie, ob die Inhalte danach noch lesbar sind.
Linknvarchar(max)Die Spalte wird zu Text, die Linkfunktion geht dort verloren. In Access-Formularen lässt sie sich per Eigenschaft wieder einschalten.
Anlagekeines: SSMA übernimmt solche Tabellen nichtDateien vorher herausziehen und ablegen.
Mehrwertfeldunklar: Microsoft schreibt beidesAls eigene Zuordnungstabelle planen.
Berechnetes Feldnicht aufgeführtAusdruck und Ergebnis einzeln prüfen.

Quellen: Standardzuordnung in SSMA (externe Website), Vergleich der Datentypen (externe Website), Datentypen in Access (externe Website), float und real (externe Website), bit in SQL Server (externe Website), Migration nach SQL Server (externe Website), Inkompatible Funktionen (externe Website).

Mehrwertfelder: Auf derselben Microsoft-Seite steht, das Feld werde „als ntext-Feld konvertiert“, und ein paar Zeilen weiter „Felder mit mehreren Werten werden nicht konvertiert“. Die Übernahme mit SSMA haben wir nicht getestet, das Lesen schon (Aus der Praxis). Planen Sie eine eigene Zuordnungstabelle, auch weil ntext laut Microsoft (externe Website) in einer künftigen Version entfällt.

Frühe Datumswerte: Access nimmt Tippfehler an. In unserer Probe speicherte die Datenbank den Eintrag #0202-02-01# im Jahr 202. SSMA kann solche Werte leeren oder auf das früheste Datum setzen (Einstellungen für die Datenübernahme (externe Website)). Prüfen Sie diese Zeilen deshalb vorher einzeln.

Befunde zu Schlüsseln und Beziehungen, die Microsoft nennt
Befund in AccessFolgeWas Sie tun
Tabelle ohne eindeutigen IndexNach der Migration nicht mehr änderbar.Primärschlüssel ergänzen oder von SSMA anlegen lassen.
Beziehung mit ungleichen Typen oder FeldgrößenDie Fremdschlüssel-Einschränkung entsteht nicht.Typ und Größe angleichen.
Beziehung auf Tabelle ohne Primärschlüssel oder eindeutigen IndexSQL Server unterstützt das nicht.Schlüssel ergänzen.
Eindeutiger Index mit mehreren leeren WertenVor SSMA 8.13 scheitert die Übernahme dieser Tabellen.Werte oder Index anpassen.
Namen mit SQL-Schlüsselwörtern oder SonderzeichenAbfragen müssen die Namen in Klammern setzen, sonst drohen Fehler.Vor der Übernahme umbenennen.
Standardwerte und Gültigkeitsregeln mit Access-FunktionenLassen sich nicht auf den Server laden.Regel neu formulieren.

So gehen Sie vor:

  1. Ordnen Sie jedem Feld der Bestandsliste einen Zieltyp zu und prüfen Sie die Standardzuordnung, statt sie ungesehen zu übernehmen.
  2. Legen Sie für Anlagen fest, wo die Dateien künftig liegen. Microsoft nennt als eine Möglichkeit, die Dateien zu extrahieren und im Server nur Verknüpfungen zu speichern.
  3. Beheben Sie die Befunde aus der Tabelle in einer Kopie und notieren Sie jede Änderung.

Beispiel: Im angenommenen Betrieb sind Beträge als Dezimalzahlen angelegt; sie bekommen von Hand den Zieltyp decimal.

Typischer Fehler: Die Standardzuordnung wird ungelesen übernommen. Beträge landen dann als float in der neuen Datenbank.

Erledigt, wenn jedes Feld der Liste einen Zieltyp hat, jede Tabelle einen Primärschlüssel und jede Sonderart einen beschriebenen Weg.

Was wird aus Abfragen, Formularen, Berichten und VBA?

Microsofts Werkzeug SSMA übernimmt vor allem Tabellen und Auswahlabfragen ohne Parameter. Formulare, Berichte, Makros und VBA-Module wandelt es nicht um. In der Zwischenstufe laufen sie in Access weiter, teils mit Anpassungen; für eine Webanwendung entstehen sie neu. Schreiben Sie deshalb zuerst die Regeln auf, die darin stecken.

Warum: In Formularen und VBA stecken oft Fachregeln: Nummernkreise, Prüfungen, Rundungen. Sie zeigen sich erst, wenn jemand sie liest. Nach unserer Einschätzung liegt dort bei einer Webanwendung der größere Teil der Arbeit.

Was mit welchem Objekt geschieht, nach Microsoft und unserer Einschätzung
ObjektSSMAZwischenstufeWebanwendung
Auswahlabfrage ohne Parameterwird konvertiert, teils mit Nacharbeitläuft über verknüpfte Tabellenwird Abfrage oder Sicht in der neuen Anwendung
Abfrage mit Parametern, Aktionsabfragewird nicht konvertiertbleibt in Accesswird Teil der Anwendungslogik
Abfrage mit VBA-Funktionläuft nicht auf dem ServerAccess rechnet lokal, besser als Pass-Through-AbfrageRegel neu in Anwendung oder Datenbank
Formularwird nicht konvertiertbleibt in Accesswird neu gebaut, mit Prüfregeln und Rechten
Berichtwird nicht konvertiertbleibt in Accesswird neu gebaut, etwa als Ansicht oder PDF
Makro, VBA-Modulwird nicht konvertiertbleibt, teils mit AnpassungenRegeln werden neu umgesetzt

So gehen Sie vor:

  1. Lesen Sie Formulare und VBA danach durch, was sie entscheiden, und schreiben Sie jede Regel als Satz auf.
  2. Ordnen Sie jeder Regel einen Platz zu: in der Datenbank, in der Anwendung oder gar nicht mehr.
  3. Übernehmen Sie Parameter- und Aktionsabfragen von Hand. Microsoft weist sie als nicht konvertierbar aus.
  4. Bauen Sie Formulare nach den Aufgaben der Nutzenden neu, statt jedes Feld zu kopieren.
  5. Legen Sie mit den Abteilungen fest, welche Berichte als Ansicht, Export oder PDF nötig sind.

Beispiel: Im angenommenen Betrieb vergibt VBA die Auftragsnummern nach Jahr und Kürzel. Diese Regel wird als Satz notiert und in der neuen Anwendung neu umgesetzt.

Typischer Fehler: Die neue Anwendung soll aussehen wie die alten Formulare. Das kopiert auch die Umwege, die das Team längst nur noch aus Gewohnheit nimmt.

Erledigt, wenn jede Regel aus Formularen, Berichten und VBA aufgeschrieben ist und einen Platz oder den Vermerk „entfällt“ hat.

Wie gleichen Sie die Daten nach der Übernahme ab?

Vergleichen Sie vor und nach jedem Probelauf je Tabelle die Zeilenzahl und die Summen der Beträge. Bei Access zählen Sie zusätzlich Ja-Werte, Datumswerte vor 1753 sowie Einträge in Anlagen und Mehrwertfeldern, und Sie vergleichen Dateien einzeln. Probelauf, Parallelbetrieb und Schulung laufen wie in unserem Excel-Ratgeber beschrieben.

Warum: Beim Umzug ändern sich Typen und Zählweisen. Ohne Abgleich fällt das erst im Betrieb auf. Die Grundschritte beschreiben wir im Ratgeber zu Probelauf und Übernahme, zum Parallelbetrieb und zur Schulung des Teams. Hier steht, was Access dazu verlangt.

Abgleichswerte für Access
Was Sie vergleichenWieWorauf Sie achten
Zeilen je TabelleCOUNT(*) vorher und nachherVerknüpfte Tabellen einzeln, auch wenn das Ziel außerhalb liegt.
Summen von BeträgenSUM je BetragsfeldAbweichungen im Cent-Bereich deuten auf float statt decimal.
Ja-Wertezählen, nicht summierenIn Access ergibt SUM negative Werte, und bit unterstützt SUM nicht direkt.
Datumswerte vor 1753Abfrage auf das DatumNotieren Sie, was mit diesen Zeilen geschehen soll, bevor SSMA läuft.
AnlagenAnzahl und Dateivergleich, etwa mit SHA-256Eine Spalte mit Binärdaten aus OLE DB ist noch nicht die Datei.
MehrwertfelderAnzahl der Werte je FeldOLE DB liefert das Feld als Text mit Semikolon; erst .Value zeigt jeden Wert.

So gehen Sie vor:

  1. Holen Sie die Abgleichswerte mit dem Skript unter Aus der Praxis vor jedem Probelauf aus der Kopie.
  2. Testen Sie mit Daten ohne Namen und Kontaktdaten, wenn Dritte Zugriff bekommen, und klären Sie mit Ihrer Datenschutzberatung, welche Verträge Sie brauchen.
  3. Ermitteln Sie nach dem Probelauf dieselben Werte im neuen System und vergleichen Sie jede Zeile.
  4. Klären Sie vor dem Wechsel mit Ihrer Steuerberatung, wie lange und in welcher Form Sie die alte Datenbank aufbewahren, und planen Sie ein, womit sie sich später noch öffnen lässt.

Typischer Fehler: Der Abgleich zählt nur Zeilen. Ein Betrag als float oder ein Datum im Jahr 202 fällt dabei nicht auf.

Erledigt, wenn alle Abgleichswerte vor und nach dem Probelauf übereinstimmen oder jede Abweichung erklärt ist.

Aus der Praxis: Bestand und Abgleich an einer Testdatenbank

Wir haben Bestandsaufnahme und Abgleich am 09.11.2026 an einer eigenen Testdatenbank ohne Echtdaten ausgeführt. Sie enthielt drei Tabellen, eine Beziehung, vier Abfragen, zwei verknüpfte Tabellen (eine davon mit fehlendem Ziel), Anlage, Mehrwertfeld, Link, berechnetes Feld sowie Formular, Bericht, Makro und VBA-Modul. Gelesen hat sie das Skript unten in Windows PowerShell 5.1 über die Schnittstelle OLE DB mit dem Provider Microsoft.ACE.OLEDB.16.0 und über die Access-Bibliothek DAO. Die Datei blieb unverändert: Ihr SHA-256-Wert war vor und nach dem Lauf gleich.

Messung vom  · Microsoft.ACE.OLEDB.16.0 (ACEOLEDB.DLL 16.0.20527.20016), Windows PowerShell 5.1, Testdatenbank ohne Echtdaten, Inventar-Skript

Skript inventar-access.ps1 (nur lesend, für eine Kopie)
# Bestand und Abgleichswerte einer Access-Datenbank ausgeben (nur lesend, an einer Kopie).
# Aufruf: powershell -File inventar-access.ps1 -Datei C:\Test\Kopie.accdb
param([Parameter(Mandatory = $true)][string]$Datei)
$g = [System.Data.OleDb.OleDbSchemaGuid]
$db = New-Object System.Data.OleDb.OleDbConnection (
  "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=$Datei;Mode=Read")
$db.Open()
function Schema($art) { $db.GetOleDbSchemaTable($art, $null).Rows }
function Wert($sql) {
  try { $c = $db.CreateCommand(); $c.CommandText = $sql; $c.ExecuteScalar() }
  catch { 'FEHLER: ' + $_.Exception.InnerException.Message }
}
$eigen = { $_.TABLE_NAME -notmatch '^(MSys|~)' }

'== Tabellen und Abfragen (LINK = verknuepft, VIEW/PROCEDURE = gespeicherte Abfragen)'
$objekte = Schema $g::Tables | Where-Object $eigen |
  Where-Object { $_.TABLE_TYPE -in 'TABLE', 'LINK', 'PASS-THROUGH', 'VIEW' }
$objekte | Sort-Object TABLE_TYPE, TABLE_NAME |
  ForEach-Object { '{0}: {1}' -f $_.TABLE_TYPE, $_.TABLE_NAME }
Schema $g::Procedures | Where-Object PROCEDURE_NAME -notmatch '^~' |
  ForEach-Object { 'PROCEDURE: {0}' -f $_.PROCEDURE_NAME }

'== Tabellen ohne Primaerschluessel'
$mitPk = (Schema $g::Indexes | Where-Object { $_.PRIMARY_KEY }).TABLE_NAME
$objekte | Where-Object { $_.TABLE_TYPE -eq 'TABLE' -and $_.TABLE_NAME -notin $mitPk } |
  ForEach-Object TABLE_NAME

'== Beziehungen'
Schema $g::Foreign_Keys | Where-Object { $_.FK_TABLE_NAME -notmatch '^MSys' } | ForEach-Object {
  '{0}.{1} -> {2}.{3} (loeschen: {4})' -f $_.FK_TABLE_NAME, $_.FK_COLUMN_NAME,
    $_.PK_TABLE_NAME, $_.PK_COLUMN_NAME, $_.DELETE_RULE }

'== Spalten (Typ laut OLE DB)'
$spalten = Schema $g::Columns
$typ = @{ 2='Integer'; 3='Long'; 4='Single'; 5='Double'; 6='Currency'; 7='Date'; 11='YesNo'; 17='Byte'; 72='GUID'; 128='Binary'; 130='Text'; 131='Decimal' }
foreach ($t in ($objekte | Where-Object TABLE_TYPE -ne 'VIEW').TABLE_NAME) {
  $liste = $spalten | Where-Object TABLE_NAME -eq $t | Sort-Object ORDINAL_POSITION | ForEach-Object {
    $n = $typ[[int]$_.DATA_TYPE]; if (-not $n) { $n = 'Typ ' + $_.DATA_TYPE }
    if ([int]$_.DATA_TYPE -eq 130 -and $_.CHARACTER_MAXIMUM_LENGTH -gt 0) { $n += "($($_.CHARACTER_MAXIMUM_LENGTH))" }
    '{0}:{1}' -f $_.COLUMN_NAME, $n }
  'Spalten {0}: {1}' -f $t, ($liste -join ', ')
}

'== Abgleichswerte'
foreach ($t in ($objekte | Where-Object TABLE_TYPE -ne 'VIEW').TABLE_NAME) {
  'Zeilen {0}: {1}' -f $t, (Wert "SELECT COUNT(*) FROM [$t]")
  foreach ($s in ($spalten | Where-Object TABLE_NAME -eq $t)) {
    $spalte = "[$($s.COLUMN_NAME)]"
    switch ([int]$s.DATA_TYPE) {
      { $_ -in 6, 131 } { 'Summe {0}.{1}: {2}' -f $t, $spalte, (Wert "SELECT SUM($spalte) FROM [$t]") }
      11 { 'Ja-Werte {0}.{1}: {2}' -f $t, $spalte, (Wert "SELECT COUNT(*) FROM [$t] WHERE $spalte") }
      7 { 'Datum vor 1753 {0}.{1}: {2}' -f $t, $spalte,
            (Wert "SELECT COUNT(*) FROM [$t] WHERE $spalte < #1753-01-01#") }
    }
  }
}

'== Was das OLE-DB-Schema nicht zeigt (ueber DAO)'
$dao = (New-Object -ComObject DAO.DBEngine.120).OpenDatabase($Datei, $false, $true)
foreach ($t in $dao.TableDefs) {
  if ($t.Name -match '^(MSys|~)') { continue }
  if ($t.Connect) { 'Ziel {0}: {1}' -f $t.Name, ($t.Connect -replace 'PWD=[^;]*', 'PWD=***') }
  foreach ($f in $t.Fields) {
    $name = "[$($f.Name)]"; $art = ''; $zaehl = ''
    if ($f.Type -eq 101) { $art = 'Anlage'; $zaehl = "$name.[FileName]" }
    elseif ($f.Type -ge 102 -and $f.Type -le 109) { $art = 'Mehrwertfeld'; $zaehl = "$name.[Value]" }
    elseif ([int]$f.Attributes -band 32768) { $art = 'Hyperlink' }
    elseif ($f.Expression) { $art = 'berechnet' }
    if ($art) { '{0}.{1}: {2}' -f $t.Name, $f.Name, $art }
    if ($zaehl) { 'Eintraege {0}.{1}: {2}' -f $t.Name, $name, (Wert "SELECT COUNT($zaehl) FROM [$($t.Name)]") }
  }
}
foreach ($q in $dao.QueryDefs) { if ($q.Name -notlike '~*') { 'Abfrage {0}: DAO-Typ {1}' -f $q.Name, $q.Type } }
foreach ($k in $dao.Containers) {
  if ($k.Name -in 'Forms', 'Reports', 'Scripts', 'Modules') { '{0}: {1}' -f $k.Name, $k.Documents.Count }
}
$dao.Close()
$db.Close()
Ausgabe des Skripts an unserer Testdatenbank, wörtlich
== Tabellen und Abfragen (LINK = verknuepft, VIEW/PROCEDURE = gespeicherte Abfragen)
LINK: Lager_extern
LINK: Lager_kaputt
TABLE: Auftraege
TABLE: Kunden
TABLE: Preisliste
VIEW: AuftragsSumme
PROCEDURE: qryAbDatum
PROCEDURE: qryBrutto
PROCEDURE: qryPreiseAnheben
== Tabellen ohne Primaerschluessel
Preisliste
== Beziehungen
Auftraege.Kundennr -> Kunden.Kundennr (loeschen: CASCADE)
== Spalten (Typ laut OLE DB)
Spalten Auftraege: Auftragsnr:Long, Kundennr:Long, Betrag:Currency, Datum:Date, Brutto:Currency
Spalten Kunden: Kundennr:Long, Name:Text(100), Notiz:Text, Seit:Date, Umsatz:Currency, Aktiv:YesNo, Anlagen:Text, Merkmale:Text, Webseite:Text
Spalten Lager_extern: Artikelnr:Long, Bestand:Long
Spalten Lager_kaputt:
Spalten Preisliste: Artikel:Text(50), Preis:Currency
== Abgleichswerte
Zeilen Auftraege: 3
Summe Auftraege.[Betrag]: 525,75
Summe Auftraege.[Brutto]: 625,6425
Datum vor 1753 Auftraege.[Datum]: 0
Zeilen Kunden: 3
Ja-Werte Kunden.[Aktiv]: 2
Datum vor 1753 Kunden.[Seit]: 1
Summe Kunden.[Umsatz]: 2000,5
Zeilen Lager_extern: 1
Zeilen Lager_kaputt: FEHLER: Datei 'T:\extern-weg.accdb' nicht gefunden.
Zeilen Preisliste: 1
Summe Preisliste.[Preis]: 9,99
== Was das OLE-DB-Schema nicht zeigt (ueber DAO)
Auftraege.Brutto: berechnet
Kunden.Anlagen: Anlage
Eintraege Kunden.[Anlagen]: 1
Kunden.Merkmale: Mehrwertfeld
Eintraege Kunden.[Merkmale]: 2
Kunden.Webseite: Hyperlink
Ziel Lager_extern: ;DATABASE=T:\extern.accdb
Ziel Lager_kaputt: ;DATABASE=T:\extern-weg.accdb
Abfrage AuftragsSumme: DAO-Typ 0
Abfrage qryAbDatum: DAO-Typ 0
Abfrage qryBrutto: DAO-Typ 0
Abfrage qryPreiseAnheben: DAO-Typ 48
Forms: 1
Modules: 1
Reports: 1
Scripts: 1
Was die Probe gezeigt hat
ProbeErgebnisWas das für Sie heißt
Lesen der Systemtabelle MSysObjects über OLE DB und DAO„Keine Leseberechtigung auf 'MSysObjects'.“ Innerhalb von Access selbst ließ sie sich lesen.Von außen führt der Weg über das Schema.
Spaltentyp von Anlage und MehrwertfeldOLE DB meldet Text, DAO Attachment bzw. ComplexText.Ein Skript mit OLE DB allein übersieht diese Felder.
Abfrage, die eine VBA-Funktion aufruftIn Access liefert sie Ergebnisse, über OLE DB: „Undefinierte Funktion 'BruttoBetrag' in Ausdruck.“Solche Abfragen laufen nur in Access.
SUM über ein Ja/Nein-Feld mit zwei Ja-Werten-2Ja-Werte beim Abgleich zählen.
Anlage über OLE DB lesen44 Byte Binärdaten statt der 24 Byte der OriginaldateiAnlagen über DAO speichern (SaveToFile): 24 Byte, SHA-256 gleich dem Original.
Mehrwertfeld über OLE DB lesen„Rahmenvertrag;Stammkunde“Mit .Value kommt je Wert eine Zeile; das hilft bei der Zuordnungstabelle.
Schreiben im Lesemodus (Mode=Read)Abgelehnt: „Operation muss eine aktualisierbare Abfrage verwenden.“ Die Gegenprobe mit Schreibzugriff lief.Das Skript öffnet die Datei nur lesend.

So nutzen Sie das Skript: Schließen Sie Access und speichern Sie das Skript als Datei. Rufen Sie es mit powershell -File inventar-access.ps1 -Datei C:\Test\Kopie.accdb an einer Kopie auf. Es braucht eine PowerShell in der Bitbreite von Access: Auf unserem Rechner mit 64-Bit-Office lief es unter 64-Bit-PowerShell, unter 32-Bit-PowerShell meldete es, der Provider sei nicht registriert. Auch eine Datei im älteren .mdb-Format ließ sich so lesen. Vergleichen Sie die Ausgabe vor und nach einer Übernahme mit den Werten im neuen System.

Grenzen: Eine kleine Testdatei beweist nicht, dass jede Datenbank ebenso reagiert. Formulare, Berichte und VBA kennt das Schema nicht; das Skript zählt nur, wie viele es davon gibt. SSMA und einen SQL Server haben wir nicht eingesetzt. Was hier zu beiden steht, stammt von Microsoft.

Bei einer Datenübernahme legen wir mit Ihnen vorher fest, welche Daten übernommen werden und wie doppelte oder unvollständige Einträge bereinigt werden.

Häufige Fragen

Lässt sich eine Access-Datenbank ins Internet stellen?

Mit Microsofts eigenen Mitteln nicht mehr. Die Access-Web-Apps und Webdatenbanken hat Microsoft in Microsoft 365 und SharePoint Online bis April 2018 geschlossen und nennt Power Apps als Alternative (Access-Web-Apps laut Microsoft (externe Website)). Das Access Database Engine 2016 Redistributable ist laut Microsoft nicht für serverseitige Webanwendungen gedacht, und sein Support endete am 14.10.2025 (Hinweise zum Access Database Engine (externe Website)).

Reicht es, die Datei in OneDrive oder SharePoint abzulegen?

Nein. Laut Microsoft sollten Sie eine Access-Datenbank nicht von diesen Speicherorten aus öffnen. Öffnet mehr als eine Person die Datei über SharePoint, können mehrere Kopien entstehen, und es kann zu unerwartetem Verhalten kommen (Möglichkeiten der Freigabe (externe Website)).

Was ist mit Aufbewahrungspflichten?

Das klären Sie vor der Umstellung mit Ihrer Steuerberatung, denn die Antwort hängt von Ihren Daten ab. Nehmen Sie die Bestandsliste mit: welche Tabellen steuerlich relevant sind, wer sie pflegt und wie Änderungen bisher nachvollziehbar sind. Bis zur Antwort bleibt die alte Datenbank unverändert.

Was kostet es, eine Access-Datenbank abzulösen?

Das hängt vor allem davon ab, wie viel Logik in Formularen, Berichten und VBA steckt und welche Datentypen eine eigene Lösung brauchen. Marktwerte für ein erstes Modul nennt unser Kostenratgeber Was kostet es, Software entwickeln zu lassen? Unsere eigenen Pakete finden Sie unter Preise und Pakete der Verwaltungssoftware.

Quellen

  1. Microsoft Support: Access-Spezifikationen. . Abgerufen am .
  2. Microsoft Support: Verwalten von Daten mit Access oder Excel. . Abgerufen am .
  3. Microsoft Support: Migrieren einer Access-Datenbank zu SQL Server. . Abgerufen am .
  4. Microsoft Learn: Supportende im Jahr 2025. . Abgerufen am .
  5. Microsoft Learn: Supportende im Jahr 2026. . Abgerufen am .
  6. Microsoft Learn: Supportende im Jahr 2029. . Abgerufen am .
  7. Microsoft Learn: Microsoft 365 Apps: Lebenszyklus. . Abgerufen am .
  8. Microsoft Learn: Moderne Lebenszyklusrichtlinie. . Abgerufen am .
  9. Microsoft Support: Aufteilen einer Access-Datenbank. . Abgerufen am .
  10. Microsoft Learn: Prepare Access databases for migration (AccessToSQL). . Abgerufen am .
  11. Microsoft Support: Verwalten verknüpfter Tabellen. . Abgerufen am .
  12. Microsoft Support: Herunterladen und Installieren von Microsoft 365 Access Runtime. . Abgerufen am .
  13. Microsoft Learn: Link Access applications to SQL Server and Azure SQL (AccessToSQL). . Abgerufen am .
  14. Microsoft Learn: Access linked table to SQL Server database returns #Deleted. . Abgerufen am .
  15. Microsoft Support: Dokumentieren und Drucken des Datenbankentwurfs. . Abgerufen am .
  16. Microsoft Learn: Project Settings (Type Mapping) (AccessToSQL). . Abgerufen am .
  17. Microsoft Support: Vergleich der Access- und SQL Server-Datentypen. . Abgerufen am .
  18. Microsoft Support: Datentypen für Access-Desktopdatenbanken. . Abgerufen am .
  19. Microsoft Learn: float and real (Transact-SQL). . Abgerufen am .
  20. Microsoft Learn: bit (Transact-SQL). . Abgerufen am .
  21. Microsoft Learn: Incompatible Access features (AccessToSQL). . Abgerufen am .
  22. Microsoft Learn: ntext, text, and image (Transact-SQL). . Abgerufen am .
  23. Microsoft Learn: Project Settings (Migration) (AccessToSQL). . Abgerufen am .
  24. Microsoft Support: Access Services in SharePoint – Roadmap. . Abgerufen am .
  25. Microsoft Download Center: Microsoft Access Database Engine 2016 Redistributable. . Abgerufen am .
  26. Microsoft Support: Möglichkeiten der Freigabe einer Access-Desktopdatenbank. . Abgerufen am .
  27. Microsoft Learn: Project Settings (Conversion) (AccessToSQL). . Abgerufen am .
  28. Microsoft Support: Erstellen oder Löschen eines mehrwertigen Felds. . Abgerufen am .

Redaktionsvermerk

Recherche und Entwurf mit KI-Unterstützung. Die Prüfung von Quellen, Zahlen und Aussagen durch Mohammad Alboush steht noch aus.

Inhalt noch nicht geprüft

Änderungen an diesem Beitrag

DatumArtÄnderung
ErstveröffentlichungBeitrag veröffentlicht

Fehler gefunden? Schreiben Sie uns an kontakt@datafalke.de. Wir korrigieren und vermerken die Änderung.

Ihr nächster Schritt

Welche Access-Datenbank bremst Ihr Team?

Beschreiben Sie den Ablauf in ein paar Sätzen. Im Erstgespräch schätzen wir ein, ob ein Pilot sinnvoll ist.

Menü

Erstgespräch vereinbarenEnglish