Access 数据库在记录脏时返回 + 生成自动编号。在 SQL server + Access 的情况下,您不能使用也不显示自动编号 UNTIL 记录保存时间。
简单的解决方案是强制保存表单数据,然后您拥有的任何后续/现有代码将继续工作。
所以你的代码可以是这样的:
If Me.NewRecord = True Then
Me.Dirty = False
End If
只要进行了一些编辑,上述操作就会起作用。请注意,如果没有进行任何编辑,上述将不会生成自动编号 ID(但是即使在非 SQL 服务器数据库中,当没有进行任何编辑时,自动编号也不可用)。
以上适用于绑定表单。如果您有 reocrdset 代码,那么您可以像这样更改典型代码:
Set rstRecords = CurrentDb.OpenRecordset("tblmain")
rstRecords.AddNew
在您的 VBA 代码上方可以/可以获取自动编号。但是上面的 sql sever 代码必须强制保存。
事实上,适用于 ACE 或 SQL 服务器的代码如下:
将变为:
暗淡 rstRecords 作为 DAO.Recordset
将 lngNext 调暗
Set rstRecords = CurrentDb.OpenRecordset("tblmain", dbOpenDynaset, dbSeeChanges))
rstRecords.AddNew
' code here does whatever
rstRecords.Update
rstRecords.Bookmark = rstRecords.LastModified
lngNext = rstRecords!ID
rstRecords.Close
所以简单的“问题”是您需要写出记录以强制 SQL 服务器生成自动编号。完成此记录保存后,您的表单和大多数 VBA 代码应该“按原样”运行。除非您使用 SQL 插入命令而不是上述表单或记录集代码,否则您不需要“求助”其他代码,例如 select @@identity。