MS Access:数据表属性(作为子表单)- 表单未打开,错误:2489?

Posted

技术标签:

【中文标题】MS Access:数据表属性(作为子表单)- 表单未打开,错误:2489?【英文标题】:MSAccess: Datasheet Properties (as subform) - Form Not Open, Err: 2489? 【发布时间】:2014-10-14 19:06:42 【问题描述】:

我的 MainForm 上有一个数据表作为子表单。当 MainForm 打开并应用过滤器时,我正在尝试收集有关过滤后的数据表的详细信息...然后(最终)逐行(通过 .movenext,我想):

无论如何,这是通过 OnClick 事件从第二个表单(弹出/模态)进行的快速测试:

    If Forms!Mainform![Data subform].Form.FilterOn = True Then
        msgbox "Filter is ON"
        Forms!Mainform![Data subform].SetFocus
        msgbox Forms!Mainform![Data subform].RecordCount
        DoCmd.GoToRecord acDataForm, "Forms!Mainform![Data subform]", acFirst
        msgbox Forms!Mainform![Data subform].Form.ItemID.value
    Else
        msgbox "Filter is OFF"
    End If

当 FilterOn = True 时,Access 可以看到,但是当我尝试移动到第一条记录时,它抱怨表单未打开 (Err:2489)。 MainForm 确实是 Open。​​

我假设我的子表单引用是罪魁祸首,但到目前为止我的调整没有奏效。

有什么可以帮忙的吗?

【问题讨论】:

我认为问题在于您对对象名称的引用。即您有“Forms!Mainform![Data subform]”,但这是一个我认为不会在运行时解析为对象的文字。另外,由于您的代码在您的子表单中,因此我将使用“DoCmd.GoToRecord acDataForm, Me., acfirst 在 MainForm 中创建一个公共子来完成工作并从弹出窗体中调用它!MainForm.PublicSubName [args] 将否定 MainForm 与弹出窗体的相互依赖关系 - 即将来如果 MainForm已更改,您也不必更改弹出表单;如果 PublicSubName 本身随后将子表单中定义的公共子称为 SubFormName.SubFormPublicSubName [args],那么您将逻辑移动到子表单本身,您可以在其中直接询问其自身的属性,如果需要,可以使用即时窗口来解决出了什么问题。 感谢 Wayne 和 John,正如您所说,我正准备将一个 Public Sub 放入 MainForm,但发现 RecordsetClone 方法可以满足我的需要。我没想到它会像它那样处理过滤后的数据表。 【参考方案1】:

哇,我走错了路。以下 RecordsetClone 方法为我提供了对所有子表单的 FILTERED 数据表数据的准确访问权限(下面的简单示例可以简单地遍历所有记录)。

Public Function mySelect()

    Dim rstData As dao.Recordset
    Set rstData = Forms!Mainform![Data subform].Form.RecordsetClone

    msgbox rstData.RecordCount
    rstData.MoveFirst
    Do Until rstData.EOF
        msgbox rstData.Fields(0)    'Field(0) = ItemID
        rstData.MoveNext
    Loop

End Function

我已经在同一个应用程序中做了记录克隆的事情,只是在稍微不同的上下文中。太疯狂了,我太想念它了。

不管怎样,我很高兴。

谢谢~

【讨论】:

以上是关于MS Access:数据表属性(作为子表单)- 表单未打开,错误:2489?的主要内容,如果未能解决你的问题,请参考以下文章

MS ACCESS:用另一个表中的数据填充子表单

MS Access 表单以更新多个表而无需子表单

MS Access 中的子表单

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

根据 MS Access 中的用户过滤子表单

MS Access - 使用子表单过滤时禁止保存提示