首页 > 解决方案 > VBA 访问 - Form.Current 事件中的空记录集(错误 3021)

问题描述

我正在尝试根据 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 < 12”

我收到错误 3021:上一行没有当前记录。似乎虽然 Form.Current 事件已经启动并且 Me.Recordset 属性正确地提供了基础 SQL,但记录集还没有被填充?

如果在调试此行时在即时窗格中,我会这样做Me.Recordset.MoveFirst。但是,当然,每次 Form.Current 事件触发时将当前记录重置为第一条记录并不是前进的方向......

我觉得很奇怪,在 Form.Current 事件中,尚未填充 Form.Recordset?这是正确的吗?关于做我想做的事情的正确方法有什么想法吗?

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

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

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

标签: mysqlvbams-access

解决方案


不要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

推荐阅读