2010-07-08 113 views
0

我有一個用於運行報表的查詢表(由於一系列連接和各種其他複雜的條件 - 它必須是表格或失敗,查詢過多) )。使用'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

回答

2

您將需要使用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