【问题标题】:VBA Access - Empty Recordset (error 3021) in Form.Current eventVBA 访问 - Form.Current 事件中的空记录集(错误 3021)
【发布时间】:2020-11-04 21:00:56
【问题描述】:

我正在尝试根据 Form.Current 事件中 Form.Recordset 中字段的当前值执行一些操作。

一个例子是 If Me.RecordSet("LastUpdate") < "#1 Jan 2020#" Then MsgBox "Last year's Comment"

Me.RecordSet 可能类似于“SELECT ID, LastUpdate, Comment FROM Comment WHERE ID = 12”,或者它也可以返回多个记录,例如"SELECT ID, LastUpdate, Comment FROM Comment WHERE ID

我收到错误 3021:上一行没有当前记录。看起来虽然 Form.Current 事件已经启动并且 Me.Recordset 属性正确地给出了底层 SQL,但记录集还没有被填充?

如果在调试此行时在即时窗格中执行Me.Recordset.MoveFirst,则它可以工作。但当然,每次 Form.Current 事件触发时将当前记录重置为第一条记录并不是前进的方向......

我觉得很奇怪,在 Form.Current 事件中,Form.Recordset 还没有被填充?这是正确的吗?对正确的方法来做我想做的事情有什么想法吗?

基础表位于 MySql 服务器上,尽管这应该无关紧要?

编辑:Form.Current 事件似乎触发了 3 次......并且只有最后一次触发了此错误。所以忽略错误可能是可行的,但显然我想了解为什么该事件被触发 3 次......我需要查看调用代码。

仍然不确定我是否理解 Form.Recordset 如何/为什么会失效。

【问题讨论】:

  • On error resume next 意味着代码将不会运行。我正在尝试让代码(正确)运行。
  • 我看不到 LastUpdate 如何帮助我从绑定到表单的记录集中获取值?我正在检索的值在 Form.Recorset 中,但未绑定到控件。使用 Recordset 访问绑定的 Recordset 效果很好,但在触发 Form.Current 事件时似乎没有填充。
  • 请评论您所指的答案。你试过Me.LastUpdate.Value 吗?
  • 请阅读我链接的文档页面。它解释了使用Form.Recordset 可以做什么和不可以做什么。表单的当前记录遵循其.Recordset - 但不是相反,这正是您的问题。
  • @Andre Me.LastUpdate.Value 在即时窗格中给出“未找到方法或数据成员”。 Access VBA 似乎无法识别 LastUpdate。你的意思是别的吗?您链接到的 Form.Recordset 文档页面显示“使用该属性来使用表单不直接支持的 Recordset 对象的方法”,这就是我想要做的。

标签: mysql vba ms-access


【解决方案1】:

不要使用Me.RecordSet("...") 来检索值。你主要需要这个来设置表单的RecordSet属性:https://docs.microsoft.com/en-us/office/vba/api/access.form.recordset

要获取当前记录的值,请使用

Me!LastUpdate.Value     ' for the control
Me("LastUpdate").Value  ' same
Me.LastUpdate.Value     ' for the bound column

【讨论】:

    【解决方案2】:

    您可以直接从表单中使用字段链接

    Me!LastUpdate
    

    或者使用链接控件(如果控件绑定到字段)

    Me.BoundControl
    

    或者如果您需要使用记录集,那么您需要使用记录集克隆并将其同步到表单

    Me.RecordsetClone.Bookmark = Me.Bookmark
    Me.RecordsetClone.Fields("LastUpdate") = ...
    

    【讨论】:

    • 谢谢。设置书签后使用 RecordsetClone 可使代码正确运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2017-11-08
    • 1970-01-01
    • 2017-04-16
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多