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

  1. Kompakt & reparieren
  2. Abfragen aufräumen
  3. Formulare abspecken
  4. Daten lokal zwischenspeichern
  5. Netzwerk & Lockfiles im Blick behalten
  6. 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.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

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