當您關閉在 Access 中的表單時,就會發生未預期的寫入衝突錯誤

中等: 需要基本巨集、 編碼和交互操作性技巧。這篇文章可套用於 Microsoft Access 資料庫 (.mdb) 和 Microsoft Access 專案 (.adp)。

徵狀

當您編輯使用具有相同的記錄來源的多個表單的資料時,您可能會收到下列錯誤訊息:

這筆記錄已變更另一位使用者,自您開始編輯它。如果您儲存記錄時,您將會覆寫所做的變更所做的其他使用者。 變更複製到剪貼簿,可讓您查看其他使用者輸入,並貼上您的變更上一步中,如果您決定要進行變更的值。

接著,您可以按一下下列三個按鈕之一:

  • 儲存記錄

  • 複製到剪貼簿

  • 放棄變更

原因

當您開啟兩個同時更新相同的資料來源的表單時,就會發生這個問題。第一個表單上的記錄,將編輯鎖定,然後第二個表單的變更記錄的記錄或位置,並儲存所作的變更。當第一個表單會嘗試關閉,並寫回至資料表時,第二個表單所做的變更將會偵測到。這會導致傳回錯誤。

解決方案

要解決這個問題,請使用其中一種方法中,列出 Microsoft Access 資料庫 (.mdb) 檔案或 Access 專案 (.adp) 檔所列的方法。

Microsoft Access 資料庫 (.mdb) 檔案

方法 1

將表單的RecordLocks屬性設定為 [編輯記錄。若要這麼做,請依照下列步驟執行:

  1. 在 [設計] 檢視中開啟表單。附註在 Access 2007 中,移至步驟 3。

  2. 按一下 [檢視] 功能表上的 [內容]。

  3. 在 [資料] 索引標籤中,變更 [記錄鎖定] 屬性為 [編輯記錄。

方法 2

若要儲存記錄這兩種形式的 OnDeactivate 事件程序中加入程式碼。若要這麼做,請依照下列步驟執行:

  1. 在 [設計] 檢視中開啟表單。附註在 Access 2007 中,請前往步驟 4。

  2. 按一下 [檢視] 功能表上的 [內容]。

  3. 按一下 [編輯] 功能表上的 [選取表單]。

  4. 在 [事件] 索引標籤中,在 [ OnDeactivate ] 屬性方塊中,按一下滑鼠右鍵,然後按一下 [建置。

  5. 在 [選擇建立幫手] 方塊中,按一下 [程式碼建立幫手,,然後按一下[確定]。

  6. 輸入或貼上下列程式碼:

    DoCmd.RunCommand acCmdSaveRecord
  7. 在設計檢視中開啟第二個表單,並重複步驟 2 到 6。

Microsoft Access 專案 (.adp) 檔案:

加入兩個表單儲存記錄的 OnDeactivate,並使用 OnActivate 事件程序中的程式碼。若要這麼做,請依照下列步驟執行:

  1. 在 [設計] 檢視中開啟表單。附註在 Access 2007 中,請前往步驟 4。

  2. 按一下 [檢視] 功能表上的 [內容]。

  3. 按一下 [編輯] 功能表上的 [選取表單]。

  4. 在 [事件] 索引標籤中,在 [ OnDeactivate ] 屬性方塊中,按一下滑鼠右鍵,然後按一下 [建置。

  5. 在 [選擇建立幫手] 方塊中,按一下 [程式碼建立幫手,,然後按一下[確定]。

  6. 輸入或貼上下列程式碼:

    DoCmd.RunCommand acCmdSaveRecord
  7. 在 [檔案] 功能表中,按一下 [關閉並返回到 [Microsoft Access。

  8. 在 [事件] 索引標籤中,在使用 OnActivate屬性方塊中,按一下滑鼠右鍵,然後按一下 [建置。

  9. 在 [選擇建立幫手] 方塊中,按一下 [程式碼建立幫手,,然後按一下[確定]。

  10. 輸入或貼上下列程式碼:注意本文中的程式碼範例會使用 Microsoft ActiveX 資料物件。若要正確執行這個程式碼,您必須參考 Microsoft ActiveX 資料物件 2.x (其中 2.x 是 2.1 或更新版本) 的程式庫。若要這麼做,請按一下在 Visual Basic 編輯器] 中的 [工具] 功能表上的 [參考,並確定Microsoft ActiveX 資料物件程式庫 2.x在選取核取方塊。

    Dim rs As ADODB.RecordsetSet rs = Me.Recordset.Cloners.Bookmark = Me.BookmarkDoCmd.RunCommand acCmdRefreshMe.Bookmark = rs.Bookmarkrs.CloseSet rs = Nothing
  11. 在 [設計] 檢視中,開啟第二個表單,然後重複步驟 2 到 10。

其他相關資訊

若要重現這個問題,在 Access 2003 中的步驟

  1. 開啟 [存取]。

  2. 在 [說明] 功能表上,指向範本資料庫],然後按一下 [北風樣本資料庫。

  3. 在 [資料庫] 視窗中,按一下 [物件] 下的 [資料表,然後按一下 [員工] 資料表。

  4. 按一下 [插入] 功能表的 [自動產生表單]。

  5. 將表單儲存為frmNewEmployees中。

  6. 開啟 [員工] 表單,然後將 [名字] 欄位變更為Nancy1。

  7. 開啟 [frmNewEmployees] 表單,然後將 [名字] 欄位變更為Nancy2。

  8. 關閉 [frmNewEmployees] 表單。

  9. 關閉 [員工] 表單。請注意,您會收到本文 < 徵狀=""> 一節所述的 「 寫入衝突 」 訊息。

如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:

304181的非預期的寫入衝突錯誤當您關閉表單

280730 ACC2000: 當您嘗試更新連結的 SQL Server 資料表中的資料錄時,寫入衝突錯誤

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×