无法从表单/子表单重新查询

Posted

技术标签:

【中文标题】无法从表单/子表单重新查询【英文标题】:Can't get requery to work from form/subform 【发布时间】:2017-10-24 18:34:25 【问题描述】:

背景: 我正在尝试将新表单添加到使用 Access 2003 创建的旧 Access 数据库中。以前的表单基于表,但新表单的字段基于查询。

我有一个名为 MasterList 的表单,其子表单为 MasterList_Sub。 MasterList 包含我想用来过滤 MasterList_Sub 的文本框,以及一个搜索和清除按钮。 MasterList_Sub 显示在下方。

我从其他表单中修改了搜索按钮的 VBA,但它似乎不起作用。以下是工作表单中的代码:

Private Sub SEARCH_Click()
Forms!mrtgref!Mrtgref_sub.Requery
End Sub

我的代码很简单

Private Sub SEARCH_Click()
Forms!MasterList!MasterList_Sub.Requery
End Sub

当我按下搜索按钮时,似乎发生了一些事情,但子表单没有更新。我是 Access 编程的新手,但根据我读过的内容,这段代码看起来太简单了,就像我遗漏了一些东西一样。我在数据库中找不到任何其他 VBA 模块,并且这些字段的设置与其他数据库类似。关于如何从这里开始的任何想法?

另外,我尝试了一些其他语法,但当它不起作用时,我收到一个以“Mortgagee Inquiry can't find...”开头的错误,它从哪里得到 Mortgagee Inquiry 的名称?

【问题讨论】:

请澄清:子表单记录源是否基于查询,如果是,请发布sql。如果是查询,它会过滤表单字段吗?其次,子表单是否使用“链接主/子”指针链接到主表单? 子表单是基于一个查询,下面是SQL。我在链接主/子字段中没有任何内容。我正在查看的其他表单示例也将这些字段留空,并且它们正在工作。我确实尝试将 MRTG_CD 用于链接主机,然后它将适用于该字段,但不适用于任何其他字段。我希望任何字段(总共 12 个)都可以用作过滤器 SELECT Mortgagee.MORTGAGEE_CD,Mrtglist.MRTG_TB,Mortgagee.PLCY_MRTG_CO_NAME1,Mortgagee.PLCY_STREET_ADDR1,Mortgagee.PLCY_CITY_NAME,Mortgagee.PLCY_STATE_CODE,Mortgagee.PLCY_ZIP_CODE,Mrtglist.MRTG_TYPE,Mrtglist.MRTG_CNT,Mortgagee.BILL_MRTG_CO_NAME1,抵押.BILL_STREET_ADDR1, Mortgagee.BILL_CITY_NAME, Mortgagee.BILL_STATE_CODE, Mortgagee.BILL_ZIP_CODE FROM Mortgagee INNER JOIN Mrtglist ON Mortgagee.MORTGAGEE_CD = Mrtglist.MRTG_CD; 我看到您的主表单和子表单之间没有可以过滤记录的链接,因此这就是它不起作用的原因。您有多种选择,但最直接的方法是使用主窗体 VBA 为子窗体设置过滤器: Me.MasterList_Sub.Form.Filter = "" Me.MasterList_Sub.Form.FilterOn= true 【参考方案1】:

MasterList_Sub 是一个子窗体控件。 .Requery 是 Form 本身的一个方法,因此您需要在 .Requery 之前添加 .Form

结构:

Forms!MainForm!SubformControl.Form.Requery

在你的情况下:

Forms!MasterList!MasterList_Sub.Form.Requery

【讨论】:

谢谢!这对我来说很有意义,但仍然无法正常工作。似乎后台发生了一些事情,但子表单没有更新。

以上是关于无法从表单/子表单重新查询的主要内容,如果未能解决你的问题,请参考以下文章

重新打开文件后子表单无法识别文本框源

组合框更改后子表单不重新查询

通过弹出子表单 (2) 添加新子表单 (1) 记录后重新查询子表单 (1) - Access 2007

Ms Access:来自另一个子表单的子表单重新查询未更新

重新链接表后重新查询表单

如何从导航表单中重新查询表单?