Ms access 访问:在DAO中获取新创建的自动编号

Ms access 访问:在DAO中获取新创建的自动编号,ms-access,vba,dao,Ms Access,Vba,Dao,我在DAO中有一个连接到SQLServer2008中的链接表的代码。我需要在.AddNew上获取新创建的自动编号 Set db = CurrentDb Set rs = db.OpenRecordset("AuditTrail") rs.AddNew rs("ActionID") = actionAdd rs("dtDateTime") = Now() rs("FormName") = frmName rs("TableName") = tblName rs("RecordID") = act

我在DAO中有一个连接到SQLServer2008中的链接表的代码。我需要在
.AddNew
上获取新创建的自动编号

Set db = CurrentDb
Set rs = db.OpenRecordset("AuditTrail")

rs.AddNew
rs("ActionID") = actionAdd
rs("dtDateTime") = Now()
rs("FormName") = frmName
rs("TableName") = tblName
rs("RecordID") = actionAdd
rs("Comment") = Nz(comment, "")
rs("UserID") = UserIDName
rs("UsernamePC") = VBA.Environ("USERDOMAIN")
rs("DomainPC") = VBA.Environ("USERDOMAIN")
rs("ComputerNamePC") = VBA.Environ("COMPUTERNAME")
rs.Update

rs.Close

如果在
rs.Close
之前使用
rs(“AuditTralid”)
,它将返回1(第一个条目)。

Bookmark
属性设置为与
LastModified
属性相等,以返回到刚才添加的记录

编辑:如Conrad Frix所述,打开记录集时使用
dbSeeChanges
选项:

Set db = CurrentDb
Set rs = db.OpenRecordset(Name:="AuditTrail", Options:=dbSeeChanges)

rs.AddNew
rs("ActionID") = actionAdd
' ... update additional fields
rs.Update
rs.Bookmark = rs.LastModified
Debug.Print rs("ID")
rs.Close

如果要插入的是SQL Server数据库,那么数据库上的触发器不是更好的解决方案。

如果在记录集中包含自动编号,那么调用Update后能否读取值?记录集指向lnked表,在本例中,该表包含自动编号字段([AuditTrailID])。在rs.update命令之后,它始终返回1。作为最后的手段,您可以使用刚才插入的记录值查询更新的表中的Id。我相信这就是你试图避免做的…只是出于好奇,这就是你正在使用的代码吗?我之所以这样做,是因为如果不将
recordsetoptionnum.dbSeeChanges
选项与具有标识字段的SQL表一起使用,就会出现错误。如果它与建议的代码完全相同,
AuditTrail
不是SQL表,可能是它的
dbo\u AuditTrail
。或者它没有标识性列AuditTrail是SQL Server 2008表的链接表(在Access中)。AuditTrailID设置为标识规范。我没有修改代码,只是遗漏了变量声明。我到底在哪里添加
recordsetoptionnum.dbSeeChanges
?@RachelHettinger我测试了它,它对我来说运行良好。因此,即使OP出现问题,它也可以用于SQL表。@RachelHettinger我收到了相同的错误消息。使用dbSeeChanges选项集。它可以工作,我们在SQL server中使用了多年。这里的问题很可能是什么是pk自动编号?在示例代码中,我们使用“ID”,但可能您的自动编号PK不同,例如“AuditTralid”或其他什么。我的自动编号主键字段是AuditTralid,我正在相应地调整名称,否则我将收到“成员不是集合的一部分”错误消息发现问题!我已经用数据类型bigint创建了主键。Access显然无法识别大int。当我进入表设计[在Access中]并看到带有文本数据类型的字段时,我注意到了这一点。我把它改成int,应该可以。谢谢从不真正设置触发器。但我仍然需要一些来自程序的信息来填写表格。