首页 文章

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

提问于
浏览
32

我有一个相当大的查询,加入了十几个表,我想根据id字段( e.g.between nStartID and nEndID )撤回记录 .

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

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

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

谢谢 .

4 回答

  • 58

    我刚测试了这个,它在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]的参数来从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
    
  • 1

    尝试使用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
    
  • 4

    非常感谢有关使用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一起使用 .

  • 20

    你也可以使用TempVars - 注意'!'语法是必不可少的
    You can also use TempVars - note '!' syntax is essential

相关问题