【问题标题】:Access: Get newly created auto number in DAO访问:在DAO中获取新创建的自动编号
【发布时间】:2012-02-08 23:53:51
【问题描述】:

我在 DAO 中有一个代码连接到 SQL Server 2008 中的链接表。我需要在 .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("AuditTrailID"),它会返回1(第一个条目)。

【问题讨论】:

  • 如果您在记录集中包含自动编号,那么您可以在调用 Update 后读取该值吗?
  • 记录集指向 lnked 表,在本例中包括自动编号字段 ([AuditTrailID])。在 rs.update 命令之后,它总是返回 1。
  • 作为最后的手段,您可以使用刚刚插入的记录值查询更新后的表的 Id。我敢肯定这就是你试图避免做的事情......
  • 只是出于好奇,这是您使用的确切代码吗?我问是因为如果您不将 RecordsetOptionEnum.dbSeeChanges 选项与具有 Indentity 字段的 SQL 表一起使用,您会收到错误消息。如果它与建议的代码完全相同,AuditTrail 不是 SQL 表,也许是它的dbo_AuditTrail。或者它没有标识列
  • AuditTrail 是一个链接到 SQL Server 2008 表的表(在 Access 中)。 AuditTrailID 设置为身份规范。我没有修改代码,只是省略了变量声明。我到底在哪里添加RecordsetOptionEnum.dbSeeChanges

标签: ms-access vba dao


【解决方案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

【讨论】:

  • @RachelHettinger 我测试了它,它对我来说效果很好。因此,即使 OP 遇到问题,它也适用于 SQL 表。
  • @RachelHettinger 我得到了同样的错误信息。设置了 dbSeeChanges 选项。
  • 它可以工作,我们都在 SQL Server 上使用了多年。这里的问题可能是 pk 自动编号是什么?在示例代码中,我们使用“ID”,但您的自动编号 PK 可能不同,类似于“AuditTrailID”之类的。
  • 我的自动编号主键字段是 AuditTrailID,我正在相应地调整名称,否则我会收到“成员不是集合的一部分”错误消息
  • 发现问题了!我用数据类型 bigint 创建了主键。 Access 显然无法识别大整数。当我进入表格设计 [in Access] 并看到带有文本数据类型的字段时注意到了这一点。我把它改成了int,应该没问题。谢谢!
【解决方案2】:

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

【讨论】:

  • 永远不要真正设置触发器。但我仍然需要程序中的一些信息来填写表格。
猜你喜欢
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2016-05-12
  • 1970-01-01
  • 2023-02-15
  • 2010-12-12
相关资源
最近更新 更多