2015-04-30 42 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

這應該是一個評論,而不是一個答案 –