2

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

我正在使用 MS Access 2010。

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

4

3 回答 3

2

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

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

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

于 2013-09-25T18:52:27.853 回答
1

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

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

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

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

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

--

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

于 2013-09-19T18:45:37.153 回答
1

您可以使用整数来存储用户查看过的最新记录 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并从那里启用/禁用控件。

于 2013-09-09T15:04:29.677 回答