Debuggen von SQL-SELECT-Anweisungen

In größeren Anwendungen ist es oft hilfreich, wenn der Benutzer mit SQL-Kenntnissen eigene Abfragen erstellen kann, ohne dass Sie ihm den Abfrageassistenten zur Verfügung stellen. Allerdings sollte dann auf andere Weise gewährleistet sein, dass der SQL-Code korrekt ist. Wie das geht, zeigt folgender Beitrag

Benutzer mit grundlegenden SQL-Kenntnissen können im Prinzip ganz einfach durch Eingabe der SQL-Anweisungen und eines Namens eigene Abfragen und Filter erstellen. Dazu müssen sie nur die SQL Anweisung unter dem eingegebenen Namen als Abfrage speichern. Problematisch ist das jedoch, wenn die SQL-Anweisung fehlerhaft formuliert wurde. Zum einen ist dann nicht immer das Speichern möglich, zum anderen verursacht eine solche Abfrage spätestens dann Fehler, wenn sie ausgeführt werden soll. Um das zu vermeiden, sollten Sie vorab prüfen, ob die SQL-Anweisung korrekt ist.

Trial and Error

Zur Syntaxprüfung einer SQL-Anweisung können Sie einmal versuchen, die Anweisung mit der Execute-Methode des Connection-Objekts auszuführen. Problematisch ist dies natürlich bei Aktionsabfragen. Wenn zur Prüfung schon Datensätze gelöscht werden, die zu diesem Zeitpunkt vielleicht noch benötigt werden, ist das natürlich nicht praktikabel. Aus diesem Grund müssen Sie dafür sorgen, dass ausschließlich Auswahlabfragen, die mit dem Schlüsselwort SELECT beginnen, überprüft werden. Andernfalls sollten Sie eine entsprechende Fehlermeldung zurückgeben. Wie das geht, zeigt Listing 1.

Function SyntaxCheck(strSQL As String, _
objConn As ADODB.Connection, Optional ByRef _
strFehler As String) As Boolean
'Prüfen, ob es sich um eine SELECT-Anweisung handelt
If Not (InStr(1, Trim(strSQL), "SELECT") = 1) Then
'Keine Select-Anweisung
strFehler = "Es handelt sich nicht um eine " & _
"SELECT-Anweisung, ein Test ist daher nicht möglich!"
SyntaxCheck = False
Exit Function
End If
On Error GoTo FEHLER
objConn.Execute (strSQL)
SyntaxCheck = True
Exit Function
FEHLER:
strFehler = Err.Description
SyntaxCheck = False
Exit Function
End Function

Die Funktion SyntaxCheck erwartet zwei Parameter. Der dritte ist optional. Mit dem ersten geben Sie die zu prüfende SQL-Anweisung an, mit dem zweiten Parameter die Datenbankverbindung, die zur Prüfung verwendet werden soll. Der dritte Parameter ermöglicht die Übergabe einer Variablen des Typs String, über die zusätzlich zum booleschen Rückgabewert die Fehlerbeschreibung zurückgegeben werden kann.

Innerhalb der Funktion prüfen Sie zunächst, ob die SQL-Anweisung mit SELECT beginnt. Dazu schneiden Sie mit Trim die führenden und abschließenden Leerzeichen ab und prüfen dann mit der instr-Funktion, ob die Zeichenkette mit SELECT beginnt. Falls das nicht der Fall ist, definieren Sie als Rückgabewert false und weisen dem Parameter strFehler eine entsprechende Fehlermeldung zu.

Mit der Anweisung On Error GoTO FEHLER schalten Sie dann die Standardfehlerbehandlung aus und sorgen dafür, dass bei einem Laufzeitfehler zur Marke FEHLER gesprungen wird. Hier weisen Sie der Variablen strFehler die Fehlerbeschreibung des Err-Objekts zu und legen den Rückgabewert der Funktion auf false fest. Mit der Execute-Methode führen Sie dann die SELECTAnweisung aus. Gelingt dies, wird die Anweisung SyntaxCheck=True ausgeführt und der Rückgabewert auf True gesetzt. Andernfalls wird in die Fehlerbehandlungsroutine FEHLER verzweigt. In beiden Fällen wird die Funktion nun mit Exit Sub verlassen.