2013-07-09 57 views
0

我正在使用VBA打开表单。如果这个问题很重要的话,那么这个表单就有一个针对记录源的交叉表查询。 我想MS Access VBA DoCmd.OpenForm WhereCondition失败且未找到字段错误

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) 

,它显示了“假”,表明存在一个匹配,但是,形式不进该记录。

任何想法我可能会失踪?

回答

0

尝试改变:

Form_frmMyForm.Recordset.FindFirst "ID = 7" 

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

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

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

UPDATE:

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

这似乎与findfirst方法一起工作,谢谢。我会标记为已回答。但是,它不适用于doCmd.OpenForm方法。任何想法为什么?谢谢! – MrGibbage

0

是ID底层数据或由所述交叉表产生一个列?

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

+0

它是底层数据。实际上,字段名更像table1.id。我认为我已经尝试了以下@TKEyi60中提到的每个方括号组合,但最终工作(在findfirst方法中)是[table1] .ID = 7。但它在DoCmd.OpenForm where条件中不起作用。我只是得到一个错误,该字段未找到。 – MrGibbage

+0

尝试将其从Where参数移动到过滤器之一(我之前立即作为参数的东西) – Rikalous