我有一個相當大的查詢,加入了十多個表格,並且我想根據id字段取回記錄(,例如:between nStartID and nEndID
)。是否可以在Microsoft Access更新查詢中以編程方式傳遞參數?
我創建了兩個參數,並將它們作爲條件進行測試,它們工作正常。
問題是,我需要從主查詢運行一個插入查詢,並且在主查詢中需要它們所在的參數。所以,我需要以編程方式將參數傳遞給它。
任何人都知道如何做到這一點?
謝謝。
我有一個相當大的查詢,加入了十多個表格,並且我想根據id字段取回記錄(,例如:between nStartID and nEndID
)。是否可以在Microsoft Access更新查詢中以編程方式傳遞參數?
我創建了兩個參數,並將它們作爲條件進行測試,它們工作正常。
問題是,我需要從主查詢運行一個插入查詢,並且在主查詢中需要它們所在的參數。所以,我需要以編程方式將參數傳遞給它。
任何人都知道如何做到這一點?
謝謝。
我只是測試這一點,它在Access 2010年工作
假設你有一個帶參數的SELECT查詢:
PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
您運行查詢交互,它會提示您輸入[startID]和[ endID所。這是有效的,所以你把這個查詢保存爲[MemberSubset]。
現在你創建基於查詢的更新查詢:
UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
你交互式運行查詢,並再次提示您輸入[startID]和[endID所]和它工作得很好,所以你將它保存爲[MemberSubsetUpdate]。
通過將[startID]和[endID]值指定爲[MemberSubsetUpdate]的參數,即使它們實際上是[MemberSubset]的參數,您也可以從VBA代碼運行[MemberSubsetUpdate]。這些參數值「涓滴」到需要的地方,且查詢並無需人工干預工作:
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
感謝分享,我找到了類似的代碼,但沒有解釋。 – Jav
非常感謝有關使用QueryDefs收集的信息!我一直在想這件事。
我通過使用包含查詢參數的表,以不同的方式使用VBA。
如: SELECT a_table.a_field FROM QueryParameters,a_table WHERE a_table.a_field BETWEEN QueryParameters.a_field_min和QueryParameters.a_field_max
凡QueryParameters是一個表有兩個字段,a_field_min和a_field_max
它甚至可以與GROUP BY一起使用,如果在GROUP BY子句中包含查詢參數字段,並且在HAVING子句中的參數字段中包含FIRST運算符。
嘗試使用QueryDefs。使用參數創建查詢。然後使用類似這樣的東西:
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
我想你也可以通過編號引用'.Parameters',比如'qdf.Parameters(1).Value =「Parameter Value」'。不確定它是否基於零。 –
這是對的,我確認它是基於零的。 –
您也可以使用TempVars - note'!'語法是必不可少的
我有我的需求的解決方案,但不知道它是否是最好的。我爲nStartID和nEndID創建了全局變量,然後爲每個創建一個函數,如getStartID()和getEndID(),它們讀取這些值。然後我只是在原始查詢的where子句中使用這些函數。不是最優雅的解決方案,但它的工作原理。 如果其他人有他們想分享的經驗,爲了他人的利益,我會離開這裏。感謝您的有益幫助。 – Jav