使用'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

+1

我的眼球正在受伤。你可以编辑你的文章,并添加一些换行符到你的代码示例? – PowerUser 2010-07-08 21:28:02

+1

您可以使用代码按钮(带有1和0的按钮)来创建代码块。 – Fionnuala 2010-07-08 21:43:28

您将需要使用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 
+0

我可以使用vba创建列表 - 我无法弄清楚如何获取查询以使用'IN'作为参数 如果您尝试运行上面的查询并输入值列表,它将会不返回任何行,但如果您键入值的列表而不是使用参数,它将返回所有预期的内容.... – Christy 2010-07-13 14:47:43

+0

我不认为你可以在这种情况下使用参数,只是一个文本字符串的SQL 。我不认为SQL注入在这种情况下会成为Access的问题,因为IN的数据是预定义的。 – Fionnuala 2010-07-13 14:57:51

+0

我可能没有在上面解释得很好:-)我有一个表单,用户选择一个日期,然后点击继续。一旦他们点击继续,我想向他们展示列表框,让他们选择他们想要包含的项目并点击运行报告。然后,我的vba代码运行make table查询(上图),并根据使用创建的表的查询打开报表。那有意义吗? – Christy 2010-07-16 21:33:02