如何将传递查询分配给依赖于表单中另一个值的行源?
本质上我想这样做:
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
您还需要将
AfterUpdate
的CompanyID_Control
属性设置为:[Event Procedure]
。请注意,即使按照Remou的建议使用链接表,您仍然需要
AfterUpdate
的CompanyID_Control
事件中的代码来刷新组合框/列表框的行来源:Private Sub CompanyID_Control_AfterUpdate()
Me.MyComboOrListBox.Requery
End Sub
关于ms-access - MS Access通过依赖于窗体值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4937933/