突然“编译错误:找不到方法或数据成员”

Posted

技术标签:

【中文标题】突然“编译错误:找不到方法或数据成员”【英文标题】:Sudden "Compile error: method or data member not found" 【发布时间】:2013-09-09 12:43:26 【问题描述】:

谁能告诉我为什么突然间我的 2010 Access 数据库无法识别我的一个表中的关键字段? VBA 识别表中定义的所有其他字段?我已经两次和三次检查所有内容是否拼写正确。

出现编译错误的代码:

Me.benefitID = Nz(DMax("benefitID", "tblBenefits"), 0) + 1

tblBenefits 字段:

benefitID (Primary key)
benefitAnimalWelfare
benefitSafety
benefitCostSavings
benefitImprovedPractice
benefitAdministrative
benefitOther

完整代码:

Private Sub NewIdeaButton_Click()
On Error GoTo NewIdeaButton_Click_Err

    'new idea boolean is true
    newIdea = True

    On Error Resume Next
    DoCmd.GoToRecord , "", acNewRec
    'assign IDs for ideaID, benefitID, statusID 
    Me.ideaID = Nz(DMax("ideaID", "tblIdeaDetails"), 0) + 1
    Me.benefitID = Nz(DMax("benefitID", "tblBenefits"), 0) + 1
    Me.statusID = Nz(DMax("statusID", "tblStatus"), 0) + 1

    Me.PrintIdeaButton.Visible = False
    Me.DeleteIdeaButton.Visible = False
    Me.IdeaStatusFormButton.Visible = False
    Me.CancelButton.Visible = True
    Me.ClearListBoxButton.Visible = False
    Me.AttachedLabel.Visible = False
    Me.FileList.Visible = False
    Me.FileList.RowSourceType = "Value List"

    Me.ideaSubmitter.SetFocus
    If (MacroError <> 0) Then
        Beep
        MsgBox MacroError.Description, vbOKOnly, ""
    End If

NewIdeaButton_Click_Exit:
    Me.NewIdeaButton.Visible = False
    Exit Sub

NewIdeaButton_Click_Err:
    MsgBox Error$
    Resume NewIdeaButton_Click_Exit

End Sub

我已尝试选择 Microsoft DAO 3.6 对象库参考,但我收到“与现有模块、项目或对象库的名称冲突”。我读到如果您取消选择 Microsoft Office 14.0 对象库,它将处理该错误。但我不认为这是我想取消选择的内容?

我也试过删除这个表和另一个表之间的关系,重命名字段,将主键重置为不同的字段,它仍然无法识别这个字段。

还尝试了压缩和修复数据库,但收到消息“压缩和修复操作已取消。您可能对数据库所在的文件夹没有足够的权限。您需要对数据库目录的完全权限位于压缩和修复。有关详细信息,请联系您的系统管理员。我过去能够运行 C&R 吗?

【问题讨论】:

您可能会考虑使用“Bang”(感叹号)而不是点,尤其是在您访问字段时。我自己的做法是除了引用基础字段之外的所有内容都使用 dot,在这种情况下我只使用 bang。我的控件总是使用匈牙利符号作为前缀,因此文本框是 txtIdeaSubmitter。您可以阅读有关 bang 与 dot 的更多信息:bytecomb.com/the-bang-exclamation-operator-in-vba 和这里 datagnostics.com/dtips/bangdot.html 和这里 ***.com/questions/2923957/… 表单处于设计模式,将表单的数据源清空,然后制表符。现在重新进入,重新输入数据源(表或其他),现在退出数据源属性。 Access 将为您重新生成“点”属性列表。这是 Access 添加的属性的设计时列表。如果您使用代码交换数据源,甚至向表中添加新列,则不会重新生成列表。如果窗体上没有同名控件,并且您使用代码换出数据源,则使用 !到位是。推荐使用(点)。 【参考方案1】:

在您分配表单/报告的记录源属性时,Access 会将字段名称缓存为表单/报告中的WithEventsAccessField 对象。这意味着对表或查询的更改不会传播到表单/报表除非您明确地重新分配记录源属性,从而强制刷新缓存的字段。

如果您之前使用 benefitID 作为表单/报告的成员,但缓存不再包含该字段名称(即使记录源确实包含该字段名称),那么您需要更新要刷新的缓存和要编译的代码的 RecordSource 属性。

如果 RecordSource 中 benefitID 字段的名称已更改,那么您仍需要刷新 RecordSource,但您还需要更新对 benefitID 的引用,以便它们使用新字段名字。

【讨论】:

赞成。这正是问题所在。如果控件不在窗体上,Access 仍会在设计时为我生成属性“点”列名。如果添加了一个新字段,或者甚至 VBA 换出了表单记录源,则不会重新生成我的“点”属性列表。设计时可以进入属性表,将其清空,tab out,然后tab back in,重新输入表单的数据源,重新生成列的属性列表。如果存在具有该名称的控件,则没有问题,但没有控件,则在设计时生成点列表。我!总是有效。【参考方案2】:

我刚刚遇到了同样的问题。我发现我通常使用的感叹号不再有用了。所以,我不得不使用.value,例如:

me.benefitID.value

这似乎解决了我的问题,但我仍然对冲突的引用感到困惑。

【讨论】:

【参考方案3】:

感叹号! 对我有用。在发现此错误的任何地方,我都用它们替换了句点 .

【讨论】:

以上是关于突然“编译错误:找不到方法或数据成员”的主要内容,如果未能解决你的问题,请参考以下文章

切换到新笔记本电脑,突然我的 Vue 项目无法编译并出现 ES6 语法错误

突然断电导致git分支错误解决办法

错误无法打开包含文件:'GLES2/gl2.h':没有这样的文件或目录突然出现

编译项目时出现 25.0.0 错误

Microsoft VBScript 编译器错误 错误 '800a0400' 缺少语句

IDEA编译报语法错误? 可能是默认机制搞的鬼!