好吧,我设法找到了一个可以接受的解决方案!
首先,在 MS Access 中,当对表使用事件驱动数据宏时,不可能直接引用自动编号字段的值,直到它被完全插入并保存在数据库中(这不是其他字段类型的情况)。当作为参数传递时,它将始终返回NULL VALUE。
话虽如此,我们仍然可以在自定义 VBA 函数的帮助下为任何自动编号字段引用当前种子编号(感谢HansUp的这篇文章):
Public Function NEXTAUTONUM(ByVal pTable As String, ByVal pColumn as String) As Long
Dim CAT As Object
Set CAT = CreateObject("ADOX.Catalog")
Set CAT.ActiveConnection = CurrentProject.Connection
NEXTAUTONUM = CAT.Tables(pTable).Columns(pColumn).Properties("Seed")
Set CAT = Nothing
End Function
如果插入新行,NEXTAUTONUM 将返回 Access 将在 [ID] 字段中设置的下一个自动编号值,这是 HASH FUNCTION 需要作为输入参数的值。现在我们可以在更改前事件中创建我们的数据宏,它应该如下所示:
If [IsInsert] = True Then
Set Field
Name Hashed ID
Value = HASHFUNCTION ( NEXTAUTONUM ( "Serials","ID" ) - 1 )
End If
此外,我们从 NEXTAUTONUM 函数返回的值中减去 1,因为我们需要当前正在处理的行的 [ID] Autonumber 值,而不是下一个将创建的行。
希望这会对某人有所帮助!