是否有可能在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 – 注意'!' 语法至关重要 您也可以使用TempVars  - 注意'!'语法至关重要