Właśnie przetestowane i działa w programie Access 2010.
Say masz SELECT zapytania z parametrami:
PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
uruchomić tę kwerendę interaktywnie i monituje o [startID] i [ endID]. To działa, więc zapisujesz to zapytanie jako [MemberSubset].
Teraz utworzyć kwerendę aktualizującą na podstawie tego zapytania:
UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
uruchomieniu tego zapytania interaktywnie i ponownie pojawi się monit [startID] i [endID] i to działa dobrze, więc go zapisać jako [MemberSubsetUpdate].
Można uruchomić [MemberSubsetUpdate] z kodu VBA, określając [wartość parametru startID] i wartość [endID] jako parametry parametru [MemberSubsetUpdate], mimo że są to w rzeczywistości parametry parametru [MemberSubset]. Te wartości parametrów „spływa” do miejsca, gdzie są one potrzebne, a kwerenda może działać bez interwencji człowieka:
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
Mam rozwiązanie dla mojej potrzeby, ale nie jestem pewien, czy to jest najlepsze.Stworzyłem zmienne globalne dla nStartID i nEndID, a następnie utworzę dla nich funkcję, jak w getStartID() i getEndID(), które odczytują te wartości. Następnie używam tych funkcji w klauzuli where pierwszego zapytania. Nie jest to najbardziej elegancki z rozwiązań, ale działa. Pozostawię to otwarte w przypadku, gdy ktoś inny ma doświadczenie, które chciałby udostępnić, na korzyść innych. Dziękuję za pomocne informacje. – Jav