0

我无法使用 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

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

谢谢你的帮助

4

1 回答 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。

于 2011-10-05T18:56:50.447 回答