Cod*_*Med 2 ms-access vba access-vba ms-access-2010
我正在开发一个访问数据库,其中包含一些仅用于数据输入的表单.问题是,当我打开任何这些表单时,访问会在基础表中创建一个新条目,包括递增基础表的自动编号主键,并且即使用户选择不创建记录,自动编号也会保持递增数据库.这意味着由于用户在不提交更改的情况下打开和关闭表单的所有时间,实际表中的自动编号序列中存在间隙.
我在beforeupdate方法中使用以下代码以允许用户丢弃错误数据:
Private Sub Form_BeforeUpdate(Cancel As Integer)
'Provide the user with the option to save/undo
'changes made to the record in the form
If MsgBox("Data has been entered into this form." _
& vbCrLf & vbCrLf & "Do you want to save this data?" _
, vbYesNo, "Changes Made...") = vbYes Then
DoCmd.Save
Else
DoCmd.RunCommand acCmdUndo
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我曾想过使用beforeinsert事件,但是在使用beforeinsert时打开表单时遇到了问题.
有人可以告诉我如何进行设置,以便不会在自动编号值的序列中创建这些间隙吗?该数据库可能由10个并发用户使用.
您不应该为自动编号字段的值赋值.自动编号允许您为每一行定义唯一值,并且这样做不保证它们是顺序的.我强烈建议您仅使用自动编号字段来识别唯一记录,而不是某种计数器或人类可读的值.
现在,如果你需要每个记录确实有一个顺序值,那么你需要做的就是这样
Microsoft提供了一个可以轻松独占锁定表的函数:DAOOpenTableExclusive()可在此处找到.
您可以使用此处的代码创建计数器表.