我有一个查询非常大,连接了十几个表,我想根据一个id字段(例如:在nStartID和nEndID之间
)返回记录。
我创建了两个参数并将它们作为条件进行了测试,效果很好。
问题是,我需要从这个主查询中运行一个插入查询,并且需要在主查询中使用这些参数。因此,我需要以编程方式传递参数。
有人知道如何实现吗?
谢谢。
我有一个查询非常大,连接了十几个表,我想根据一个id字段(例如:在nStartID和nEndID之间
)返回记录。
我创建了两个参数并将它们作为条件进行了测试,效果很好。
问题是,我需要从这个主查询中运行一个插入查询,并且需要在主查询中使用这些参数。因此,我需要以编程方式传递参数。
有人知道如何实现吗?
谢谢。
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]的参数,在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
Dim qdf As DAO.QueryDef; Set qdf = db.CreateQueryDef("", "UPDATE Members SET Members.age = [age]+1")
。 - Nat尝试使用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 = "参数值"
。不确定它是以零为基础的还是从一开始。 - iDevlopSELECT 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
一起使用。
已经有很多回复了,但你可以使用这个:
Sub runQry(qDefName)
Dim db As DAO.Database, qd As QueryDef, par As Parameter
Set db = CurrentDb
Set qd = db.QueryDefs(qDefName)
On Error Resume Next
For Each par In qd.Parameters
Err.Clear
par.Value = Eval(par.Name) 'try evaluating param
If Err.Number <> 0 Then 'failed ?
par.Value = InputBox(par.Name) 'ask for value
End If
Next par
On Error GoTo 0
qd.Execute dbFailOnError
End Sub
Sub runQry_test()
runQry "test" 'qryDef name
End Sub