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

时间:2013-09-06 13:47:03

标签: access-vba subforms

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

我正在使用MS Access 2010.

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

所以你想公开声明一个整数,并在表格的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中的那个并从那里启用/禁用控件。

答案 2 :(得分:1)

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

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

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

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

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

-

正如hoopzbarkley建议的那样,如果你想在编辑之后一劳永逸地锁定记录,那就另辟了。因为在显示数据之前必须检查数据,如果要显示阻塞记录表中的ID,则使用.lock属性。