Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba “如何修复”;“无当前记录”-表单记录集出错?_Vba_Ms Access_Recordset - Fatal编程技术网

Vba “如何修复”;“无当前记录”-表单记录集出错?

Vba “如何修复”;“无当前记录”-表单记录集出错?,vba,ms-access,recordset,Vba,Ms Access,Recordset,在我的ms access vba项目中,我使用子窗体中的me.Recordset将当前记录集传递给函数(我在其中读取字段) 这是第一次工作,但在某一点后,我得到了错误: 3021 - no current record ("Kein aktueller Datensatz") 这很奇怪,因为我可以看到记录,所有的字段都可以使用-运算符(如我!EM_KEY_PE)和Me.Recordset.RecordCount为1。me.Recordset.EOF为false Debug.

在我的ms access vba项目中,我使用子窗体中的me.Recordset将当前记录集传递给函数(我在其中读取字段)

这是第一次工作,但在某一点后,我得到了错误:

3021 - no current record ("Kein aktueller Datensatz")
这很奇怪,因为我可以看到记录,所有的字段都可以使用-运算符(如我!EM_KEY_PE)和Me.Recordset.RecordCount为1。me.Recordset.EOF为false

Debug.Print Me.Recordset!EM_KEY_PE
我也会犯同样的错误!EM_KEY_PE起作用

在执行诸如使父窗体不可见和再次可见、保存数据集和为父窗体设置新位置等操作后,记录集无效

那么如何解决这个问题呢

到目前为止我尝试过的事情:

  • 使用me.recordsetClone代替me.Recordset=>无效
  • 不调用函数=>Debug.Print Me.Recordset!EM_KEY_PE仍会引发错误

似乎是这样的:

Me.RecordSource = Me.RecordSource
恢复记录集并修复我的问题。我在Form.Recordset的microsoft文档中找到了这个

但当这一行改变选择的位置时,我创建了这个函数来修复我的记录集(“LFD”是我的主键):

我从这里得到的部分代码:


但是我仍然没有找到导致记录集无效的确切原因。

假设选择了一条记录,您可以导航到当前表单记录

Dim rs作为DAO.Recordset
Set rs=Me.Recordset
rs.Bookmark=Me.Bookmark

如果未导航到特定记录,则任何位置都可能有效。如果这是
EOF
BOF
,您会得到一个无当前记录错误。

请编辑您的帖子以包含代码(调用过程和正在调用的过程),并通过传递记录集准确解释您正试图执行的操作。很可能不需要传递记录集。@Applecore:如问题中所述,即使不调用函数,记录集也会无效(因此函数不是引发错误的原因)。我想通过记录集从中心函数访问字段。我们的vba系统相当大。因此,我们有+100个不同的应用程序使用相同的框架模块。虽然每个应用程序的表单都不同,但函数都在一个框架模块中+所有这些都有历史原因,在这里进行解释毫无意义。如果没有代码,没有人知道发生了什么。这只是重新查询表单。所以你所需要的只是一个重新询问。然后你的密码里有什么事情发生了。@Gustav:密码?如问题中所述,“Debug.Print Me.Recordset!EM_KEY_PE”足以引发错误。当然,有些事情会导致记录集无效,但由于这种情况发生在表单的生命周期中,我不知道具体是什么原因。我在做问题中写的事情:“使父窗体不可见并再次可见,保存数据集并为父窗体设置一个新位置。”这意味着窗体(“MyFormName”)。可见=真,窗体(“MyFormName”)。可见=假和窗体(“MyFormName”)。脏=假…是的,你描述了它,但没有代码-“什么”这些代码的一部分必须是在做“某事”。这不是很有用。我看不出这个答案和我的问题有什么关系。你读过这个问题吗?@general4或者很明显,它与你的问题有关。在传递记录集或对其执行任何操作之前,必须确保它位于有效记录上,否则不能依赖任何结果。如果未指定位置,则不应依赖任何字段的值。
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