我在Access的子窗体(ProgramSubform)上有一个组合框,该组合框应该从表(程序)中列出项目的报告年份。大多数项目都有一个以上的报告年度,但是组合框始终只带来2014年。
例如,项目5278的下拉列表应为:
2012
2013
2014
相反,它只是
2014
这是我正在使用的选择查询。它以前工作正常,但是我不知道它什么时候停止工作。没有对表或子窗体进行任何更改。
SELECT Program.ReportYear
FROM Program
WHERE (((Program.ProjNo)='ProgramSubform.ProjNo'));
知道为什么它可能停止工作了,或者如何解决?
最佳答案
此WHERE
子句要求Access将查询返回的行限制为ProjNo值与文本字符串'ProgramSubform.ProjNo'匹配的行。
WHERE (((Program.ProjNo)='ProgramSubform.ProjNo'))
但是ProgramSubform.ProjNo实际上是子窗体上的数据控件。因此,请勿在名称旁边加上引号。
您可以通过
Forms
集合中的父窗体使用对控件的引用:WHERE Program.ProjNo= Forms![Parent Form]!ProgramSubform!ProjNo
如果要使用表单中的VBA代码构建
SELECT
语句,则可以包含控件的值而不是其名称:"WHERE Program.ProjNo=" & Me!ProgramSubform!ProjNo.Value
"WHERE Program.ProjNo='" & Me!ProgramSubform!ProjNo.Value & "'"
将第一个版本用于数字字段,第二个版本用于文本。
笔记:
我假设ProgramSubform是子窗体控件的名称。它也可以是该子表单控件中包含的表单的名称。但是这些名称可以不同。因此,请确保您使用了子窗体控件名称。
此查询用作子窗体上组合框的行源。每当
ProjNo.Value
更改时,您都希望更新组合中显示的值。您可以通过在Requery
的After Update事件中调用组合的ProjNo
方法来实现。