Vba 循环遍历DAO记录集,复制并粘贴到其他记录集中,然后删除它
我目前正在使用DAO记录集编写VBA代码,该代码可以循环通过我的access表,我必须找到在当前时间之前90天内的任何数据,并将其作为第二个记录集复制和插入到其他表中,插入到第二个记录集后,删除该数据并移动到下一个数据记录中。下面是我的代码,我当前在此集合中未找到运行时错误“3265”项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
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的情况下完成这项工作。查看此链接