DAO 的语法 'Like' Select 查询

Syntax for DAO 'Like' Select Query

很抱歉打扰大家,这可能是一个非常简单的问题。 我经常使用 DAO Select 查询,但从来不需要使用基于表单字段的 'Like' 进行过滤。

应根据组合框 (comboRes) 进行过滤的附加代码会抛出

Syntax error (missing operator) in query expression error.

我猜错误出在 Like '*' " & strRes & " '*' 但我已经尝试了很多组合,但没有任何乐趣。

有人可以理顺我的 syntax/code 吗?

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

您的 SQL 需要稍微更改一下。 like 运算符采用字符串,通配符取决于 ANSI 查询模式 - 请参阅 here - 因此您可能需要使用 % 而不是 *。因此,要匹配 tblInst.ResList 中任何位置 strRes 的内容,请使用以下内容:

"WHERE tblInst.ResList Like '*" & strRes & "*';"

请注意,当您使用这种代码风格时,您很容易受到 SQL injection 的攻击。

您需要将字符串变量连接到 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*';"