我试图在相似的帖子中找到答案,但我找不到需要添加额外语法或删除语法的地方。
如果我将它放在属性窗口中的列表框记录集中,则它自身的查询有效:
SELECT Overzicht_codes.code_compleet AS Code, Overzicht_codes.omschrijving1, Overzicht_codes.omschrijving2, Overzicht_codes.omschrijving3, Overzicht_codes.omschrijving4, Overzicht_codes.omschrijving5, Overzicht_codes.omschrijving6
FROM Overzicht_codes
WHERE (((Nz([opleidingniveau]=[Forms]![OverzichtOpleidingen].[cbOpleiding],[opleidingniveau]))<>False)
AND ((Nz([subniveau]=[Forms]![OverzichtOpleidingen].[cbopleidingniveau],[subniveau]<>False))<>False)
AND ((Nz([studiegroep]=[Forms]![OverzichtOpleidingen].[cbstudiegroep],[studiegroep]<>False))<>False)
AND ((Nz([studierichting]=[Forms]![OverzichtOpleidingen].[cbstudierichting],[studierichting]<>False))<>False))
ORDER BY Overzicht_codes.code_compleet;
现在我想在VBA中使用相同的代码作为一种“重置”。对于VBA,它需要一些改变:
SQL = "SELECT Overzicht_codes.code_compleet AS Code, Overzicht_codes.omschrijving1, Overzicht_codes.omschrijving2, Overzicht_codes.omschrijving3, Overzicht_codes.omschrijving4, Overzicht_codes.omschrijving5, Overzicht_codes.omschrijving6 " _
& "FROM Overzicht_codes " _
& "WHERE (((Nz([opleidingniveau]= " & Me.cbOpleiding & ",Overzicht_codes.[opleidingniveau]))<>False) " _
& "AND ((Nz([subniveau]= " & Me.cbOpleidingNiveau & ",Overzicht_codes.[subniveau]<>False))<>False) " _
& "AND ((Nz([studiegroep]= " & Me.cbStudiegroep & ",Overzicht_codes.[studiegroep]<>False))<>False) " _
& "AND ((Nz([studierichting]= " & Me.cbStudierichting & ",Overzicht_codes.[studierichting]<>False))<>False)) " _
& "ORDER BY Overzicht_codes.[code_compleet]"
我已经阅读了一些关于在代码的字符串部分添加额外'
的内容。但经过多次尝试,它仍然会出错。
如需进一步了解,错误信息如下:
谁能帮助我洞察我做错了什么或忘记了什么?
答案 0 :(得分:2)
考虑一个参数化查询,它可以避免任何引用封装的需要。使用DAO,您可以使用Parameters集合来指定占位符名称和数据类型,并在通常的SQL命令之前(即SELECT
,UPDATE
,INSERT
,{ {1}},DELETE
):
ALTER
实际上,上面准备好的语句可以保存为存储查询,然后只需按名称调用绑定参数值,因为' PREPARED STATEMENT WITH PLACEHOLDERS
strSQL = "PARAMETERS [cbOpleiding_param] TEXT, [cbopleidingniveau_param] TEXT," _
& " [cbstudiegroep_param] TEXT, [cbstudierichting_param] TEXT;" _
& "SELECT Overzicht_codes.code_compleet AS Code, Overzicht_codes.omschrijving1," _
& " Overzicht_codes.omschrijving2, Overzicht_codes.omschrijving3," _
& " Overzicht_codes.omschrijving4, Overzicht_codes.omschrijving5," _
& " Overzicht_codes.omschrijving6 " _
& "FROM Overzicht_codes " _
& "WHERE (((Nz([opleidingniveau]= [cbOpleiding_param], Overzicht_codes.[opleidingniveau]))<>False) " _
& "AND ((Nz([subniveau]= [cbopleidingniveau_param], Overzicht_codes.[subniveau]<>False))<>False) " _
& "AND ((Nz([studiegroep]= [cbstudiegroep_param], Overzicht_codes.[studiegroep]<>False))<>False) " _
& "AND ((Nz([studierichting]= [cbstudierichting_param], Overzicht_codes.[studierichting]<>False))<>False)) " _
& "ORDER BY Overzicht_codes.[code_compleet];"
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", strSQL)
' BIND VALUES TO PARAMETERS
qdf.Parameters("cbOpleiding_param") = Me.cbOpleiding
qdf.Parameters("cbopleidingniveau_param") = Me.cbOpleidingNiveau
qdf.Parameters("cbstudiegroep_param") = Me.cbStudiegroep
qdf.Parameters("cbstudierichting_param") = Me.cbStudierichting
Set rst = qdf.OpenRecordset()
...
子句完全符合Access SQL:
PARAMETERS
答案 1 :(得分:0)
我用另一种方式解决了它:
Dim db As dao.Database
Dim rst As dao.Recordset
Dim qdf As dao.QueryDef
Dim SQL As String
SQL = "SELECT code_compleet as Code, omschrijving1, omschrijving2, omschrijving3, omschrijving4, omschrijving5, omschrijving6 " _
& "FROM Overzicht_codes " _
& "WHERE omschrijving1 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR omschrijving2 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR omschrijving3 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR omschrijving4 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR omschrijving5 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR omschrijving6 LIKE '*" & Me.tbOmschrijving & "*' " _
& " OR code_compleet LIKE '*" & Me.tbOmschrijving & "*' " _
& "ORDER BY [code_compleet] "
Set db = CurrentDb
Set qdf = CurrentDb.CreateQueryDef("", SQL)
Set rst = qdf.OpenRecordset()
Set Me.lbOpleidingOverzicht.Recordset = rst
Me.lbOpleidingOverzicht.Requery
Set qdf = Nothing
Call EmptyRecords
正如您所看到的,我摆脱了不同的过滤器,只应用了一个查看整个查询/表格的过滤器。
感谢大家与我一起思考并让我深入了解如何解决不同过滤器的问题。