我很抱歉打扰你们这可能是一个非常简单的问题。 我经常使用DAO Select查询,但从不需要根据表单字段使用“Like”进行过滤。
附加代码应根据组合框(comboRes)进行过滤,抛出一个
查询表达式错误中的语法错误(缺少运算符)。
我猜错误在于Like '*' " & strRes & " '*'
,但我尝试了许多组合而没有快乐。
有人可以理顺我的语法/代码吗?
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Set db = CurrentDb
Dim strRes As String
strRes = Me.comboRes
Set qdf = db.QueryDefs("qryInst")
strSQL = "SELECT tblInst.*, tblInst.ResList " & _
"FROM tblInst " & _
"WHERE (((tblInst.ResList) Like '*' " & strRes & " '*'t ));"
qdf.SQL = strSQL
DoCmd.OpenQuery "qryInst"
qdf.Close
db.Close
Set qdf = Nothing
Set db = Nothing
答案 0 :(得分:0)
您的SQL需要稍微更改一下。 like
运算符采用字符串,通配符取决于ANSI查询模式 - 请参阅here - 因此您可能需要使用%
而不是*
。因此,要匹配strRes
中任意位置tblInst.ResList
的内容,请使用以下内容:
"WHERE tblInst.ResList Like '*" & strRes & "*';"
请注意,使用此类代码时,您很容易受到SQL injection的攻击。</ p>
答案 1 :(得分:0)
您需要将字符串变量连接到LIKE
子句
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Set db = CurrentDb
Dim strRes As String
strRes = Me.comboRes
Set qdf = db.QueryDefs("qryInst")
strSQL = "SELECT tblInst.*, tblInst.ResList " & _
"FROM tblInst " & _
"WHERE tblInst.ResList Like '*" & strRes & "*';"
qdf.SQL = strSQL
DoCmd.OpenQuery "qryInst"
qdf.Close
db.Close
Set qdf = Nothing
Set db = Nothing
因此,如果您的strRes
为Paul
,您的SQL将转换为。
SELECT tblInst.*, tblInst.ResList FROM tblInst WHERE tblInst.ResList Like '*Paul*';"