Wenn’s läuft, läuft’s – aber wie lange noch?
Viele Access-Anwendungen in KMU tun seit 15 Jahren zuverlässig ihren Dienst.
Und genau das ist das Problem. Niemand traut sich mehr ran.
Keiner kennt den Code. Und plötzlich geht nix mehr, wenn Office mal wieder was ändert.
Ich sag: Nicht wegwerfen. Modernisieren. Stück für Stück.
Warum Access nicht das Problem ist
Access ist schnell, leichtgewichtig, lokal.
Und ja – technisch veraltet.
Aber für viele interne Abläufe reicht’s völlig.
Was fehlt, ist:
- Trennung von Logik und Daten
- saubere Fehlerbehandlung
- sichere Datenzugriffe
- moderne Oberfläche (optional)
Meine Modernisierungs-Strategie
- Code entkoppeln – kein SQL im Formularereignis
- Zugriffe zentralisieren – eigene Datenzugriffsschicht
- Backend auf SQL Server umstellen
- Fehlerlogging einbauen
- Performance messen und verbessern
- Optional: Frontend mit Power Apps oder Web kombinieren
Beispiel: Schlechter Code
Private Sub btnSpeichern_Click()
CurrentDb.Execute "INSERT INTO Kunden (Name, PLZ) VALUES ('" & Me.txtName & "', '" & Me.txtPLZ & "')"
End Sub
Das sieht man oft.
Funktioniert, bis jemand einen Apostroph im Namen hat. Oder bis SQL Injection passiert.
Besser: Parameterisiert und gekapselt
Public Sub KundeAnlegen(strName As String, strPLZ As String)
Dim db As DAO.Database
Dim qd As DAO.QueryDef
Set db = CurrentDb
Set qd = db.CreateQueryDef("", _
"PARAMETERS [pName] TEXT, [pPLZ] TEXT; " & _
"INSERT INTO Kunden (Name, PLZ) VALUES ([pName], [pPLZ])")
qd!pName = strName
qd!pPLZ = strPLZ
qd.Execute dbFailOnError
End Sub
Und im Formular:
Private Sub btnSpeichern_Click()
On Error GoTo Fehler
Call KundeAnlegen(Me.txtName, Me.txtPLZ)
Exit Sub
Fehler:
MsgBox "Fehler: " & Err.Description
End Sub
Nächster Schritt: SQL Server Backend
- Tabellen in SQL Server anlegen
- Access-Frontend per ODBC verbinden
- Abfragen auf Pass-Through umstellen
- Performance prüfen
Vorteile:
- Mehrbenutzerfähig
- Transaktionssicher
- Backup-fähig
- Zugriff über andere Tools möglich
Logging einbauen
Public Sub SchreibeLog(Ereignis As String, Details As String)
CurrentDb.Execute "INSERT INTO Fehlerlog (Zeitpunkt, Ereignis, Details) " & _
"VALUES (Now(), '" & Ereignis & "', '" & Details & "')"
End Sub
On Error GoTo Fehler
' Code …
Exit Sub
Fehler:
Call SchreibeLog("Fehler bei Speichern", Err.Description)
So findest Du auch sporadische Fehler wieder.
Tabelle: Was ich modernisiere und wie
Alt | Neu |
---|---|
SQL im Formular | Prozedur mit Parametern |
Lokale Tabelle | ODBC auf SQL Server |
Inline-Fehler | Logging mit Detaildaten |
ComboBox mit DLookup | Recordset mit SQL JOIN |
Formular direkt auf Tabelle | Ungebunden + manueller Save |
Und wenn mehr gebraucht wird?
Du kannst Access-Formulare ersetzen:
- mit Power Apps
- mit einer kleinen Blazor- oder React-App
- mit Excel-Frontends (ja, manchmal reicht das)
Aber: Viele Anwendungen müssen nicht ersetzt werden.
Nur aufgeräumt. Und gepflegt.
Mein trockener Leitsatz
Wenn Access bei Dir seit 2008 läuft, ist es kein Müll.
Aber es hat einen Termin beim Zahnarzt nötig.
Ich bring das Ding wieder auf Kurs.
Du sparst Zeit, Nerven – und musst nix wegwerfen.
Keine Antworten