Select 查询未显示所有结果

Select Query Doesn't Show All Results

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

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

2012
2013
2014

相反,它只是

2014

这是我正在使用的 select 查询。之前还可以,不知道什么时候就不行了;未对 table 或子表单进行任何更改。

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

知道为什么它可能停止工作,或者如何解决它吗?

注意括号,在 WHERE 子句的 Program.ProjNo 之前有三个,但您只需要两个括号(在本例中),您应该使用:

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

无论如何你会喜欢:

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

WHERE 子句要求 Access 将查询返回的行限制为 ProjNo 值与文本字符串 [=53= 匹配的行]

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 name.

  2. 此查询用作子窗体上组合框的行源。您想在 ProjNo.Value 更改时更新组合中显示的值。您可以通过从 ProjNo.

  3. 的更新后事件调用组合的 Requery 方法来完成此操作