MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

Posted

技术标签:

【中文标题】MS Access 2007 - OpenArgs 没有将值传递给下一个表单?【英文标题】:MS Access 2007 - OpenArgs not passing the value to next form? 【发布时间】:2010-07-24 15:37:09 【问题描述】:

所以我将 ID 值从一个表单传递到下一个表单使用

Docmd.OpenForm "SecondForm",,,,,, MainID
Docmd.Close AcForm, "FirstForm", acSaveYes

然后我检查第二个表单的加载事件的值:

MainID = val(Me.OpenArgs)

当我调试并逐步完成时,我将鼠标悬停在它上面,可以看到它包含一个值

然后我在第二个表单上有一个按钮单击事件,它应该重复该过程,但是当我运行以下内容时

Dim rs as DAO.Recordset
Dim dbs as DAO.Database
Set dbs = CurrentDB

Set MyRS = dbs.OpenRecordset("tblMain")

If MyRS!MainID = MainID THen

之后是一些 rs.edit 等内容....例程甚至没有做到那么远。一旦我进行相同的调试和悬停,这里的值就是空的。有什么我遗漏的,因为我可以看到表单加载事件的值,但是一旦我尝试在另一个操作中使用它,它就是 MIA

谢谢 贾斯汀

【问题讨论】:

【参考方案1】:

听起来可能是范围问题。 MainID 在哪里声明?

如果您在 Form Open 过程中声明它,那么一旦该过程完成,它就会消失。

考虑更改按钮的单击事件过程。

If MyRS!MainID = Val(Me.OpenArgs) Then

OpenArgs 在表单加载后不会“消失”。我不明白为什么需要将 OpenArgs 存储到 MainID 变量中。您可以在使用 MainID 变量的地方使用 Val(Me.OpenArgs)。

或者,您可以将 MainID 设置为模块级别的变量,以便您的所有表单过程都可以使用它。

更新:在任何情况下,您可能会打开表单而不为其提供 OpenArgs 的值?如果是这样,Val(Me.OpenArgs) 将返回 0。这会是您的应用程序逻辑中的错误条件吗?当未提供 OpenArgs 值时,您的命令按钮是否应该是“可点击的”(启用)?

【讨论】:

以上是关于MS Access 2007 - OpenArgs 没有将值传递给下一个表单?的主要内容,如果未能解决你的问题,请参考以下文章

在 Access VBA 中使用 openargs 搜索报告的问题

ms-access 2007 年报告

ms-access 2007 运行时和 lockWindowUpdate

MS Access:Access 2016 应用程序能否与 Access 2007 一起使用?

MS-ACCESS-2007 在表格的表格中可视化研究结果

如何在 MS ACCESS 2007 查询中使用 LIMIT