我在Access中的子窗体( ProgramSubform )上有一个组合框,它应该从表( Program )列出项目的报告年份。大多数项目都有一年以上的报告,但组合框总是只带来2014年。
例如,项目5278的下拉列表应为:
2012
2013
2014
相反,它只是
2014
这是我正在使用的选择查询。以前工作正常,但我不知道它何时停止工作;没有对表格或子表格进行任何更改。
SELECT Program.ReportYear
FROM Program
WHERE (((Program.ProjNo)='ProgramSubform.ProjNo'));
知道为什么它可能已经停止工作,或者如何修复它?
答案 0 :(得分:1)
此WHERE
子句要求Access将查询返回的行限制为 ProjNo 值与文本字符串匹配的行&#39; ProgramSubform.ProjNo&#39; < / em>的
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 是子表单 control 的名称。它也可以是该子表单控件中包含的表单的名称。但这些名字可能不同。因此,请确保使用子表单 control 名称。
此查询用作子窗体上组合框的行源。您希望在ProjNo.Value
更改时更新组合中显示的值。您可以通过Requery
的After Update事件调用组合的ProjNo
方法来完成此操作。
答案 1 :(得分:0)
注意括号,你在WHERE子句上的Program.ProjNo之前有三个,但你只需要两个括号(在这种情况下)你应该使用:
SELECT Program.ReportYear
FROM Program
WHERE ((Program.ProjNo='ProgramSubform.ProjNo'));
无论如何你会更喜欢:
SELECT Program.ReportYear
FROM Program
WHERE Program.ProjNo='ProgramSubform.ProjNo';