使用VBA的MS Access复制记录集

时间:2019-07-24 18:28:58

标签: vba ms-access access-vba

已更新:

我正在尝试设置一个“任务”表单,当您单击一个按钮时,它将获取[状态]为10的所有记录并将其复制,然后以前的记录将被标记为[状态] 100。

所以我拥有的是以下“之前”数据表视图: Before Code

运行代码后,它将如下所示: After Code

因此,该代码将复制[Status]为10(“进行中”)的所有记录,将旧记录标记为[Status] 100(“ Completed”),并为[Date Completed]字段加上时间戳。

希望这有助于澄清我正在尝试做的事情。

代码如下:

Public Sub Duplicate_Click()
Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblTasks")
rs.MoveFirst

If Not (rs.EOF And rs.BOF) And Me.Status = 10 Then

Do Until rs.EOF = True
'Copy/Paste In Process Tasks
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.RunCommand acCmdPasteAppend
    [Status].Value = 0
    rs.MoveNext
Loop
Else
    MsgBox ("Nothing Done")
'do nothing
End If

    MsgBox ("Complete")

rs.Close 'Close the recordset
Set rs = Nothing 'Clean up

End Sub

3 个答案:

答案 0 :(得分:4)

您为什么不对这个任务使用简单的insert查询?

例如:

insert into tblTasks
select * from tblTasks where tblTasks.status = 10

答案 1 :(得分:1)

这些

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdPasteAppend

处理当前表单中的记录。他们不在乎记录集。

但这可能不是唯一的问题。我建议您更改您的问题或提交一个新的问题,以包括您的表以及您要通过期望的结果示例确切地完成什么,因为我非常确定,即使以上几行按您认为的那样起作用,您仍然无法获得理想的结果。

答案 2 :(得分:1)

您似乎没有对Recordset做任何事情。

这些:

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdPasteAppend

只会影响活动表格数据表。不是记录集。他们也不会四处走动去做自己的工作。这三个命令将选择记录,复制记录,然后将相同记录粘贴到最后,然后重复。

您可以将源和目标作为记录集打开,并在遍历源时将它们添加到目标中,因为它们具有适当的值 像这样

Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("Source")
Set rs2 = CurrentDb.OpenRecordset("Destination")

rs1.MoveFirst

If Not (rs1.EOF And rs1.BOF) And Me.Status = 10 Then

Do Until rs1.EOF = True
    If(rs1![Field] = 10) Then
       With rs2
            .AddNew
            ![Field]=rs1![Field]
            .Update
       End With
    End If
    rs1.MoveNext
Loop
Else
    MsgBox ("Nothing Done")
'do nothing
End If

    MsgBox ("Complete")

rs1.Close 'Close the recordset
Set rs1 = Nothing 'Clean up
rs2.Close 'Close the recordset
Set rs2 = Nothing 'Clean up
End Sub
相关问题