【问题标题】:MS Access 2010 - Instantiate a child recordset using DAO and get "No current record" errorMS Access 2010 - 使用 DAO 实例化子记录集并获得“无当前记录”错误
【发布时间】:2014-02-28 16:05:11
【问题描述】:

我正在尝试将数据从数据库 1 中的表 1 移动到数据库 2 中的表 2。表 1 具有与表 2 相同的字段。表 1 有数据而表 2 没有。

rsDenuncia 是数据库 1 中表 1 的记录集 regNuevoDenuncia 是数据库 2 中表 2 的记录

我实例化了一个名为 rsODenuncia 的 rsDenuncia 子记录集,它可以工作,因为 我可以使用 msgboxes 检索数据。

Set rsODenuncia = rsDenuncia.Fields("pdfAdjunto").Value
MsgBox "Nombre el archivo: " & rsODenuncia("FileName").Value
MsgBox "Tipo de archivo: " & rsODenuncia.Fields("FileType").Value
MsgBox "Data del archivo: " & rsODenuncia.Fields("FileData").Value

但是当我尝试实例化表 2 的记录集(这是一个空表,但与表 1 具有相同的字段)时,会出现错误。 "没有当前记录"

Set regONuevoDenuncia = regNuevoDenuncia.Fields("pdfAdjunto").Value

有没有办法在不使用 Value 方法的情况下实例化 regONuevoDenuncia,以便我可以添加新数据?

提前致谢。

【问题讨论】:

    标签: vba ms-access parent-child dao recordset


    【解决方案1】:

    您需要使用regNuevoDenuncia.AddNew 创建新的父记录,然后才能打开子记录集的附件。以下代码是一个最小示例:

    Option Compare Database
    Option Explicit
    
    Sub CopyRecordsWithAttachments()
        Dim cdb As DAO.Database
        Dim rsDenuncia As DAO.Recordset2, rsODenuncia As DAO.Recordset2
        Dim regNuevoDenuncia As DAO.Recordset2, regONuevoDenuncia As DAO.Recordset2
    
        Set cdb = CurrentDb
        cdb.Execute "DELETE FROM NuevoDenuncia", dbFailOnError  ' clear previous test data, if any
        Set rsDenuncia = cdb.OpenRecordset("Denuncia", dbOpenSnapshot)
        Set regNuevoDenuncia = cdb.OpenRecordset("NuevoDenuncia", dbOpenDynaset)
        Do Until rsDenuncia.EOF
            regNuevoDenuncia.AddNew
            regNuevoDenuncia!ID = rsDenuncia!ID
            Set rsODenuncia = rsDenuncia.Fields("pdfAdjunto").Value
            Set regONuevoDenuncia = regNuevoDenuncia.Fields("pdfAdjunto").Value
            Do Until rsODenuncia.EOF
                regONuevoDenuncia.AddNew
                regONuevoDenuncia!FileName = rsODenuncia!FileName
                regONuevoDenuncia!FileData = rsODenuncia!FileData
                regONuevoDenuncia.Update
                rsODenuncia.MoveNext
            Loop
            regONuevoDenuncia.Close
            Set regONuevoDenuncia = Nothing
            rsODenuncia.Close
            Set rsODenuncia = Nothing
            regNuevoDenuncia.Update
            rsDenuncia.MoveNext
        Loop
        regNuevoDenuncia.Close
        Set regNuevoDenuncia = Nothing
        rsDenuncia.Close
        Set rsDenuncia = Nothing
        Set cdb = Nothing
        Debug.Print "Terminado."
    End Sub
    

    【讨论】:

      【解决方案2】:

      在填充记录集之前,您不能以您现在的方式在 DB2 的记录集中引用该字段。一旦将记录添加到 DB2,错误就会消失。 在没有看到所有代码的情况下,我建议您执行以下操作:

      If not regNuevoDenuncia.eof then
          Set regONuevoDenuncia = regNuevoDenuncia.Fields("pdfAdjunto").Value
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多