Ziel: Access nicht sprengen – sondern sauber wachsen lassen

Access kann viel. Aber nicht alles.
Wenn Du anfängst mit 5.000 Datensätzen – kein Problem.
Bei 50.000 wird’s träge.
Bei 500.000 solltest Du anfangen, SQL Server zu mögen.

Ich zeig Dir, wie Du Access trotzdem sauber hältst – und wann Du auf SQL Server umsteigen solltest.

Variante 1: Tabellen in separate Datei auslagern

Frontend/Backend-Trennung:

  • App.accdb = Formulare, Berichte, Logik
  • Daten.accdb = nur Tabellen

Verknüpfung per DoCmd.TransferDatabase oder Linked Table Manager

Vorteil: kleineres Frontend, besser wartbar

Aber:
Das behebt keine Performanceprobleme bei großen Datenmengen.

Variante 2: Indizes setzen – aber nur gezielt

Access liebt Primärschlüssel.
Und gezielte Such-Indizes.

Beispiel:

CurrentDb.Execute "CREATE INDEX ix_KundenName ON tblKunden(Name)"

Aber: nie auf Felder, die sich dauernd ändern oder NULLs enthalten.
Und: nicht zu viele Indizes – sonst wird’s beim Speichern langsam.

Variante 3: Abfragen statt Tabellen binden

Kein Formular sollte auf SELECT * FROM Tabelle laufen.
Immer nur die Daten, die Du wirklich brauchst.

SELECT ID, Name, Ort FROM tblKunden WHERE Aktiv = True ORDER BY Name

In VBA:

Me.RecordSource = "SELECT * FROM qryAktiveKunden"

Große Tabellen nie als Endlosformular binden – lieber Suchmaske + Detailformular.

Variante 4: Nur gefilterte Recordsets öffnen

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblArtikel WHERE Kategorie = 'Elektro'")

Nie OpenRecordset("SELECT * FROM tblArtikel") mit 200.000 Zeilen – das killt Dir alles.

Variante 5: Temporäre Tabellen nutzen

Große Berechnungen → weg von der UI.
Statt Dauer-Join mit 4 Tabellen lieber:

CurrentDb.Execute "SELECT * INTO tmpUmsatz FROM qryBerechnet WHERE Jahr = 2024"

Dann tmpUmsatz im Formular verwenden.
Danach wieder löschen.

Variante 6: Daten archivieren

Altlasten auslagern.

Beispiel:

CurrentDb.Execute "INSERT INTO tblArchiv SELECT * FROM tblBewegung WHERE Datum < #01.01.2022#"
CurrentDb.Execute "DELETE FROM tblBewegung WHERE Datum < #01.01.2022#"

Tabellen bleiben schlank.
Berichte greifen optional auf Archiv zu.

Variante 7: Komprimieren & reparieren automatisch

Access speichert alles. Auch alten Kram.

Application.CompactRepair "C:\Projekt\Daten.accdb", "C:\Projekt\Daten_neu.accdb"

Danach neu verknüpfen. Am besten regelmäßig einplanen (z. B. nach dem Wochenende).

Wann ist Schluss?

Wenn Du…

  • regelmäßig mehr als 200.000 Zeilen hast
  • gleichzeitig mehr als 5 Benutzer
  • mehrere Tabellen mit über 1 GB Inhalt
  • komplexe Joins über 4+ Tabellen
  • APIs, BI-Tools oder Exporte parallel brauchst

…dann: Access als Frontend behalten, SQL Server als Backend einführen.

So migrierst Du nach SQL Server

  1. SQL Server Express installieren (kostenlos)
  2. Tabellen per „Upsizing Wizard“ oder SSMA migrieren
  3. Verknüpfung per ODBC (z. B. DSN-less)
DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;Driver={SQL Server};Server=SRV01;Database=MeineDB;Trusted_Connection=Yes;", _
acTable, "dbo.Kunden", "dbo_Kunden"
  1. Performance prüfen (Indexe, Stored Procs, Views nutzen)
  2. Access bleibt leicht – SQL Server macht die schwere Arbeit

Fazit für Entwickler

Access ist kein Data Warehouse.
Aber mit Disziplin, klaren Abfragen und Zwischenstufen kriegst Du auch mittlere Mengen sauber durch.
Ab 100k Zeilen denk bitte an SQL Server.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert