【问题标题】:MS Access 2007 OpenForm method, can't get the where clause to produce the correct resultMS Access 2007 OpenForm 方法,无法获取 where 子句以产生正确的结果
【发布时间】: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

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

感谢您的帮助

【问题讨论】:

    标签: ms-access methods openform


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      相关资源
      最近更新 更多