2011-01-31 82 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

相关问题