3 回答
TA贡献1848条经验 获得超10个赞
我刚刚对此进行了测试,它可以在Access 2010中使用。
假设您有一个带有参数的SELECT查询:
PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
您以交互方式运行该查询,并提示您输入[startID]和[endID]。可行,因此您可以将该查询另存为[MemberSubset]。
现在,您基于该查询创建一个UPDATE查询:
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
TA贡献1765条经验 获得超5个赞
尝试使用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
TA贡献1827条经验 获得超9个赞
非常感谢您提供有关使用QueryDefs集合的信息!我一直在想这个问题。
我通过使用包含查询参数的表以不使用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子句中包含查询参数字段,并且在HAVING子句中的参数字段中包含FIRST运算符,则它甚至可以与GROUP BY一起使用。
添加回答
举报