是否可以在Microsoft Access更新查询中以编程方式传递参数?

Jav*_*Jav 34 parameters ms-access vba ms-access-2010

我有一个查询这是相当大的,在加盟十几张桌子,我想拉回来基于一个id字段记录(:between nStartID and nEndID).

我创建了两个参数并将它们作为标准进行测试,它们运行良好.

问题是,我需要在主查询中运行来自此主查询的插入查询,并且需要它们所在的参数.所以,我需要以编程方式将参数传递给它.

任何人都知道如何做到这一点?

谢谢.

Gor*_*son 60

我刚测试了这个,它在Access 2010中有效.

假设您有一个带参数的SELECT查询:

PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
Run Code Online (Sandbox Code Playgroud)

您以交互方式运行该查询,并提示您输入[startID]和[endID].这是有效的,所以你将该查询保存为[MemberSubset].

现在,您可以基于该查询创建UPDATE查询:

UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
Run Code Online (Sandbox Code Playgroud)

您以交互方式运行该查询,并再次提示您输入[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
Run Code Online (Sandbox Code Playgroud)

  • 如果您在 VBA 中创建查询,这也适用;例如`Dim qdf As DAO.QueryDef; Set qdf = db.CreateQueryDef("", "UPDATE Members SET Members.age = [age]+1")` (2认同)

小智 22

尝试使用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
Run Code Online (Sandbox Code Playgroud)

  • 我想你也可以用数字来引用`.Parameters`,比如`qdf.Parameters(1).Value ="Parameter Value"`.不确定它是否为零. (3认同)
  • 那是对的,我确认它基于零. (3认同)