选择查询不显示所有结果

3

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

例如,项目5278的下拉菜单应该是:

2012
2013
2014

相反,它只是

2014

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

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

有任何想法为什么它停止工作了,或者如何修复它?

请显示表格内容,并说明您的期望。目前不清楚您的结果是什么,以及您希望得到什么样的结果。 - hotfix
我在问题中添加了一些信息。这样清楚吗? - AxxieD
ProgramSubform.ProjNo 是什么?你是否正在处理一个包含名为 ProgramSubform 的子窗体控件的表单,该子窗体包括一个名为 ProjNo 的控件? - HansUp
是的,那正是它的意思。 - AxxieD
2个回答

1
这个 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 & "'"

对于数字字段,请使用第一个版本,对于文本字段,请使用第二个版本。

注:

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

  2. 此查询用作子窗体上组合框的行来源。每当ProjNo.Value更改时,您希望更新组合框中显示的值。您可以通过从ProjNo的“更新后”事件调用组合框的Requery方法来实现这一点。


这种方法是可行的,但它只会为所有报告带来第一个项目的年份。比如说我打开了编号为5278的项目,它会给我显示2012, 2013, 2014。当我切换到另一个项目时,它仍然会显示那些报告年份,即使该报告有2013, 2014 - AxxieD
1
我在这里使用了这个答案来刷新它,现在它完美地工作了。非常感谢!http://stackoverflow.com/questions/14471679/refresh-requery-combobox-problems - AxxieD
啊!我实际上是想说“重新查询”,“刷新”是一个错误。抱歉。 - HansUp

0
请注意括号,您在 WHERE 子句中的 Program.ProjNo 前有三个括号,但实际上只需要两个(在这种情况下),应该使用如下方式:
SELECT Program.ReportYear
FROM Program
WHERE ((Program.ProjNo='ProgramSubform.ProjNo'));

无论如何,您都会更喜欢:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接