【问题标题】:Access: update query in sub form访问:更新子表单中的查询
【发布时间】:2016-02-01 06:15:11
【问题描述】:

我没有使用DoCmd.OpenQuery "qrySearch", , acReadOnly 查看查询结果,而是使用表单来帮助演示,包括用于导出到 Excel 等的几个命令按钮。 请注意,查询可以根据用户选择的条件显示可变数量的字段。

为此,我创建了 2 个表单:frmResults 和 frmSub

通过将 frmSub 从 Forms 选项卡拖到 frmResults(在设计视图中打开),将 frmSub 放置在 frmResults 中。

在 frmSub 的属性下:-

  • 源对象已从 frmSub 更改为 Query.qrySearch。

  • 在 frmResultsSub 中设置的名称

由于现在不再使用原始的 frmSub,因此我已将其删除(至少,以我有限的访问经验,我认为这样做是安全的,因为对显示在 frmResults 中的查询似乎没有影响 -表单显示良好,字段和字段编号根据搜索条件而有所不同。

问题: 如果用户执行另一个搜索,并且 frmResults 当前处于打开状态,为了更新结果,我必须关闭 frmResults 并再次打开它。这确实有效,但我认为这不是推荐的方式 - 有没有办法在 frmResults 仍然打开时刷新它?我已经尝试了各种排列的

Forms!frmResults!frmResultsSub.Requery/.Refresh

从搜索表单本身后面,但没有任何效果。

[仍需要 ms Access 2003 合规性]

编辑:基于 HansUp 和 Alexander 的第一个回复...

Alexander:.Requery(/frmResults 显示)发生在 VBA 末尾附近的搜索按钮后面用于接受用户搜索条件的表单(frmSearch,一个单独的表单不是以上详述)...

If CurrentProject.AllForms("frmResults").IsLoaded Then
    Forms!frmResults!frmResultsSub.Requery
Else: DoCmd.OpenForm "frmResults"
End If

--> 是 Forms!frmResults!frmResultsSub.Requery 没有针对当前打开的 frmResults 表单上的新用户搜索进行更新。

HansUp:替换上一行

Forms!frmResults!frmResultsSub.Requery

Forms!frmResults!frmResultsSub.SourceObject = "Query.qrySearch"

...成功了,并且运行良好 - 已打开的 frmResults 上的所有新搜索都会更新,而无需重新打开表单。但是我很困惑!...虽然我已经将子窗体的 SourceObject 设置为与上面详述的值相同的值(在设计视图中的子窗体属性下) - 为什么 Access 不支持此设置?

【问题讨论】:

  • 请发布您放置 .Requery 语句的完整上下文。通常,表单中的 Me.Requery 或 Forms!frmResults.Requery 应该可以工作。如果您只想重新查询子表单,您可能需要使用:Forms!frmResults!frmResultsSub.Form.Requery,因为 frmResultsSub 只处理子表单在主表单中所在的字段。
  • 感谢 Alexander,请参阅我的编辑:我的原始帖子中的 cmets。

标签: ms-access


【解决方案1】:

在您的示例代码中...

Forms!frmResults!frmResultsSub.Requery

...frmResultsSub 是一个包含查询而不是表单的子表单控件。换句话说,它的SourceObject 属性设置为“Query.qrySearch”

在这种情况下,子表单控件的Requery 无法识别查询设计的更改。

将子窗体的SourceObject 属性设置为其原始值足以让Access 识别查询设计更改...

Forms!frmResults!frmResultsSub.SourceObject = "Query.qrySearch"

【讨论】:

  • 感谢 HansUp,这行得通!但我很困惑(虽然我已经在 sub 的属性下设置了这个)...请在我的原始帖子中查看我的编辑:cmets。
  • 当您调用Requery 时,Access 似乎不会检查查询的设计是否已更改。当您关闭然后重新打开表单(如您所见)时,它将检查设计。如果你调用SourceObject,它会检查查询设计,即使你给它的值相同(“Query.qrySearch”)。这就是我能告诉你的全部内容;我不知道为什么它会这样运作。对不起。
  • ...这让我有点担心,因为我不确定在设计视图中设置属性值是否有用,如果 Access 有时可以忽略它们。另一方面,这可能会加强在 VBA 中设置(关键?)属性的价值。谢谢大家的时间,我要去酒吧了:)
猜你喜欢
  • 2019-01-07
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多