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,INnutzen 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
dbOpenSnapshotfĂŒr lesende Abfragen- Immer
Set rs = Nothingundrs.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
.accdeauf 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