首页 > 解决方案 > 根据 ID 锁定 Access 数据库中的先前记录

问题描述

我正在尝试构建一个代码,其中某种形式的先前记录被锁定以进行编辑。这将允许用户创建和编辑新表单,但不能更改以前表单的数据。我希望能够允许用户访问和编辑前 5 个表单,但锁定之前所有表单中的数据。

我已经尝试了几件事,但作为一个新手 VBA 用户,没有任何效果。我试过了:

Private Sub Form_Load()
If Me.ID < 22 Then
Me.AllowEdits = False
Else
Me.AllowEdits = True
End If
End Sub

我使用了一个虚拟的“22”来查看代码是否可以工作,但它最终锁定了所有记录,而不仅仅是数字 1-21,就像我试图做的那样。

我希望“22”成为最近记录中 ID 字段的值。我也希望它是:如果 Me.ID <(最新记录的 ID)-5

这可能吗?

标签: vbams-access

解决方案


Form_Load是错误事件,因为仅在启动时Me.ID作为第一条记录引发一次。您必须使用Form_Current事件检查当前选定的记录。

不要依赖ID连续(例如由删除引起)。选择前 5 个 ID(降序排列)并获得最小值。

创建为已保存的查询(例如,将其命名为 FormNameTop5ID,其中 FormName 是表单的名称,TableName 是绑定到表单的表/查询)

SELECT TOP 5 ID FROM TableName ORDER BY ID DESC

在表单中创建一个Form_Current事件

Private Sub Form_Current()
If Me.ID.Value < DMin("ID", "FormNameTop5ID") Then
    Me.AllowEdits = False
Else
    Me.AllowEdits = True
End If
End Sub

推荐阅读