Autor: csbq
Beim Abfragen der Datenbank stoßen Sie häufig auf die folgende Situation:
Sie möchten beispielsweise seinen Benutzernamen und sein Passwort in einer Benutzerdatenbank abfragen, aber der vom Benutzer verwendete Name und das Passwort enthalten zufällig Sonderzeichen wie einfache Anführungszeichen, „|“-Zeichen, doppelte Anführungszeichen oder Bindestriche „&“. .
Sein Name ist beispielsweise 1'test und sein Passwort ist A|&900. Wenn Sie die folgende Abfrageanweisung ausführen, wird auf jeden Fall ein Fehler gemeldet:
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & UserID & "'"
SQL = SQL & " AND PWD='" & Passwort & "'",
weil Ihr SQL so aussehen wird:
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
In SQL wird „|“ zum Trennen von Feldern verwendet, daher geht offensichtlich etwas schief. Zur Bewältigung dieser Probleme stehen nun folgende Funktionen zur Verfügung:
Function ReplacementStr (TextIn, ByVal SearchStr As String, _
ByVal Replacement As String, _
ByVal CompMode As Integer)
Dim WorkText As String, Pointer As Integer
If IsNull(TextIn) Then
ReplacementStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText , SearchStr, CompMode)
Do While Pointer > 0
WorkText = Left(WorkText, Pointer - 1) & Replacement & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, _
SearchStr , CompMode)
Schleife
ReplacementStr = WorkText
End If
End Function
Funktion SQLFixup(TextIn)
SQLFixup = ReplacementStr(TextIn, "'", "''", 0)
Endfunktion
Funktion JetSQLFixup(TextIn)
Dim Temp
Temp = ReplacementStr(TextIn, "'", "''", 0)
JetSQLFixup = ReplacementStr(Temp, "|", "' & chr(124) & '", 0)
End Function
Funktion FindFirstFixup(TextIn)
Dim Temp
Temp = ReplacementStr(TextIn, "'", "' & chr(39) & '", 0)
FindFirstFixup = ReplacementStr(Temp, "|", "' & chr(124) & '" , 0)
Endfunktion
Nachdem Sie über die oben genannten Funktionen verfügen, verwenden Sie bitte Folgendes, bevor Sie eine SQL ausführen:
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & SQLFixup(UserID) & "'"
SQL = SQL & " AND PWD='" & SQLFixup(Password) & "'"