我在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方法来实现。

09-30 21:50