SQL in Access: Schmerzhaft ohne Unterstützung
Wenn Du mit Access arbeitest, kennst Du das:
SQL schreiben ist Trial & Error.
Kein IntelliSense. Kein Highlighting. Kein Fehlerfeedback.
Du schreibst Abfragen im SQL-Editor.
Und hoffst, dass keine Klammer fehlt.
Oder kein Tippfehler in Feldnamen steckt.
Access ist kein SSMS.
Aber es gibt Wege, SQL komfortabler zu machen.
Option 1: SQL in VBA schreiben mit Syntaxkontrolle
Ich schreibe SQL fast nur noch in VBA.
Weil ich dort mehr Kontrolle habe.
Und mir selbst Hilfen baue.
Beispiel: Komplexe SELECT-Abfrage als String
Function HoleKundenMitUmsatz() As DAO.Recordset
Dim sql As String
sql = "SELECT k.KundenID, k.Name, SUM(r.BetragNetto) AS Gesamt " & _
"FROM tblKunde AS k " & _
"INNER JOIN tblRechnung AS r ON k.KundenID = r.KundenID " & _
"GROUP BY k.KundenID, k.Name " & _
"HAVING SUM(r.BetragNetto) > 10000"
Set HoleKundenMitUmsatz = CurrentDb.OpenRecordset(sql)
End Function
Du hast Syntax-Highlighting.
Du kannst Code refactoren.
Und IntelliSense bei Tabellen- und Feldnamen – wenn Du dir Helfer baust.
Option 2: Eigene SQL-Helfer bauen
Ich nutze Funktionen, die mir SQL zusammensetzen.
So hab ich weniger Tippfehler.
Function SQL_SelectKunde(Optional ByVal ID As Long = 0) As String
Dim sql As String
sql = "SELECT KundenID, Name, Ort FROM tblKunde"
If ID > 0 Then
sql = sql & " WHERE KundenID = " & ID
End If
SQL_SelectKunde = sql
End Function
Oder modularer Aufbau:
Function SQL_BasisKunde() As String
SQL_BasisKunde = "SELECT KundenID, Name, Ort FROM tblKunde"
End Function
Function SQL_KundeNachOrt(ByVal ort As String) As String
SQL_KundeNachOrt = SQL_BasisKunde() & " WHERE Ort = '" & Replace(ort, "'", "''") & "'"
End Function
IntelliSense für Funktionen gibt’s sofort.
Und Du musst nicht alles neu schreiben.
Option 3: Add-Ins und externe Tools
Access selbst kann kein IntelliSense für SQL.
Aber es gibt Drittanbieter, die helfen:
- MZ-Tools: Code-Vervollständigung für VBA
- SQL Server Management Studio (SSMS): Für Abfragen gegen Access-ODBC
- Access DevTools Add-In: Intelligenter SQL-Editor (nur englischsprachig)
Wenn Du’s ernst meinst, lohnt sich ODBC zu einer echten SQL-Instanz.
Dort bekommst Du dann IntelliSense wie bei den Großen.
Option 4: Tabellenstruktur dynamisch prüfen
Du kannst Feldnamen aus der Datenbank holen.
So baust Du Dir Listen für IntelliSense im Kopf.
Sub ZeigeFelder(ByVal tabellenname As String)
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set tdf = CurrentDb.TableDefs(tabellenname)
For Each fld In tdf.Fields
Debug.Print fld.Name
Next fld
End Sub
Oder als MessageBox beim Tippen:
Function Feldliste(ByVal tabelle As String) As String
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim liste As String
Set tdf = CurrentDb.TableDefs(tabelle)
For Each fld In tdf.Fields
liste = liste & fld.Name & vbCrLf
Next fld
Feldliste = liste
End Function
Dann im Direktfenster:MsgBox Feldliste("tblKunde")
Nicht elegant. Aber hilfreich.
Option 5: SQL testen, bevor Du’s brauchst
Ich nutze diese Funktion ständig:
Function TestSQL(ByVal sql As String)
On Error GoTo Fehler
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
Debug.Print "OK: " & rs.RecordCount & " Datensätze"
rs.Close
Exit Function
Fehler:
Debug.Print "Fehler: " & Err.Description
End Function
Damit teste ich jeden SQL-String direkt.
Kein Umweg über Abfrageeditor. Kein Ratespiel.
Fazit? Du musst es Dir bauen.
Access gibt Dir kein IntelliSense für SQL.
Aber Du kannst Dir Hilfen bauen.
Mit VBA. Mit Struktur. Mit Tools.
So wird aus Rätselraten wieder Entwicklung.
Access SQL-Editor 2025: Endlich mehr Übersicht
Seit dem Access-Update Anfang 2025 hat Microsoft nachgelegt.
Der neue SQL-Editor bringt endlich ein paar der Funktionen, auf die wir seit Jahren warten:
- Syntax-Highlighting für SQL-Schlüsselwörter, Tabellen, Felder und Literale
- Automatisches Einrücken bei verschachtelten SELECTs
- Zeilennummern und bessere Fehlermeldungen
Noch kein IntelliSense wie in SSMS – aber deutlich angenehmer als vorher.
Die Navigation durch komplexe Abfragen ist jetzt möglich, ohne die Augen zu verknoten.
Und: Du kannst jetzt im SQL-Editor direkt zwischen SELECT, DATENBLATT und ENTWURFSANSICHT springen, ohne dass er alles formatiert.
Kurz: Kein Quantensprung – aber ein überfälliger Schritt nach vorn.
Wenn Du mit nativen Abfragen arbeitest, wirst Du den Unterschied spüren.
Keine Antworten