【问题标题】:MS Access VBA DoCmd.OpenForm WhereCondition failing with field not found errorMS Access VBA DoCmd.OpenForm WhereCondition 失败,未找到字段错误
【发布时间】:2013-07-09 20:47:16
【问题描述】:

我正在使用 VBA 打开一个表单。如果这很重要,该表单有一个针对记录源的交叉表查询。 我在努力

DoCmd.OpenForm Form_frmMyForm.Name, , , "ID = 7"

(最终我会将“= 7”替换为更有用的东西。这只是为了测试)

但是当它到达那条线时我得到一个错误:

Run-time error '3070":
The Microsoft Access database engine does not recognize 'ID' as a valid field name or expression.

我已经确认字段“ID”在我的交叉表查询中。事实上,我在几个控件中使用该字段没有问题。

我也试过

 Form_frmMyForm.Recordset.FindFirst "ID = 7"
 MsgBox (Form_frmMyForm.Recordset.NoMatch)

它显示“False”,表示存在匹配,但是表单不会前进到该记录。

有什么我可能遗漏的想法吗?

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    尝试改变:

    Form_frmMyForm.Recordset.FindFirst "ID = 7"
    

    Form_frmMyForm.Recordset.FindFirst "[ID] = 7"
    

    在引用记录集中的字段时,您需要这些方括号。然后使用一个变量,你可以这样做:

    Form_frmMyForm.Recordset.FindFirst ("[ID] = " & Me.Whatever & "")
    

    更新:

    DoCmd.OpenForm Form_frmMyForm.Name, , , Form_frmMyForm.Recordset.FindFirst "[ID] = 7"
    

    【讨论】:

    • 这似乎适用于 findfirst 方法,谢谢。我将标记为已回答。但是,它不适用于 doCmd.OpenForm 方法。任何想法为什么?谢谢!
    【解决方案2】:

    ID 是在基础数据中还是交叉表生成的列中?

    我想知道是否在生成交叉表列之前应用了条件,因此当它开始获取数据(并尝试应用条件)时,它看不到 ID 列,因为它尚未创建。

    【讨论】:

    • 它是基础数据。其实fieldname更像table1.id。我以为我已经尝试了下面@TKEyi60 建议的方括号的所有组合,但最终起作用的(在 findfirst 方法中)是 [table1].ID = 7。但它在 DoCmd.OpenForm wherecondition 中不起作用。我只是收到一个找不到该字段的错误。
    • 尝试将其从 Where 参数移到 Filter 之一(我认为是之前的参数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多