【发布时间】:2015-06-16 13:41:44
【问题描述】:
很抱歉因为这可能是一个非常简单的问题而打扰大家。 我相当频繁地使用 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
【问题讨论】:
-
首先,最佳实践要求您应该使用准备好的语句(例如here)。其次,该 SQL 查询相当不稳定;您查询的具体目的是什么?
-
感谢您回复我。 “相当古怪”描述了我的大部分编码。对不起,我是个白痴,但我看过你的例子,但仍然不确定什么是“准备好的声明”。我将不得不花更多时间学习正确编码。
-
Prepared Statement 只是一个预先构建为字符串的查询,在将查询字符串编译为目的。它们处理值检查和对象文字格式(即正确的引号),并有助于防止 SQL 注入。
-
我上面链接的答案显示了如何将未准备好的查询(在问题中)更改为准备好的语句。这是另一天的另一个改进。现在,努力让您的
LIKE子句发挥作用,然后然后您可以考虑将其设为 Prepared Statement。 -
太好了。现在我在 PaulFrancis 的帮助下完成了查询,我可以查看 Prepared Statements,你们的 cmets 给了我一个很好的开始。再次感谢。