我在Access中有一個表單,其中有2個未綁定的多選列表框,並帶有一些代碼以在它們之間移動項目。在Access VBA中編輯底層記錄時出現「數據已更改」錯誤
列表框中顯示的每個字段都是布爾值 - 如果該值爲true,那麼該字段的名稱將顯示在lstSelected
中,並且如果在lstUnselected
中顯示爲false。
列表框具有值列表的RowSourceType,並且通過查看底層記錄並構建字段名稱爲lstSelected
的布爾值爲true的字符串和lstUnselected
的False來編程生成值列表。
在表單上我有兩個按鈕cmdMoveToSelected
和cmdMoveToUnselected
。當我點擊cmdMoveToSelected
時,它通過執行一個SQL字符串將lstUnselected
列表框中的任何選定項目的基礎字段的布爾值從false更改爲true,然後重新構建兩個列表框的值列表。
我有這一切工作得很好。如果我做了me.lstUnwanted.requery
和me.lstwanted.requery
然後一切移動和顯示正確,和底層都正常編輯,但是當我點擊窗體上別的我得到的錯誤:
The data has been changed.
Another user edited this record and saved the changes before you attempted to save your changes.
Re-edit the record.
現在我已經找到解決的辦法(jobDetailsID
被處理的記錄的主鍵):
Dim intCurID as Integer
intCurID = Me.JobDetailsID
Me.Form.Requery
Me.Recordset.FindFirst "JobDetailsID = " & curID
這再次查詢表格,然後移回到當前記錄,這擺脫了錯誤,但是它會導致在第一條記錄打開時會出現延遲和閃爍的形式,然後變回公司正確的記錄並重新填充列表框。
有沒有辦法解決這個錯誤,或讓它以編程方式觸發,所以我可以通過vba關閉警告來捕獲它?
在此先感謝。
有趣的建議,但我真的不認爲這會有所幫助。如果表單正在運行直接更改當前記錄的VBA代碼(即不通過表單的記錄源),那麼無論表單是直接綁定到表還是在表級別上,都可能在表級別存在鎖定衝突綁定到基於該表的可更新查詢。 –
該結構確實有意義。我想讓他們在一個單獨的桌子或其他東西,但讓我解釋一下。我們正在細木工車間存儲有關工作的信息。我們製造了許多標準產品,每種標準產品都有選擇。每個布爾型字段表示某項工作是否包含在工作中 - 所以可能是「包含屋頂玻璃」和另一個「需要特殊玻璃珠」。總的來說,我有大約70個領域(沒有一個是重複集合),但他們確實需要在每個工作中都有相同的信息。儘管如此,我願意接受更好結構的建議。 – WhatEvil
如果將選項存儲在作業表中,則所有選項都具有默認值(true或false)。如果這些選項是關於在Persons表中使用SpokenLanguage的說法,那麼不需要擁有該默認值,因爲您在創建Persons時假設他們確實或不會說那種語言。在你的情況下,它可能更適用,但只有當你存儲相同的作業類型。當存儲不同的作業類型時,應用不同的選項,並且某個作業類型的所有選項都必須獲取表格中的字段。 – Bwurk