Wenn Deine Access-Anwendung älter ist als der Azubi
Dann wird’s Zeit für ein Update.
Nicht alles neu schreiben – aber systematisch modernisieren.
Ich zeige Dir, worauf ich achte, wenn ich Access-Anwendungen zukunftsfähig mache.
Warum modernisieren statt ersetzen?
- Geringere Kosten
- Bestehendes Wissen nutzen
- Bewährte Prozesse erhalten
- Zugriff auf SQL Server, Office, Azure bleibt erhalten
Access ist nicht tot.
Aber ohne Pflege wird’s rostig.
Checkliste: Wichtige Modernisierungsschritte
1. Frontend und Backend trennen
Speichere Tabellen in einer eigenen .accdb oder SQL Server.
' Automatische Verknüpfung bei Start
Public Sub VerbindeTabellen()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
tdf.Connect = "ODBC;DSN=SQLSERVER_DSN;"
tdf.RefreshLink
End If
Next tdf
End Sub
2. Direkte SQLs aus Formularen entfernen
Kein SQL in Steuerelementen. Kein DoCmd.RunSQL
.
Nutze zentrale Funktionen mit Parameterbindung:
Public Sub KundeAnlegen(Name As String, PLZ As String)
Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("", _
"PARAMETERS pName TEXT, pPLZ TEXT; " & _
"INSERT INTO Kunden (Name, PLZ) VALUES (pName, pPLZ)")
qd!pName = Name
qd!pPLZ = PLZ
qd.Execute dbFailOnError
End Sub
3. Fehlerbehandlung konsequent einbauen
On Error GoTo Fehler
' … Code …
Exit Sub
Fehler:
MsgBox "Fehler: " & Err.Number & " - " & Err.Description
Optional: Fehler in Logtabelle schreiben.
4. Rechte sauber steuern
Keine Vollzugriffe für jeden.
Steuere Berechtigungen rollenbasiert.
If gstrRolle <> "Admin" Then
Me.AllowDeletions = False
Me.cmdLöschen.Visible = False
End If
Und Zugriff auf Tabellen via Views einschränken:
CREATE VIEW Sicht_Kunden_Vertrieb AS
SELECT KundenID, Name FROM dbo.Kunden WHERE Aktiv = 1;
5. Datenstruktur dokumentieren
Nutze eine eigene Tabelle für Spaltenbeschreibungen.
Oder exportiere Metadaten via VBA:
Public Sub TabellenStrukturExportieren()
Dim tdf As DAO.TableDef, fld As DAO.Field
For Each tdf In CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
For Each fld In tdf.Fields
Debug.Print tdf.Name & ";" & fld.Name & ";" & fld.Type
Next fld
End If
Next tdf
End Sub
6. Performance prüfen und optimieren
- Nutze Indexe gezielt
- Schränke Abfragen mit WHERE ein
- Verwende
Pass-Through
bei großen SQL-Abfragen - Keine DLookup in Endlosschleifen
' DLookup vermeiden
' Statt:
Me.txtPLZ = DLookup("PLZ", "Kunden", "KundenID = " & Me.cboKunde)
' Besser:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT PLZ FROM Kunden WHERE KundenID = " & Me.cboKunde)
If Not rs.EOF Then Me.txtPLZ = rs!PLZ
rs.Close
7. Oberflächen modernisieren
- Kein Autoform mehr
- Navigation zentral über Startformular
- Alle Formulare konsistent gestaltet
- Hinweise für den Nutzer
- Farben und Schriftgrößen vereinheitlichen
Optional: Modernes Ribbon-Menü selbst bauen.
8. Automatisierung integrieren
Du kannst Access mit Outlook, Excel, Word, SQL Server und Power Automate kombinieren.
Beispiel: Mailversand mit PDF-Anhang
Public Sub MailSenden(empfänger As String, anhangPfad As String)
Dim Mail As Object
Set Mail = CreateObject("Outlook.Application").CreateItem(0)
With Mail
.To = empfänger
.Subject = "Dokument"
.Body = "Bitte finden Sie das Dokument im Anhang."
.Attachments.Add anhangPfad
.Send
End With
End Sub
Tabelle: Alt vs. Modernisiert
Thema | Alt | Modernisiert |
---|---|---|
Tabellen | lokal | SQL Server oder Backend-DB |
SQL im Formular | fest verdrahtet | zentral in Funktionen |
Rechte | Alle dürfen alles | rollenbasiert + Sichtfilterung |
Fehlerbehandlung | Keine oder MsgBox | Logging + gezielte Reaktion |
Oberfläche | bunt und inkonsistent | strukturiert + einheitlich |
Performance | DLookup, viele Joins | Indexe + gezielte Datenabfragen |
Mein trockener Rat
Du musst Access nicht abschaffen.
Aber Du musst es behandeln wie jedes andere System.
Mit Struktur, Schutz und Weitblick.
Dann hält’s noch viele Jahre – ohne Bauchschmerzen.
No responses yet