3 回答

TA貢獻1848條經(jīng)驗 獲得超10個贊
我剛剛對此進行了測試,它可以在Access 2010中使用。
假設您有一個帶有參數(shù)的SELECT查詢:
PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
您以交互方式運行該查詢,并提示您輸入[startID]和[endID]。可行,因此您可以將該查詢另存為[MemberSubset]。
現(xiàn)在,您基于該查詢創(chuàng)建一個UPDATE查詢:
UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
您以交互方式運行該查詢,并再次提示您輸入[startID]和[endID],并且效果很好,因此將其另存為[MemberSubsetUpdate]。
通過將[startID]和[endID]值指定為[MemberSubsetUpdate]的參數(shù),即使它們實際上是[MemberSubset]的參數(shù),也可以從VBA代碼運行[MemberSubsetUpdate]。這些參數(shù)值“滴流”到需要的位置,并且該查詢確實可以在沒有人工干預的情況下工作:
Sub paramTest()
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate")
qdf!startID = 1 ' specify
qdf!endID = 2 ' parameters
qdf.Execute
Set qdf = Nothing
End Sub

TA貢獻1765條經(jīng)驗 獲得超5個贊
嘗試使用QueryDefs。使用參數(shù)創(chuàng)建查詢。然后使用類似這樣的東西:
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("Your Query Name")
qdf.Parameters("Parameter 1").Value = "Parameter Value"
qdf.Parameters("Parameter 2").Value = "Parameter Value"
qdf.Execute
qdf.Close
Set qdf = Nothing
Set dbs = Nothing

TA貢獻1827條經(jīng)驗 獲得超9個贊
非常感謝您提供有關使用QueryDefs集合的信息!我一直在想這個問題。
我通過使用包含查詢參數(shù)的表以不使用VBA的不同方式進行了此操作。
例如:從QueryParameters,a_table中選擇a_table.a_field,在a_table.a_field與QueryParameters.a_field_min和QueryParameters.a_field_max之間
其中QueryParameters是具有兩個字段a_field_min和a_field_max的表
如果您在GROUP BY子句中包含查詢參數(shù)字段,并且在HAVING子句中的參數(shù)字段中包含F(xiàn)IRST運算符,則它甚至可以與GROUP BY一起使用。
添加回答
舉報