Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 循环遍历DAO记录集,复制并粘贴到其他记录集中,然后删除它_Vba_Loops_Dao_Recordset - Fatal编程技术网

Vba 循环遍历DAO记录集,复制并粘贴到其他记录集中,然后删除它

Vba 循环遍历DAO记录集,复制并粘贴到其他记录集中,然后删除它,vba,loops,dao,recordset,Vba,Loops,Dao,Recordset,我目前正在使用DAO记录集编写VBA代码,该代码可以循环通过我的access表,我必须找到在当前时间之前90天内的任何数据,并将其作为第二个记录集复制和插入到其他表中,插入到第二个记录集后,删除该数据并移动到下一个数据记录中。下面是我的代码,我当前在此集合中未找到运行时错误“3265”项 Private Sub Command22_Click() Dim dbs As DAO.Database Dim rsDatalog1 As DAO.Recordse

我目前正在使用DAO记录集编写VBA代码,该代码可以循环通过我的access表,我必须找到在当前时间之前90天内的任何数据,并将其作为第二个记录集复制和插入到其他表中,插入到第二个记录集后,删除该数据并移动到下一个数据记录中。下面是我的代码,我当前在此集合中未找到运行时错误“3265”项

    Private Sub Command22_Click()

        Dim dbs As DAO.Database
        Dim rsDatalog1 As DAO.Recordset
        Dim rsDatalog2 As DAO.Recordset
        Dim time As Date
        time = Now() - 90
        DoCmd.SetWarnings False
        DoCmd.Echo False
        DoCmd.Hourglass True
        Set dbs = CurrentDb()
        Set rsDatalog1 = dbs.OpenRecordset("SELECT DateStamp, LocationID, DataType, LogValue FROM DataLog")
        Do Until rsDatalog1.EOF


                If Not rsDatalog1.EOF Then
                rsDatalog1.MoveFirst
                If Not rsDatalog1.EOF Then
                    rsDatalog1.MoveNext
                    Do Until rsDatalog1.EOF

                        If rsDatalog1.Fields(Datastamp) >= Now() - 90 Then
                        Set reDatalog2 = dbs.OpenRecordset("INSERT INTO Archive VALUE ('" & rsDatalog1("DataStamp") & "', '" & rsDatalog1("LocationID") & "','" & rsDatalog1("DataType") & "','" & rsDatalog1("LogValue") & "'")
                        Debug.Print redatalog1.Field(DateStamp, LocationID, DataType, LogValue)
                        rsDatalog1.Delete
                        rsDatalog1.MoveNext
                        End If
                    Loop
                End If
            End If
            rsDatalog1.Close
            rsDatalog2.Close
        Loop
        DoCmd.Hourglass False
        MsgBox "Finish"
End Sub

这个问题有几个可能的原因。第一种情况是,如果rsDatalog1.Fields(Datastamp)>=Now()-90,则Datastamp应该在引号中。您还可以使用!例如
rsDatalog1!数据夯实

你不应该让你的
rsDatalog1。在你的循环中关闭
。这将导致它在下一次传递时失败,因为它将无法检查文件的结尾

您只需要一个循环,而不是两个

insert语句需要列出要插入的字段,然后才能列出要插入的值

Private Sub Command22_Click()    
    Dim dbs As DAO.Database
    Dim rsDatalog1 As DAO.Recordset
    Dim time As Date
    time = Now() - 90
    DoCmd.SetWarnings False
    DoCmd.Echo False
    DoCmd.Hourglass True
    Set dbs = CurrentDb()
    Set rsDatalog1 = dbs.OpenRecordset("SELECT DateStamp, LocationID, DataType, LogValue FROM DataLog")
    Do Until rsDatalog1.EOF
        If rsDatalog1.Fields(Datastamp) >= Now() - 90 Then
            dbs.Execute "INSERT INTO Archive (DataStamp, LocationID, DataType, LogValue) VALUE ('" & rsDatalog1!DataStamp & "', '" & rsDatalog1!LocationID & "','" & rsDatalog1!DataType & "','" & rsDatalog1!LogValue & "')", dbFailOnError
            rsDatalog1.Delete
        End If

        if rsDatalog1.recordCount <> 0 then
            rsDatalog1.MoveNext
        end if
    Loop

    rsDatalog1.close
    set rsDatalog1 = nothing
    DoCmd.Hourglass False
    MsgBox "Finish"
End Sub
Private子命令22_Click()
Dim数据库作为DAO.Database
Dim rsDatalog1作为DAO.Recordset
暗时间为日期
时间=现在()-90
DoCmd.SetWarnings错误
DoCmd.Echo错误
沙漏真的吗
设置dbs=CurrentDb()
Set rsDatalog1=dbs.OpenRecordset(“从数据日志中选择日期戳、位置ID、数据类型、日志值”)
直到rsDatalog1.EOF为止
如果rsDatalog1.Fields(Datastamp)>=Now()-90,则
dbs.Execute“INSERT INTO Archive(DataStamp,LocationID,DataType,LogValue)”VALUE(“&rsDatalog1!DataStamp&“,”&rsDatalog1!LocationID&“,”“&rsDatalog1!DataType&“,”,“&rsDatalog1!LogValue&“)”,dbFailOnError
rsDatalog1.Delete
如果结束
如果rsDatalog1.recordCount为0,则
rsDatalog1.MoveNext
如果结束
环
rsDatalog1.close
设置rsDatalog1=nothing
沙漏假文件
MsgBox“完成”
端接头

如果您愿意,我相信您可以在没有VBA的情况下完成这项工作。查看此链接