已更新:
我正在尝试设置一个“任务”表单,当您单击一个按钮时,它将获取[状态]为10的所有记录并将其复制,然后以前的记录将被标记为[状态] 100。
因此,该代码将复制[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
答案 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