如何修复 "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.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

如果您不导航到特定记录,则任何位置都有效。如果这是 EOFBOF,您将收到 无当前记录 错误。