Auteur : csbq
Lors de l'interrogation de la base de données, vous rencontrerez souvent la situation suivante :
Par exemple, vous souhaitez interroger son nom d'utilisateur et son mot de passe dans une base de données d'utilisateurs, mais le nom et le mot de passe utilisés par l'utilisateur contiennent des caractères spéciaux, tels que des guillemets simples, des signes "|", des guillemets doubles ou des traits d'union "&". .
Par exemple, son nom est 1'test et son mot de passe est A|&900. Lorsque vous exécutez l'instruction de requête suivante, une erreur sera certainement signalée :
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & UserID & "'"
SQL = SQL & " AND PWD='" & Mot de passe & "'"
car votre SQL ressemblera à ceci :
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
En SQL, "|" est utilisé pour séparer les champs, donc quelque chose va évidemment mal se passer. Les fonctions suivantes sont désormais proposées pour faire face à ces maux de tête :
Fonction ReplaceStr (TextIn, ByVal SearchStr sous forme de chaîne, _
ByVal remplacement sous forme de chaîne, _
ByVal CompMode sous forme d'entier)
Dim WorkText sous forme de chaîne, pointeur sous forme d'entier
If IsNull (TextIn) Then
ReplaceStr = Null
Else
WorkText = TextIn
Pointer = InStr (1, WorkText , SearchStr, CompMode)
Do While Pointer > 0
WorkText = Left(WorkText, Pointer - 1) & Remplacement & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Remplacement), WorkText, _
SearchStr , CompMode)
Boucle
ReplaceStr = WorkText
End If
End Function
Fonction SQLFixup(TextIn)
SQLFixup = ReplaceStr(TextIn, "'", "''", 0)
Fin de fonction
Fonction JetSQLFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, "'", "''", 0)
JetSQLFixup = ReplaceStr(Temp, "|", "' & chr(124) & '", 0)
Fin de fonction
Fonction FindFirstFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, "'", "' & chr(39) & '", 0)
FindFirstFixup = ReplaceStr(Temp, "|", "' & chr(124) & '" , 0)
Fin de la fonction
Après avoir utilisé les fonctions ci-dessus, avant d'exécuter un SQL, veuillez utiliser :
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & SQLFixup(UserID) & "'"
SQL = SQL & " AND PWD='" & SQLFixup (Mot de passe) & "'"