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
undrs.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
No responses yet