MS Access 2007 OpenForm 方法,无法获取 where 子句以产生正确的结果

Posted

技术标签:

【中文标题】MS Access 2007 OpenForm 方法,无法获取 where 子句以产生正确的结果【英文标题】:MS Access 2007 OpenForm method, can't get the where clause to produce the correct result 【发布时间】:2011-10-05 17:08:17 【问题描述】:

我无法使用 OpenForm 方法打开加载了正确记录的表单。我将尽我所能在这里提供详细信息:

“源”表单基于表 A,它是只读的。源表单上的按钮用于打开用于编辑记录的“目标”表单,同样来自表 A。

我尝试使用向导创建基于主键相等打开表单的按钮。向导的结果是,无论源表单的上下文中有什么记录,目标表单只会加载表 A 中的第一条记录。

我尝试使用具有以下变体的程序:

Dim frm As String, whr As String
frm = "Target Form"
whr = "Forms![Source Form]!ID = Forms![Target Form]!ID"
'whr = "[ID] = [ID]"
'whr = "[ID] = Forms![Target Form]!ID"
DoCmd.OpenForm frm, acNormal, , whr, , , 1

我可以只获取第一条记录以加载到目标表单中,也可以获取一条新记录以加载到目标表单中。但是我无法获取源表单的加载记录来确定加载到目标表单中的记录。

感谢您的帮助

【问题讨论】:

【参考方案1】:

我想你已经接近了。您希望 WhereCondition 与查询目标表单的记录源的 WHERE 子句相同,但没有 WHERE 一词。

Dim frm As String, whr As String
frm = "Target Form"
whr = "[ID] = " & Me.ID
Debug.Print "whr: " & whr
DoCmd.OpenForm frm, acNormal, , whr

我打算将 Me.ID 作为名称为 ID 并绑定到 Source Form 当前记录中的字段的控件的值。 Me 是“这种形式”的简写。它有用的一个原因是,如果您以后决定给表单起一个不同的名称,您就不必修改代码。

我添加了 Debug.Print 语句,以便您可以切换到即时窗口 (Ctrl+g),并复制 whr 字符串,然后将其粘贴到基于目标表单使用的相同记录源的新查询中。如果您在目标表单打开时仍然没有显示正确的记录,这可能会有所帮助。

您的版本还包括 1 作为 OpenArgs 到 OpenForm。我没有看到你是如何使用它的,所以把它关掉了。如果 Target Form 包含一个对 OpenArgs 执行某些操作的事件过程,请确保它不会覆盖您的 WhereCondition。

【讨论】:

以上是关于MS Access 2007 OpenForm 方法,无法获取 where 子句以产生正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

MS Access OpenForm acDialog 选项似乎不起作用

MS Access Openform - 所需的空白字段值

ms-access 2007 年报告

ms-access 2007 运行时和 lockWindowUpdate

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

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