如何锁定访问子表单中的记录

Posted

技术标签:

【中文标题】如何锁定访问子表单中的记录【英文标题】:How to lock a record in an access subform 【发布时间】:2013-09-06 13:47:03 【问题描述】:

我试图弄清楚一旦用户移动到下一个记录以输入数据后如何锁定子表单中的记录。但我仍然希望用户能够返回并查看其他记录但不能编辑信息。或者有一个可以做这个功能的控制框,一旦勾选,记录被锁定,只能读取。我不希望字段在数据输入时锁定,我希望用户能够在他们处理记录的整个过程中选择/取消选择/添加/删除数据,但是一旦他们完成并转到下一个,或保存或单击控件,我希望它全部锁定并只读给任何人。

我正在使用 MS Access 2010。

任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

从 Office 2007 Access 开始,使用“数据”选项卡设置“表单”对象的属性。

Allow additions: YES
Allow Deletions: NO
Allow Edits: NO

您仍将使用正常方式限制对表单的访问,但它会阻止对先前输入的字段进行任何和所有编辑,并且在您添加时仍然可以访问对记录的更改,但一旦记录移动到新纪录。

【讨论】:

【参考方案2】:

您可以使用整数来存储用户查看过的最新记录 ID。在子窗体的 onCurrent 事件中,根据当前记录的 ID 检查该整数。如果它更小,则将窗体上所有控件的.Enabled 属性设置为 False。否则,将它们全部设置为 true。

因此,您希望公开声明一个整数并在表单的 onCurrent 事件中执行类似的操作。

If Me.ID > recCount Then
    recCount = Me.ID
End If

If recCount < Me.ID Then
    'Disable all controls
    myControl.Enabled = False
Else
    'Enable all controls
    myControl.Enabled = True
End If

当然,这不会阻止人们退出并重新加载数据库以再次编辑旧记录。如果您想更好地保护它,那么您可以将 ID 存储在一个虚拟表中(一个定义的字段和一个记录)。

以只读方式顺序呈现记录是否重要?因为否则,将布尔字段添加到表中似乎要好得多,在 onCurrent 中检查 that 并从那里启用/禁用控件。

【讨论】:

【参考方案3】:

我建议您实施某种用户管理,以允许特定用户组在特定情况下编辑记录。例如:当复选框等于 -1 且授权状态为肯定时。

这样,未经授权的用户将无法编辑记录,并且有权访问的用户必须在对数据进行任何更改之前选中复选框。

要锁定表单或子表单上的记录,您可以使用

Me.locked = true 'for single form
Me.mySubFormName.locked = true 'for subform 

使用 false 允许在您选择的场景下进行编辑~

--

正如 hoopzbarkley 建议的那样,如果您想在记录被编辑后一劳永逸地锁定它,那是另一回事。因为您必须在向用户显示数据之前检查您的数据,如果要显示被阻止记录表中的 ID,请使用 .lock 属性。

【讨论】:

以上是关于如何锁定访问子表单中的记录的主要内容,如果未能解决你的问题,请参考以下文章

是否可以为特定记录禁用/启用访问子表单中的控件?访问 2000 - VBA

如何在Access中使用子表单时编辑现有记录而不创建新记录?

在多用户访问环境中即时“锁定”记录

访问子表单,选择下一条记录时停止自动保存到链接表

如何从 Angular 6 中的父组件访问子组件中的表单?

(访问)在文本字段中搜索与另一个表字段中的字符串匹配的字符串,并在子表单中显示这些匹配记录