如何将传递查询分配给依赖于表单中另一个值的行源?

本质上我想这样做:

SELECT x.companyid,
       x.companyname,
       x.productid
  FROM x
 WHERE (((x.CompanyID) = [Forms]![Reporting]![CompanyID_Control]))
ORDER BY x.productid;


但是当然,传递查询不支持对任何表单控件的引用。

我已经读过here,说有一种通过VBA的方法,但是我不知道如何将VBA与控件的行源一起使用。

最佳答案

就像Remou在回答中所说的那样,链接表将使此过程变得更加容易。但是,如果您有一个名为MyQuery的传递查询,则可以执行以下操作以使MyComboOrListBox控件的RowSource在CompanyID_Control的值更改时动态更新:

Private Sub CompanyID_Control_AfterUpdate()
Dim SQL As String, qdf AS DAO.QueryDef
    Set qdf = CurrentDB.QueryDefs("MyQuery")
    qdf.SQL = " SELECT  x.companyid, x.companyname, x.productid " & _
              " FROM x " & _
              " WHERE x.CompanyID =" & Me.CompanyID_Control & _
              " ORDER BY x.productid;"
    Me.MyComboOrListBox.RowSource = "MyQuery"
End Sub


您还需要将AfterUpdateCompanyID_Control属性设置为:
[Event Procedure]

请注意,即使按照Remou的建议使用链接表,您仍然需要AfterUpdateCompanyID_Control事件中的代码来刷新组合框/列表框的行来源:

Private Sub CompanyID_Control_AfterUpdate()
    Me.MyComboOrListBox.Requery
End Sub

关于ms-access - MS Access通过依赖于窗体值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4937933/

10-09 02:13