如何修复 "no current record"-来自 Form.Recordset 的错误?
How to fix "no current record"-Error from Form.Recordset?
在我的 ms-access vba 项目中,我在子表单中使用 me.Recordset 将当前记录集传递给函数(我在其中读取字段)。
这第一次有效,但在某一点之后我收到错误:
3021 - no current record ("Kein aktueller Datensatz")
这很奇怪,因为我可以看到记录,所有字段都可以使用 !-运算符访问(例如 Me!EM_KEY_PE)并且 Me.Recordset.RecordCount 是 1。me.Recordset。 EOF 为假。
Debug.Print Me.Recordset!EM_KEY_PE
在 Me!EM_KEY_PE 工作时也会引发相同的错误。
在执行使父窗体不可见和再次可见、保存数据集和为父窗体设置新位置等操作后,记录集变得无效。
那么如何解决这个问题?
到目前为止我尝试过的事情:
- 使用me.recordsetClone代替me.Recordset=>无效
- 未调用函数 => Debug.Print Me.Recordset!EM_KEY_PE 仍然引发错误
好像是这一行:
Me.RecordSource = Me.RecordSource
恢复了记录集并解决了我的问题。我在 Form.Recordset https://docs.microsoft.com/en-us/office/vba/api/Access.Form.Recordset
的微软文档中找到了这个
但是由于这一行改变了选择的位置,所以我创建了这个函数来修复我的 Recordset(“LFD”是我的主键):
Public Sub fn_repairFormRecordset(ByVal par_form As Form)
Dim rs As DAO.Recordset
Dim currentLfd As Long
On Error GoTo fn_repairFormRecordset_error
currentLfd = par_form("LFD")
par_form.RecordSource = par_form.RecordSource
Set rs = par_form.RecordsetClone
rs.FindFirst "[LFD]=" & currentLfd
par_form.Bookmark = rs.Bookmark
fn_repairFormRecordset_exit:
Exit Sub
fn_repairFormRecordset_error:
Call msg_error_norm(ModuleName, "fn_repairFormRecordset")
GoTo fn_repairFormRecordset_exit
End Sub
我从这里获得的部分代码:https://www.devhut.net/2012/10/19/ms-access-vba-requery-a-form-while-remaining-on-the-same-record/
但是我还是没弄清楚到底是什么原因导致Recordset失效。
假设选择了一条记录,您可以导航到当前表单记录。
Dim rs As DAO.Recordset
Set rs = Me.Recordset
rs.Bookmark = Me.Bookmark
如果您不导航到特定记录,则任何位置都有效。如果这是 EOF
或 BOF
,您将收到 无当前记录 错误。
在我的 ms-access vba 项目中,我在子表单中使用 me.Recordset 将当前记录集传递给函数(我在其中读取字段)。
这第一次有效,但在某一点之后我收到错误:
3021 - no current record ("Kein aktueller Datensatz")
这很奇怪,因为我可以看到记录,所有字段都可以使用 !-运算符访问(例如 Me!EM_KEY_PE)并且 Me.Recordset.RecordCount 是 1。me.Recordset。 EOF 为假。
Debug.Print Me.Recordset!EM_KEY_PE
在 Me!EM_KEY_PE 工作时也会引发相同的错误。
在执行使父窗体不可见和再次可见、保存数据集和为父窗体设置新位置等操作后,记录集变得无效。
那么如何解决这个问题?
到目前为止我尝试过的事情:
- 使用me.recordsetClone代替me.Recordset=>无效
- 未调用函数 => Debug.Print Me.Recordset!EM_KEY_PE 仍然引发错误
好像是这一行:
Me.RecordSource = Me.RecordSource
恢复了记录集并解决了我的问题。我在 Form.Recordset https://docs.microsoft.com/en-us/office/vba/api/Access.Form.Recordset
的微软文档中找到了这个但是由于这一行改变了选择的位置,所以我创建了这个函数来修复我的 Recordset(“LFD”是我的主键):
Public Sub fn_repairFormRecordset(ByVal par_form As Form)
Dim rs As DAO.Recordset
Dim currentLfd As Long
On Error GoTo fn_repairFormRecordset_error
currentLfd = par_form("LFD")
par_form.RecordSource = par_form.RecordSource
Set rs = par_form.RecordsetClone
rs.FindFirst "[LFD]=" & currentLfd
par_form.Bookmark = rs.Bookmark
fn_repairFormRecordset_exit:
Exit Sub
fn_repairFormRecordset_error:
Call msg_error_norm(ModuleName, "fn_repairFormRecordset")
GoTo fn_repairFormRecordset_exit
End Sub
我从这里获得的部分代码:https://www.devhut.net/2012/10/19/ms-access-vba-requery-a-form-while-remaining-on-the-same-record/
但是我还是没弄清楚到底是什么原因导致Recordset失效。
假设选择了一条记录,您可以导航到当前表单记录。
Dim rs As DAO.Recordset
Set rs = Me.Recordset
rs.Bookmark = Me.Bookmark
如果您不导航到特定记录,则任何位置都有效。如果这是 EOF
或 BOF
,您将收到 无当前记录 错误。