而不是使用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不遵循此设置?
答案 0 :(得分:2)
在您的示例代码中......
Forms!frmResults!frmResultsSub.Requery
... frmResultsSub
是一个子窗体控件,它包含查询而不是表单。换句话说,其SourceObject
属性设置为“Query.qrySearch”。
在这种情况下,子窗体控件的Requery
无法识别对查询设计的更改。
将子表单的SourceObject
属性设置为其原始值足以使Access识别查询设计更改...
Forms!frmResults!frmResultsSub.SourceObject = "Query.qrySearch"