繁体   English   中英

在MS Access 2010中筛选动态SQL语句

[英]Filtering dynamic SQL statement in MS Access 2010

我正在使用MS Access 2010

我有一个列表框可以选择查询的列,我想知道是否可以过滤列表框的第一个或整个选择。

下面我有我的代码,用于整个选择以及将信息查询到一个空查询并按船名和列表框进行过滤的过程(如果我仅选择一个字段,则可以使用),但是如果我进行了多次选择,则我得到这个错误。

错误消息是

运行时错误'3075'
查询表达式'((((q1_shcedule.ship)= [Forms]![按日期选择的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"  

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

暂无
暂无

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

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