而不是使用 DoCmd.OpenQuery "qrySearch", , acReadOnly
查看查询结果我选择的标准 .
为此,我创建了两个表单:frmResults和frmSub
通过将frmSub从Forms选项卡拖到frmResults(在Design视图中打开),将frmSub放在frmResults中 .
在frmSub的属性下: -
-
源对象已从frmSub更改为Query.qrySearch .
-
在frmResultsSub设置的名称
由于现在不再使用原始的frmSub,我已经删除了它(至少,由于我的访问经验有限,我认为这样做是安全的,因为对于在frmResults中显示的查询没有任何影响 - 表单很好地显示字段和字段编号根据搜索条件而有所不同 .
Question: 如果用户执行另一次搜索,并且当前打开frmResults,为了更新结果,我必须关闭frmResults并再次打开它 . 这确实有效,但我不推荐的方式 - 是否有任何方法刷新frmResults,而它's still open? I'已尝试各种排列
Forms!frmResults!frmResultsSub.Requery
/ .Refresh
从搜索表单本身后面但没有任何作用 .
[仍然需要访问Access 2003合规性]
EDIT: 基于HansUp和Alexander的第一次回复......
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 回答
在您的示例代码中......
...
frmResultsSub
是一个子窗体控件,它包含一个查询而不是一个窗体 . 换句话说,它的SourceObject
属性设置为"Query.qrySearch" .在这种情况下,子窗体控件的
Requery
无法识别对查询设计的更改 .将子窗体的
SourceObject
属性设置为其原始值足以使Access识别查询设计更改...