0
我使用的MS Access 2010过滤动态SQL语句2010
我有一个列表框,选择我查询的专栏中,我想知道的是它可以过滤第一或整个选择列表框中。
下面我有我的代码为整个选择和过程获取信息到一个空查询和过滤的船名和选择的列表框(它的工作原理,如果我只选择一个领域),但如果我做多选,然后我得到这个错误。
该错误消息是
运行时错误 '3075'
语法在查询表达式错误(逗号)“(((q1_shcedule.ship)= [表格]![按日期DLG清单报告选择]![dbShip]或IsNull([Forms]![dlg清单报表日期选择]![dcShip])))AND(Jan_10,Jan_11)=“SH”或(Jan_10,Jan_11)=“v”`
任何建议将非常感激。
谢谢。
Dim cdb As DAO.Database, qdf As DAO.QueryDef
Const queryName = "Manifest Report By Date Selection"
Dim strWhere As String
Dim strDate As String
Dim strEnd As String
Dim ctl As Control
Dim varItem As Variant
Dim Criteria As String
Dim itm As Variant
strWhere = "(" & CodeDate.Value & ")"
Set ctl = Me.CodeDate
For Each varItem In ctl.ItemsSelected
strWhere = strWhere & ctl.ItemData(varItem) & ", "
'Use this line if your value is text
'strWhere = (strWhere) & "'" & ctl.ItemData(varItem) & "',"
Next varItem
'trim trailing comma
strWhere = Left(strWhere, Len(strWhere) - 2)
strWhere = Right(strWhere, Len(strWhere) - 2)
Set cdb = CurrentDb
DoCmd.Close acQuery, queryName, acSaveNo
On Error Resume Next
DoCmd.DeleteObject acQuery, queryName
On Error GoTo 0
Set qdf = cdb.CreateQueryDef(queryName, _
"SELECT Q1_Schedule.[Resource Name], Gender, Company, Type, Position, Contract_End_Date, Q1_Schedule.IndividID, Q1_Schedule.Ship, Q1_Schedule.App, Q1_Schedule.SubApp, " + strWhere + " " & _
"FROM Resource INNER JOIN (Q4_Schedule INNER JOIN (Q3_Schedule INNER JOIN (Q2_Schedule INNER JOIN Q1_Schedule ON (Q2_Schedule.App = Q1_Schedule.App) AND (Q2_Schedule.Ship = Q1_Schedule.Ship) AND (Q2_Schedule.IndividID = Q1_Schedule.IndividID)) ON (Q3_Schedule.App = Q2_Schedule.App) AND (Q3_Schedule.Ship = Q2_Schedule.Ship) AND (Q3_Schedule.IndividID = Q2_Schedule.IndividID)) ON (Q4_Schedule.App = Q3_Schedule.App) AND (Q4_Schedule.Ship = Q3_Schedule.Ship) AND (Q4_Schedule.IndividID = Q3_Schedule.IndividID)) ON (Resource.IndividID = Q4_Schedule.IndividID) AND (Resource.IndividID = Q3_Schedule.IndividID) AND (Resource.IndividID = Q2_Schedule.IndividID) AND (Resource.IndividID = Q1_Schedule.IndividID) Where (((Q1_Schedule.Ship) = [Forms]![dlg Manifest Report by Date Selection]![dbShip] OR IsNull([Forms]![dlg Manifest Report by Date Selection]![dbShip]))) AND (" + strWhere + ") = ""SH"" Or (" + strWhere + ") = ""V"" ORDER BY Type DESC ")
' "ORDER BY Type DESC"
'Set qdf = cdb.OpenRecordset("Entire_Manifest", _
dbOpenDynaset, dbDenyRead)
Set qdf = Nothing
Set cdb = Nothing
DoCmd.OpenQuery queryName, acViewNormal, acEdit
Exit Sub
ErrorHandler:
MsgBox "Please Select A Range Of Date Or A Ship Name"
这应该是一个评论,而不是一个答案 –