简体   繁体   English

Access vba错误3075语法

[英]Access vba Error 3075 syntax

I've tried to find an answer in the posts that are similar but I can't find where I need to put a extra syntax or remove one. 我试图在相似的帖子中找到答案,但是找不到需要额外语法或删除语法的位置。

The query on its own works if I put it in a listbox recordset in the property window as: 如果我将查询放入属性窗口中的列表框记录集中,查询将本身起作用:

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;

Now I want to have the same code in VBA as a kind of 'reset'. 现在,我想在VBA中具有与“重置”相同的代码。 For VBA it needed some altering: 对于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]"

I've read something about putting an extra ' in string parts of the code. 我读过一些有关在代码的字符串部分添加额外的'的内容。 But after several tries it still gives the error. 但是经过几次尝试,它仍然给出错误。

For an extra insight the error message is below: 有关更多信息,错误消息如下:

错误图片

Who can help me give insight in what I did wrong or what I forgot? 谁能帮助我洞悉自己做错了什么或忘记了什么?

Consider a parameterized query which avoids any need for quote enclosures. 考虑一个参数化查询,该查询避免了使用引号括起来的情况。 With DAO, you do so with the Parameters collection which specifies the placeholder name and data type and precedes the usual SQL commands (ie, SELECT , UPDATE , INSERT , DELETE , ALTER ): 使用DAO,您可以使用Parameters集合来指定占位符名称和数据类型,并在常规SQL命令(即SELECTUPDATEINSERTDELETEALTER )之前进行操作:

' 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()
...

In fact, the above prepared statement can be saved as a stored query and then just called by name for binding parameter values as the PARAMETERS clause is fully compliant in Access SQL: 实际上,上述准备好的语句可以保存为存储的查询,然后可以通过名称来调用以绑定参数值,因为PARAMETERS子句在Access SQL中完全兼容:

Set db = CurrentDb
Set qdf = db.QueryDefs("SavedQueryName")

' 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()

I've solved it in another way: 我用另一种方式解决了它:

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

As you can see I got rid of the different filters and applied only one filter that looks in the entire query / table. 如您所见,我摆脱了不同的过滤器,只应用了一个查询整个查询/表的过滤器。

Thanks everyone for thinking with me and giving me insight on how o tackle the problem of different filters. 感谢每个人与我一起思考,并为我提供了有关如何解决不同过滤器问题的见解。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM