2016-06-21 39 views
0

我有一个相当简单的数据库,5000个记录约60-70个字段,并且我创建了一个按钮来复制当前记录并清空了一些字段(我们称之为扩大)。访问 - 重复录制按钮创建一个空白的记录

我最近收到了一个请求,要做同样的事情,而不消除任何字段,但它不起作用。我在窗体上使用了Command Button向导,并选择了Duplicate选项,但新记录完全是空白的。另外,当我关闭记录时会收到一条错误消息,该记录涉及“将大量数据复制到剪贴板”。我尝试了原来的按钮(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

您的形式已经60-70场/控制被复制? – Brad

+0

如果您手动执行该操作,会发生什么情况?选择记录,复制,转到新记录,选择记录,粘贴。 – Andre

+0

是的...这是一个数据输入表单,有时用户需要有第二个记录,其中几乎所有字段都与第一个记录相同。为了简化这一点,这个想法是打开一个新的记录与所有相同的数据,他们可以改变1或2个不同的项目。直到大约2周前,这个过程在数据库中工作得很好。现在,出于某种原因,它只是创建一个新的空白记录。 – Xor

回答

0

我认为最简单的方法可以创建一个追加查询。将条件字段设置为当前记录的ID。这可以在查询设计窗口中轻松完成。

0

没有错误讯息?

表单上的主键ID字段不允许复制重复的ID吗?

1

,最简单快速的方法是使用DAO 形式的记录集

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 
+2

+1也许而不是一堆If语句决定是否排除一个字段,你可以有一个字典像'Dim fieldsToExclude as Dictionary'然后你可以做If If FieldsToExclude.Exists Then:rstInsert.Fields(.Name) .Value = .Value' – Brad

+1

是的,或者至少是一个“Select Case”部分。 – Gustav

+0

感谢Gustav ...这段代码工作得很好(虽然我仍不确定为什么命令按钮向导中的“重复记录”选项失败)。在IF语句的第一部分中,我是否正确理解要跳过自动编号字段,您只需在THEN之后留下代码即可? (如果自动编号,那么ELSEIF ...) – Xor