DAO'Like'选择查询的语法

时间:2015-06-16 13:41:45

标签: sql vba dao sql-like

我很抱歉打扰你们这可能是一个非常简单的问题。 我经常使用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

2 个答案:

答案 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

因此,如果您的strResPaul,您的SQL将转换为。

SELECT tblInst.*, tblInst.ResList FROM tblInst WHERE tblInst.ResList Like '*Paul*';"