选择“查询不显示所有结果”

时间:2015-06-18 19:44:47

标签: sql ms-access ms-access-2010

我在Access中的子窗体( ProgramSubform )上有一个组合框,它应该从表( Program )列出项目的报告年份。大多数项目都有一年以上的报告,但组合框总是只带来2014年。

例如,项目5278的下拉列表应为:

2012
2013
2014

相反,它只是

2014

这是我正在使用的选择查询。以前工作正常,但我不知道它何时停止工作;没有对表格或子表格进行任何更改。

SELECT Program.ReportYear
FROM Program
WHERE (((Program.ProjNo)='ProgramSubform.ProjNo'));

知道为什么它可能已经停止工作,或者如何修复它?

2 个答案:

答案 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 & "'"

将第一个版本用于数字字段,或将第二个版本用于文本。

注意:

  1. 我假设 ProgramSubform 是子表单 control 的名称。它也可以是该子表单控件中包含的表单的名称。但这些名字可能不同。因此,请确保使用子表单 control 名称。

  2. 此查询用作子窗体上组合框的行源。您希望在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';