是否有可能在Microsoft Access更新查询中以编程方式传递参数?
我有一个相当大的查询,join了十几个表,我想拉回基于id字段的logging( 例如 : between nStartID and nEndID
)。
我创build了两个参数,并将其作为标准进行testing,并且工作正常。
问题是,我需要从主查询中运行一个插入查询,并且在主查询中需要它们所在的参数。 所以,我需要传递参数给它编程。
任何人都知道如何做到这一点?
谢谢。
我刚刚testing了这个,它在Access 2010中工作。
假设你有一个带有参数的SELECT查询:
PARAMETERS startID Long, endID Long; SELECT Members.* FROM Members WHERE (((Members.memberID) Between [startID] And [endID]));
您以交互方式运行该查询,并提示您input[startID]和[endID]。 这工作,所以你保存该查询为[MemberSubset]。
现在,您基于该查询创build一个UPDATE查询:
UPDATE Members SET Members.age = [age]+1 WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
您交互地运行该查询,并再次提示您input[startID]和[endID],它运行良好,因此将其保存为[MemberSubsetUpdate]。
您可以通过将[startID]和[endID]值指定为[MemberSubsetUpdate]的参数,从VBA代码运行[MemberSubsetUpdate],即使它们实际上是[MemberSubset]的参数。 这些参数值“滴落”到需要的地方,查询在没有人为干预的情况下工作:
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
尝试使用QueryDefs。 使用参数创build查询。 然后使用这样的东西:
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
非常感谢关于使用QueryDefs集合的信息! 我一直在想这个。
我做了一个不同的方式,不使用VBA,通过使用包含查询参数的表。
例如:SELECT a_table.a_field FROM QueryParameters,a_table WHERE a_table.a_field BETWEEN QueryParameters.a_field_min AND QueryParameters.a_field_max
QueryParameters是包含两个字段a_field_min和a_field_max的表
如果在GROUP BY子句中包含查询参数字段,并且在HAVING子句中的参数字段中包含FIRST运算符,那么它甚至可以与GROUP BY一起使用。
您也可以使用TempVars – 注意'!' 语法至关重要