2016-06-21 37 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