MS Access 2010 - 使用DAO实例化子记录集并获取“无当前记录”错误

时间:2014-02-28 16:05:11

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

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

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

我实例化一个名为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,以便添加新数据?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在填充记录集之前,您无法以DB2的记录集的形式引用该字段。将记录添加到DB2后,错误就会消失。 如果没有看到您的所有代码,我建议您执行以下操作:

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

答案 1 :(得分:0)

您需要先使用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