使用多选列表框后出现错误 3075-运行查询
Posted
技术标签:
【中文标题】使用多选列表框后出现错误 3075-运行查询【英文标题】:Error 3075-Run Query after multi select listbox is utilized 【发布时间】:2016-06-08 12:48:52 【问题描述】:在 Access 2010 中有一个搜索表单,可根据特定条件过滤 FY 和 Quarters,并在查询中打开它们。其中一个条件是未绑定的多选列表框,SelectTime(例如,一个人选择“FY15-Q1 和 FY15 Q2”。数据存储在查询中,z_Basis_QSReport5_Proposal Details。我一直收到错误 3075。有人可以帮我写代码?
Private Sub Command56_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String
Set db = CurrentDb()
Set qdf = db.QueryDefs("z_Basis_QSReport5_Proposal Details_For_Report")
For Each varItem In Me!SelectTime.ItemsSelected
strCriteria = strCriteria & ",'" & Me!SelectTime.ItemData(varItem) & "'"
Next varItem
If Len(strCriteria) = 0 Then
MsgBox "You did not select anything from the list" _
, vbExclamation, "Nothing to find!"
Exit Sub
End If
strCriteria = Right(strCriteria, Len(strCriteria) - 1)
strSQL = "SELECT * FROM z_Basis_QSReport5_Proposal Details " & _
"WHERE z_Basis_QSReport5_Proposal Details.CriteriaFY IN(" & strCriteria & ");"
qdf.SQL = strSQL
DoCmd.OpenQuery "z_Basis_QSReport5_Proposal Details_For_Report"
Set db = Nothing
Set qdf = Nothing
End Sub
【问题讨论】:
【参考方案1】:我同意 @LiamH 的观点,即您需要用方括号将查询名称括起来。
此外,您似乎正在尝试动态更改查询的 SQL - 然后在保存更改之前调用查询
qdf.SQL = strSQL
**qdf.close**
DoCmd.OpenQuery "z_Basis_QSReport5_Proposal Details_For_Report"
话虽如此,我认为您应该查看参数查询或直接打开 SQL。
【讨论】:
【参考方案2】:创建查询、表和字段名称时;最好的做法是避免使用空格。但是,有一个解决方案。
当您使用 SQL 并且您有一个带有空格的表名时,您需要将其封装在方括号中。像这样:
"SELECT * FROM [z_Basis_QSReport5_Proposal Details] & _
"WHERE [z_Basis_QSReport5_Proposal Details].CriteriaFY .....
编辑
之前,我提到您可能应该在查询名称周围加上方括号,但是如果您查看示例here,您会发现在这种情况下空格是可以接受的。
如果我们返回到您的查询,strcriteria
是一个字符串,因此您需要将单引号括起来:
strSQL = "SELECT * FROM [z_Basis_QSReport5_Proposal Details] " & _
"WHERE [z_Basis_QSReport5_Proposal Details].CriteriaFY IN('" & strCriteria & "');"
此外,您需要先关闭查询,然后才能运行它。所以qdf.close
必须在docmd.openquery()
之前。
【讨论】:
非常感谢利亚姆!但现在有一个运行时错误 7874 说它找不到 z_Basis_QSReport5_Proposal Details_For_Report以上是关于使用多选列表框后出现错误 3075-运行查询的主要内容,如果未能解决你的问题,请参考以下文章