访问:以子表单

时间:2016-01-31 14:15:10

标签: ms-access

而不是使用DoCmd.OpenQuery "qrySearch", , acReadOnly来查看查询的结果,我正在使用表单来帮助进行演示,包括一些命令按钮,例如导出到Excel等。 请注意,查询可以显示可变数量的字段,具体取决于用户选择的条件。

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

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

在frmSub的属性下: -

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

  • 在frmResultsSub

  • 设置的名称

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

问题: 如果用户执行另一次搜索,并且当前打开frmResults,为了更新结果,我必须关闭frmResults并再次打开它。这确实有效,但我认为这不是推荐的方式 - 有什么方法可以刷新frmResults而它仍处于打开状态?

我尝试了各种各样的排列

Forms!frmResults!frmResultsSub.Requery / .Refresh

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

[仍然需要Access 2003合规性]

编辑:基于HansUp和亚历山大的第一次回复......

Alexander :.Requery(/ frmResults显示)发生在接近用户接收用户搜索条件的表单上的搜索按钮后面的VBA末尾(frmSearch,单独的表单不是详细说明)...

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

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

HansUp :替换上面一行

Forms!frmResults!frmResultsSub.Requery

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

...诀窍,效果很好 - 所有已经打开的frmResults的新搜索都会更新,而无需重新打开表单。但我很困惑!...虽然我已经将子窗体的SourceObject设置为与上面详述的相同的值(在设计视图中的子窗体属性下) - 为什么Access不遵循此设置?

1 个答案:

答案 0 :(得分:2)

在您的示例代码中......

Forms!frmResults!frmResultsSub.Requery

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

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

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

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