使用'IN'访问VBA参数查询
我有一个用于运行报表的查询表(由于一系列连接和各种其他复杂的条件 - 它必须是表格或失败,查询过多) )。使用'IN'访问VBA参数查询
我现在需要能够使用'IN'(从列表框中选择)过滤所使用的数据(它是总结字段)。
这是我想要的查询,[EWAList]是列表框中的选定项目,任何人都可以帮忙吗?
SELECT C.Num, P.Name, E.Phase, C.Code,
Sum(C.Hours) AS Hours, Sum(C.Total) AS Total,
Sum(TotalForC.Total) AS ETotal, E.E_Date
INTO CData
FROM (P INNER JOIN
(C INNER JOIN E ON C.EId=E.EId)
ON P.Number=E.Num)
INNER JOIN TotalForC ON E.EId=TotalForC.EId
WHERE (((C.DateCreated)>=[mydate]))
And E.E_Date<>'0'
And E.E_Date<>''
AND E.E_Number IN ([EWAList])
GROUP BY C.Num, P.Name, E.Phase, C.Code, E.E_Date;
任何帮助表示赞赏!我的想法在这一点上
感谢就行了尖断:-)
谢谢! Christy
您将需要使用VBA构建查询以获取IN列表。例如:
Dim qdf As QueryDef
'' ListBox is the name of your listbox, the item you are looking for is
'' in column 0 (first column) and it is numeric
For Each itm In Me.ListBox.ItemsSelected
EWAList = EWAList & "," & Me.ListBox.Column(0, itm)
Next
strSQL = "SELECT C.Num, P.Name, E.Phase, C.Code, " _
& "Sum(C.Hours) AS Hours, Sum(C.Total) AS Total, " _
& "Sum(TotalForC.Total) AS ETotal, E.E_Date " _
& "INTO CData " _
& "FROM (P INNER JOIN " _
& "(C INNER JOIN E ON C.EId=E.EId) " _
& "ON P.Number=E.Num) " _
& "INNER JOIN TotalForC ON E.EId=TotalForC.EId " _
& "WHERE (((C.DateCreated)>=[mydate])) " _
& "And E.E_Date<>'0' " _
& "And E.E_Date<>'' " _
& "AND E.E_Number IN (" & Mid(EWAList,2) & ") " _
& "GROUP BY C.Num, P.Name, E.Phase, C.Code, E.E_Date"
Set qdf = CurrentDB.QueryDefs("NameOfAnExistingQuery")
'' Permanentlt overwrite the sql of the query
qdf.SQL = strSQL
我可以使用vba创建列表 - 我无法弄清楚如何获取查询以使用'IN'作为参数 如果您尝试运行上面的查询并输入值列表,它将会不返回任何行,但如果您键入值的列表而不是使用参数,它将返回所有预期的内容.... – Christy 2010-07-13 14:47:43
我不认为你可以在这种情况下使用参数,只是一个文本字符串的SQL 。我不认为SQL注入在这种情况下会成为Access的问题,因为IN的数据是预定义的。 – Fionnuala 2010-07-13 14:57:51
我可能没有在上面解释得很好:-)我有一个表单,用户选择一个日期,然后点击继续。一旦他们点击继续,我想向他们展示列表框,让他们选择他们想要包含的项目并点击运行报告。然后,我的vba代码运行make table查询(上图),并根据使用创建的表的查询打开报表。那有意义吗? – Christy 2010-07-16 21:33:02
我的眼球正在受伤。你可以编辑你的文章,并添加一些换行符到你的代码示例? – PowerUser 2010-07-08 21:28:02
您可以使用代码按钮(带有1和0的按钮)来创建代码块。 – Fionnuala 2010-07-08 21:43:28