2011-01-31 81 views
0

我有一個子窗體,其中包含一個Yes/No字段顯示爲子窗體上的複選框的記錄。當主窗體被加載時,我需要鎖定所有選中的字段,以便用戶無法撤銷之前用戶所做的操作:他們應該只能檢查/取消選中在會話開始時未選中的框。如何在窗體加載時鎖定子窗體中的特定行?

是否可以遍歷子窗體中的所有記錄,並在窗體加載時根據字段值選擇性地鎖定記錄?

我知道我可以把類似

If (Me.chkItemReceived.Value = -1) Then 
     Me.chkItemReceived.Locked = True 
Else 
     Me.chkItemReceived.Locked = False 
End If 

在子窗體成爲當前事件,但這可以防止用戶取消選中,他們可能無意中查了盒子。我可以遍歷子表單上的記錄,但無法弄清楚如何在行級鎖定記錄。

我的另一個解決方案是將表單拆分爲兩個子表單 - 當然,項目檢查與項目不同,但寧可保留一個表單。

感謝您的幫助!

回答

1

不,沒有辦法在MS Access中的GUI中鎖定特定的行(或記錄)。如果您更改一個記錄上控件的屬性,它會更改它在子窗體中的所有記錄上。

我不認爲你甚至可以直接在底層表上進行行級鎖定。通常,鎖定是爲了防止他人編輯您的記錄。但在這種情況下,您正試圖阻止自己編輯它們。

您描述的兩種方法(OnCurrent和單獨的SubForms)可能是您的最佳選擇。爲了清潔代碼,我會選擇後者。

+0

我很害怕:)感謝您的輸入! – owlie 2011-02-01 01:39:18

0

那麼,你基本上給自己解決了你的問題 - 如果我正在閱讀你的問題。您可以設置它,以便在迭代到下一條記錄時,根據這些或其他控件的值鎖定某些控件以免編輯。當然,您實際上並未鎖定表中的行,但您正在阻止用戶更改鎖定控件的值。

如果您的意思是阻止其他用戶編輯剛剛編輯的記錄 - 那麼這不會解決您的問題。

+0

正如下面的代碼段所提到的,我無法有選擇地改變控件的屬性。如果我鎖定一個控件,我將它們全部鎖定 - 所以我無法鎖定其中一個生成的行。所以還有另一種形式提供給我... – owlie 2011-02-01 01:42:36

相關問題