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

时间:2011-10-05 17:08:17

标签: ms-access methods openform

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

'source'表单基于表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 个答案:

答案 0 :(得分: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并且绑定到源表单当前记录中的字段的控件的值。我是“这种形式”的简写。其中一个有用的原因是,如果您以后决定给表单另外命名,则不必修改代码。

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

您的版本还包括1作为OpenArgs到OpenForm。我没有看到你是如何使用它的,所以把它关掉了。如果目标表单包含一个与OpenArgs有关的事件过程,请确保它不会覆盖您的WhereCondition。