【问题标题】:Select Query Doesn't Show All Results选择查询不显示所有结果
【发布时间】:2015-06-18 19:44:46
【问题描述】:

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

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

2012
2013
2014

相反,它只是

2014

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

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

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

【问题讨论】:

  • 请显示表格内容,以及您的期望。目前尚不清楚您的结果是什么以及您希望获得什么结果。
  • 我在问题中添加了一些信息。这说明清楚了吗?
  • 什么是ProgramSubform.ProjNo?您是否正在处理包含名为 ProgramSubform 的子表单控件且该子表单包含名为 ProjNo 的控件的表单?
  • 是的,就是这样。

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


【解决方案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 是子窗体 control 的名称。它也可以是包含在该子表单控件中的表单的名称。但这些名称可能不同。所以请确保您使用了子表单 control 名称。

  2. 此查询用作子表单上组合框的行源。您希望在 ProjNo.Value 更改时更新组合中显示的值。您可以通过在 ProjNo 的 After Update 事件中调用组合的 Requery 方法来完成此操作。

【讨论】:

  • 这类作品,除了它只为所有报告带来第一个项目的年份。所以说我打开它到 ProjNo 5278,它给了我2012, 2013, 2014。当我切换到另一个项目时,它仍然会向我显示那些报告年份,即使此报告有,比如 2013 年、2014 年`。
  • 我在这里使用了这个答案来刷新它,现在它工作得很好。非常感谢你! stackoverflow.com/questions/14471679/…
  • 确认!我的意思是RequeryRefresh 是个错误。对不起。
【解决方案2】:

注意括号,在 WHERE 子句的 Program.ProjNo 之前有三个,但你只需要两个括号(在这种情况下)你应该使用:

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

无论如何你都会喜欢:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多