2015-04-30 41 views
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" 

回答

0

在创建查询并研究它之前,打印出您的SQL字符串。

+0

这应该是一个评论,而不是一个答案 –