我试图从文本框中过滤数据网格,但是如果撇号或“apos”在文本框中键入,我使用ADODB和VB6
Public Sub pGetCustomer(Optional vSearch As String)
If vSearch = "'" Then
xRSTree.Filter = adFilterNone
xRSTree.Requery
Else
xRSTree.Filter = "description like '%" & vSearch & "%' or customercode like '%" & vSearch & "%'"
End If
Private Sub txtSearch_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
答案 0 :(得分:3)
正如它在ADO文档中所说的那样(人们何时会陷入这种奇怪的习惯,即调用ADO“ADODB”???):
注意要在过滤器值中包含单引号('),请使用两个单引号来表示一个。例如,要对
O'Malley
进行过滤,条件字符串应为"col1 = 'O''Malley'"
。要在过滤器值的开头和结尾包括单引号,请用井号(#)括起该字符串。例如,要过滤'1'
,标准字符串应为"col1 = #'1'#"
。
您还必须在此处考虑通配符规则:
如果Operator LIKE ,Value可以使用通配符。只允许使用星号(
*
)和百分号(%
)通配符,它们必须是字符串中的最后一个字符。值不能为null
。
但有点令人困惑:
在 LIKE 子句中,您可以在模式的开头和结尾使用通配符(例如,
LastName Like '*mit*'
),或者仅在模式的末尾使用通配符(例如,LastName Like 'Smit*'
)。
答案 1 :(得分:2)
你需要"逃避"你的qoutes或单个qoutes。简单的方法是在vSearch中替换所有'与''和所有"用""。