我將首先說明我是 Access/VBA 的新手。我正在嘗試為鏈接的 SQL Server 資料庫在 MS Access 中創建一組用于資料輸入的表單,以記錄植被資料。我有一個包含三個未系結控制元件的表單,這些控制元件為子表單中的多個記錄的欄位提供值。具體來說,主表單中的三個控制元件是Transect_OID、Data_Recorder和Data_Observer。在子表中,每個 Transect_OID 對應 30 個記錄,對應于記錄植物物種的橫斷面 30 個位置中的每一個。我在主表單中添加了一些事件程序來自動填充子表單中的相應欄位,以確保整個樣帶的記錄的一致性。但是,此設定導致寫入沖突錯誤。在網上搜索修復后,https://www.accessrepairnrecovery.com/blog/fix-ms-access-write-conflict-error。當我添加建議的 OnActivate 事件程序時,我收到運行時錯誤 91“未設定物件變數或塊變數”。這是我用于該事件程序的代碼:
Private Sub Form_Activate()
Dim rs As ADODB.Recordset
Set rs = Me.Recordset.Clone
rs.Open
rs.Bookmark = Me.Bookmark
DoCmd.RunCommand acCmdRefresh
Me.Bookmark = rs.Bookmark
rs.Close
Set rs = Nothing
End Sub
Private Sub Form_Deactivate()
DoCmd.RunCommand acCmdSaveRecord
End Sub
Private Sub Observer_AfterUpdate()
Me.frmLPIDetail.Form.Data_observer = Me.Observer
Me.Dirty = False
End Sub
Private Sub Recorder_AfterUpdate()
Me.frmLPIDetail.Form.Data_recorder = Me.Recorder
Me.Dirty = False
End Sub
通過研究其他運行時錯誤 91 投訴,似乎在以下情況下會拋出此錯誤:
沒有選擇合適的庫作為參考。在這種情況下,這將是 Microsoft ActiveX 資料物件 2.5 庫。我已經確保選擇了這個。
物件變數已宣告但未設定。代碼的第 3 行應該是它被設定的地方。然而,這是除錯器抱怨的那一行。
物件變數設定為空。這是倒數第二行的情況,但我的理解是該行重置了物件變數
With 塊中的 Go To 陳述句。在這個子程式中從不呼叫這些命令,所以很容易排除這個原因。
我不知道為什么會這樣。任何建議將不勝感激。
uj5u.com熱心網友回復:
這個錯誤很簡單:你嘗試兩次編輯同一個記錄。
我在主表單中添加了一些事件程序來自動填充子表單中的相應欄位,以確保整個樣帶的記錄的一致性。
那是要糾正的代碼。這樣做并洗掉 OnActive 代碼。
由于您尚未發布違規代碼,我們無法提供進一步幫助。
另外,請使用較新的 ADO 6.1 庫。
試試這個更簡單的方法:
Private Sub Form_Activate()
Dim rs As ADODB.Recordset
Dim Id As Long
Id = Me!Id.Value
Me.Requery
' Restore previous current record.
Set rs = Me.Recordset.Clone
rs.Find "Id = " & Id & ""
Me.Bookmark = rs.Bookmark
rs.Close
End Sub
Private Sub Form_Deactivate()
DoCmd.RunCommand acCmdSaveRecord
End Sub
Private Sub Observer_AfterUpdate()
Me!frmLPIDetail.Form!Data_observer.Value = Me!Observer.Value
Me.Dirty = False
End Sub
Private Sub Recorder_AfterUpdate()
Me!frmLPIDetail.Form!Data_recorder.Value = Me!Recorder.Value
Me.Dirty = False
End Sub
uj5u.com熱心網友回復:
首先是寫沖突:
事實證明,我的問題源于這樣一個事實,即我在此表單的控制源表中有位資料型別欄位。顯然,如果來自鏈接的 SQL Server 資料庫的位欄位保留為空,Access 會以某種方式將它們轉換為 0,這會導致寫入沖突。在SQL中,我將所有記錄的值都改為0。這樣就解決了寫沖突的問題。
其次是運行時錯誤代碼 91:這是因為我試圖使用主表單上原始問題中的鏈接建議的解決方法,這不是寫沖突的根源。當我將原始代碼添加到子表單并將其從主表單中洗掉時,運行時錯誤 91 消失了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371217.html
