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, LogikDaten.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
- SQL Server Express installieren (kostenlos)
- Tabellen per „Upsizing Wizard“ oder SSMA migrieren
- 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"
- Performance prüfen (Indexe, Stored Procs, Views nutzen)
- 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.
No responses yet