0

您向表請求的更改不成功,因爲它們會在索引,主鍵或關係中創建重複值。Microsoft Access:由數據宏創建記錄時有關重複項的警告

這是當我將數據輸入到我的子表單中途時收到的錯誤消息。我的子表單的源代碼是Query,它將兩個Tables連接爲一對一的父子關係。我想,當我在數據鍵會發生以下情況:

  1. 我有一個創建於孩子表中的一行的後插入數據宏。
  2. 數據宏觸發並在子表中使用相應的外鍵創建一行。
  3. Microsoft Access不知道我在子表中創建了該行。
  4. 當我鍵入屬於子窗體中的子表的數據時,它會自動嘗試將新行添加到子表中。這失敗了,因爲一行已經存在相同的外鍵。

有沒有什麼辦法可以繞過這種行爲?在數據宏被觸發的時候,我可以橋接父表和子表之間的鏈接嗎?我不能放棄之後插入數據宏,因爲它包含一些biz邏輯,可幫助識別插入哪個子表,並且在數據填充後立即在子表中創建行非常重要子窗體,而不僅僅是在子窗體中觸摸子表的字段時。

非常感謝!

編輯:我試圖在運行Me.Requery子窗體的插入宏後解決此工作。似乎對單個記錄工作正常,但是使用批處理複製粘貼錯誤操作在事務中不受支持。發生

編輯2:我甚至發現這forum thread,說這是不可能的Requery事務後。我有點肯定應該有辦法解決這個問題,因爲它似乎有點用戶不友好...

回答

0

我通常建議不要使用計時器,但這是一種情況下,你可以使用一個。在AfterInsert上設置窗體的TimerInterval類似於500.然後將你的Me.Requery代碼放在Timer事件中,並將TimerInterval設置回0.

AfterInsert事件後,應該將TimerInterval設置回500,這將阻止定時器從發射直到所有記錄已被粘貼。

我看到你正在使用宏。我不知道你是否可以在宏中使用定時器。我根本不使用宏,我建議學習VBA而不是使用它們。

Private Sub Form_AfterInsert() 
    Me.TimerInterval = 500 
End Sub 

Private Sub Form_Timer() 
    Me.Requery 
    Me.TimerInterval = 0 
End Sub