如何在表单加载时锁定子表单中的特定行?

时间:2011-01-31 09:10:49

标签: ms-access vba access-vba

我有一个包含记录的子窗体,其中是/否字段显示为子窗体上的复选框。加载主窗体时,我需要锁定所有已检查的字段,以便用户无法撤消先前用户的操作:他们应该只能检查/取消选中在其会话开始时未选中的框。

是否可以迭代子表单中的所有记录并在加载表单时根据字段值有选择地锁定记录?

我知道我可以放点像

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

在子窗体OnCurrent事件中但这会阻止用户取消选中他们可能意外检查的框。我可以遍历子表单上的记录,但无法弄清楚如何锁定行级别的记录。

我的另一个解决方案是将表单分成两个子表单 - 当前检查的项目与不是的项目,而是将其保留为一个表单。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

不,没有办法在MS Access中的GUI中锁定特定的行(或记录)。如果在一条记录上更改控件的属性,则会在子窗体中的所有记录上更改它。

我认为您甚至无法直接在基础表上执行行级锁定。通常,锁定是为了防止其他人编辑您的记录。但在这种情况下,您试图阻止自己编辑它们。

您描述的两种方法(OnCurrent和单独的SubForms)可能是您的最佳选择。为了清洁代码,我选择后者。

答案 1 :(得分:0)

好吧,如果我正确地阅读你的问题,你基本上给了自己解决问题的方法。您可以设置它,以便在迭代到下一条记录时,根据这些控件或其他控件的值锁定某些控件。当然,您实际上并没有锁定表中的行,但是您阻止用户更改锁定控件的值。

如果您的意思是阻止其他用户编辑您刚刚编辑的记录 - 那么这不会解决您的问题。