我有一个相当简单的数据库,5000个记录,大约60-70个字段,我创建了一个按钮来复制当前记录并删除了一些字段(我们称之为EXPAND)。
我最近收到的请求是做同样的事情而不删掉任何字段,但它不起作用。我在表单上使用了命令按钮向导并选择了“复制”选项,但新记录完全空白。此外,当我关闭记录“大量数据复制到剪贴板”时,我收到一条错误消息。我尝试了原来的按钮(EXPAND),结果出现了同样的问题。通过旧记录搜索,我发现它最近的工作时间为2016年6月10日(10天前)。
是否有更改会阻止此代码正常执行?我需要启用新的设置/选项才能让它再次运行吗?或者是否有一些替代方法可以用来实现相同的结果?
以下是系统为复制记录而创建的(非常简单的)代码(不起作用):
Private Sub cmdDuplicate_Click()
On Error GoTo Err_cmdDuplicate_Click
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdRecordsGoToNew
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Exit_cmdDuplicate_Click:
Exit Sub
Err_cmdDuplicate_Click:
MsgBox Err.Description
Resume Exit_cmdDuplicate_Click
End Sub
答案 0 :(得分:1)
最快最简单的方法是使用 DAO 和 RecordsetClone 形式:
Private Sub cmdDuplicate_Click()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
If Me.NewRecord = True Then Exit Sub
Set rstInsert = Me.RecordsetClone
Set rstSource = rstInsert.Clone
With rstSource
If .RecordCount > 0 Then
' Go to the current record.
.Bookmark = Me.Bookmark
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "SomeFieldToPreset"
rstInsert.Fields(.Name).Value = SomeValue
ElseIf .Name = "SomeFieldToExclude
' Leave blank
Else
' All other fields.
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
' Go to the new record and sync form.
.MoveLast
Me.Bookmark = .Bookmark
.Close
End With
End If
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
答案 1 :(得分:0)
我认为最简单的方法是创建一个追加查询。将条件字段设置为当前记录的ID。这可以在查询设计窗口中轻松完成。
答案 2 :(得分:0)
没有错误消息?
表单上是否有主键ID字段,不允许您复制重复的ID?