Autor: csbq
Ao consultar o banco de dados, você frequentemente encontrará a seguinte situação:
Por exemplo, você deseja consultar seu nome de usuário e sua senha em um banco de dados de usuário, mas o nome e a senha usados pelo usuário possuem caracteres especiais, como aspas simples, sinais "|", aspas duplas ou hifens "&" .
Por exemplo, seu nome é 1'test e sua senha é A|&900. Quando você executa a seguinte instrução de consulta, um erro será definitivamente relatado:
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & UserID & "'"
SQL = SQL & " AND PWD='" & Password & "'"
porque seu SQL ficará assim:
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
No SQL, "|" é usado para separar campos, então algo obviamente dará errado. As seguintes funções agora são fornecidas para lidar com essas dores de cabeça:
Função ReplaceStr (TextIn, ByVal SearchStr como string, _
ByVal substituição como string, _
ByVal CompMode como inteiro)
Dim WorkText como string, ponteiro como inteiro
If IsNull (TextIn) Then
ReplaceStr = 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)
Loop
ReplaceStr = WorkText
End If
End Função
Função SQLFixup(TextIn)
SQLFixup = ReplaceStr(TextIn, "'", "''", 0)
Função final
Função JetSQLFixup (TextIn)
Dim Temp
Temp = ReplaceStr (TextIn, "'", "''", 0)
JetSQLFixup = ReplaceStr (Temp, "|", "' & chr (124) & '", 0)
Função final
Função FindFirstFixup (TextIn)
Dim Temp
Temp = ReplaceStr (TextIn, "'", "' & chr (39) & '", 0)
FindFirstFixup = ReplaceStr (Temp, "|", "' & chr (124) & '" , 0)
Função final
Depois de ter as funções acima, antes de executar um sql, use:
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & SQLFixup(UserID) & "'"
SQL = SQL & "AND PWD='" & SQLFixup(Senha) & "'"