Wenn’s klemmt: Erstmal ruhig bleiben
Du kennst das.
Die Anwendung läuft seit Jahren.
Und plötzlich dauert alles gefühlt ewig.
Formulare bauen langsam auf.
Berichte brauchen ewig.
Oder alles hängt kurz – ohne ersichtlichen Grund.
Heißt nicht: Access ist Schrott.
Heißt: Es ist Zeit, genauer hinzusehen.
Typische Ursachen (aus der Praxis)
- Tabellen zu groß, Frontend zu alt
- Netzwerk zu langsam oder instabil
- Abfragen nicht optimiert
- Formulare mit zu vielen Steuerelementen
- Dauerhafte Verknüpfungen zu Excel oder SharePoint
- Temporäre Dateien nicht aufgeräumt
- AutoCorrect aktiviert
- Hintergrundprozesse greifen auf dieselben Daten zu
Einzeln kein Drama. Zusammen eine Zeitbombe.
Erste Hilfe: Kompakt + reparieren
Fang einfach an.
VBA:
Application.CompactRepair SourceFile:=CurrentDb.Name, _
DestinationFile:=CurrentDb.Name, _
LogFile:=False
Oder manuell per Menü.
Danach ist oft wieder deutlich mehr Dampf drin.
Abfragen optimieren – kein SQL für die Galerie
Großer Fehler: Access-SQL wie aus dem Bauch heraus schreiben.
Langsam:
SELECT * FROM tblKunden WHERE UCase(Nachname) = 'MEIER';
Besser:
SELECT * FROM tblKunden WHERE Nachname = 'Meier';
Funktionen wie UCase
in der WHERE-Klausel killen Indexnutzung.
VBA: Recordsets gezielt öffnen
Vermeide DAO-Recordsets ohne WHERE.
Schlecht:
Set rs = CurrentDb.OpenRecordset("tblArtikel")
Besser:
Set rs = CurrentDb.OpenRecordset( _
"SELECT ArtikelNr, Preis FROM tblArtikel WHERE Aktiv = True", dbOpenSnapshot)
Und: Schließe, was Du öffnest. Immer.
rs.Close: Set rs = Nothing
Sonst bleibt RAM liegen – oder sperrt andere.
Formulare: Weniger ist mehr
Wenn ein Formular 50 Steuerelemente lädt, wird’s zäh.
Meine Faustregel:
- Max. 20 sichtbare Felder pro Formular
- Keine verschachtelten Unterformulare ohne Bedarf
- Beim Öffnen: Nur aktuelle Datensätze laden
Beispiel:
DoCmd.OpenForm "frmAuftrag", , , "AuftragsNr = 12345", , , "Nur1"
Im Form_Load
kannst Du dann prüfen:
If Me.OpenArgs = "Nur1" Then
Me.Recordset.FindFirst "AuftragsNr = 12345"
End If
Netzwerk: Vermeide Dauerverkehr
Wenn das Backend auf einem Netzlaufwerk liegt: Keine ständigen Abfragen.
Hol Dir Daten lokal, arbeite damit, speicher am Ende.
Oder: SQL Server nehmen. Access als Frontend.
Temporäre Dateien: Leichen im Keller
Access legt gerne .laccdb-Dateien an.
Wenn die nicht sauber gelöscht werden, kann’s haken.
Tipp: Beim Start prüfen, ob alte Lockfiles existieren – und ggf. löschen.
Beispiel:
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(CurrentProject.Path & "\Daten_be.laccdb") Then
Kill CurrentProject.Path & "\Daten_be.laccdb"
End If
Nur machen, wenn wirklich niemand sonst drauf zugreift.
Noch was: AutoCorrect abschalten
Die automatische Namenskorrektur verlangsamt alles.
Und bringt sowieso nur Ärger.
Einstellungen:
- Datei → Optionen → Objekt-Designer
- Haken raus bei „AutoKorrektur von Namen verfolgen“
Monitoring für Fortgeschrittene
Baue Dir ein einfaches Log-System.
Beispiel:
Sub SchreibeLog(msg As String)
Dim f As Integer
f = FreeFile
Open CurrentProject.Path & "\log.txt" For Append As #f
Print #f, Now & vbTab & msg
Close #f
End Sub
Dann kannst Du messen, wo es hakt.
Mein Rezept gegen langsames Access
- Kompakt & reparieren
- Abfragen aufräumen
- Formulare abspecken
- Daten lokal zwischenspeichern
- Netzwerk & Lockfiles im Blick behalten
- Logs schreiben – nicht raten
Wenn Du willst, schau ich mir Deine Anwendung mal an.
Mit einem kühlen Blick – und einer Stoppuhr.
Dann wird Access wieder so schnell wie früher. Oder schneller.
No responses yet