1. Tabellenstruktur prĂŒfen

  • Felder nur, wenn sie wirklich gebraucht werden
  • Keine unnötigen Memo-Felder (Langtext)
  • Felddatentypen korrekt wĂ€hlen (kein „Text“ fĂŒr Zahlen)
  • PrimĂ€rschlĂŒssel setzen – immer

Beispiel:

ALTER TABLE tblAuftrÀge ADD CONSTRAINT pk_Auftrag PRIMARY KEY (ID);

2. Indizes sinnvoll nutzen

  • Indizes auf Felder, nach denen hĂ€ufig gefiltert oder sortiert wird
  • Kombi-Indizes fĂŒr komplexe WHERE-Bedingungen
  • Keine Indizes auf Felder mit wenigen eindeutigen Werten (z. B. Status)

Beispiel:

CREATE INDEX ix_KundeDatum ON tblAuftrÀge (KundenID, Auftragsdatum);

3. Abfragen optimieren

  • Kein SELECT *, sondern nur benötigte Felder
  • WHERE-Klauseln konkret halten
  • TOP, WHERE, IN nutzen statt Nachladen in Formularen

Beispiel:

SELECT TOP 100 ID, Kundenname FROM tblKunden WHERE Aktiv=True ORDER BY ErfasstAm DESC;

4. Formulare gezielt laden

  • Nur anzeigen, was wirklich gebraucht wird
  • Unterformulare filtern – nicht alles pauschal laden
  • Tab-Steuerelemente verzögert laden (OnChange)

Beispiel:

Private Sub tabSteuerung_Change()
    If Me.tabSteuerung.Value = 1 Then
        Me.sfAuftrÀge.Form.RecordSource = "SELECT * FROM tblAuftrÀge WHERE KundenID=" & Me!KundenID
    End If
End Sub

5. Recordsets bewusst öffnen

  • Nur DAO, kein Mix mit ADO
  • dbOpenSnapshot fĂŒr lesende Abfragen
  • Immer Set rs = Nothing und rs.Close

Beispiel:

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Name FROM tblKunden", dbOpenSnapshot)

' Verarbeitung hier

rs.Close
Set rs = Nothing

6. Frontend und Backend trennen

  • Immer aufteilen in .accde (Frontend) und .accdb (Backend)
  • TabellenverknĂŒpfung lokal cachen – mit TableDef.Connect

Verbindung bei Start prĂŒfen:

If Dir(CurrentProject.Path & "\Backend.accdb") = "" Then
    MsgBox "Backend nicht gefunden."
End
End If

7. Netzwerkzugriffe minimieren

  • Nur kleine DatensĂ€tze ĂŒber das Netz
  • Keine großen Abfragen auf riesige Tabellen ohne Filter
  • Temp-Tabellen lokal im Frontend verwenden, nicht im Backend

Beispiel:

DoCmd.TransferDatabase acImport, "Microsoft Access", BackendPfad, acTable, "tblExport", "tmpExport"

8. Komprimierung und Reparatur automatisieren

  • Access-Dateien blĂ€hen sich auf
  • RegelmĂ€ĂŸig komprimieren – idealerweise tĂ€glich nach Dienstschluss

Beispiel mit JRO:

Dim j As Object
Set j = CreateObject("JRO.JetEngine")
j.CompactDatabase "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DB\Alt.accdb", _
                  "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DB\Neu.accdb"

9. TemporÀre Tabellen statt Abfragen

  • Komplexe Daten vorbereiten in tmp_-Tabellen
  • Dann Formular auf Tabelle binden statt verschachtelter Abfrage
CurrentDb.Execute "SELECT * INTO tmp_Monatsdaten FROM qryMonatsdaten", dbFailOnError

10. VBA-Code gezielt optimieren

  • Schleifen reduzieren
  • Rechenintensive VorgĂ€nge vermeiden
  • Array-Puffer statt Recordsets bei Massenoperationen

Beispiel:

Dim arr() As Variant
arr = CurrentDb.OpenRecordset("SELECT ID, Wert FROM tblDaten", dbOpenSnapshot).GetRows

' Array durchlaufen statt Recordset.MoveNext

11. Logging abschalten im Produktivbetrieb

  • Debug.Print raus
  • MsgBox raus
  • Nur Logging, wenn explizit aktiviert (z. B. blnDebug=True)

12. Frontend regelmĂ€ĂŸig aktualisieren

  • Lokale .accde auf dem Client
  • Auto-Update-Skript per Batch oder VBA beim Start
  • Kein Arbeiten direkt aus Netzlaufwerken

Beispiel:

If FileDateTime(ServerVersion) > FileDateTime(LocalVersion) Then
    ' Kopieren und Neustart erzwingen
End If

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

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