【问题标题】:How to know the ID of the most recently added record?如何知道最近添加的记录的ID?
【发布时间】:2020-04-27 11:43:10
【问题描述】:

我想知道最近添加的记录的 ID。

从 StackOverflow 上的帖子中,我使用

nNewID = CurrentDb.OpenRecordset("SELECT @@IDENTITY")(0)

似乎没有对已添加记录的表的任何引用-@@IDENTITY 是否引用最后添加的记录,无论它添加到哪个表?另外语句末尾的 (0) 的作用是什么?

【问题讨论】:

标签: vba ms-access


【解决方案1】:

首先,您应该知道,这种获取最近添加记录的自动编号值的方法只有在创建记录的同一数据库工作区(使用 DAO 时)或同一数据库连接的范围内进行评估时才能可靠地工作(使用 ADO 时)。独立于这种连接进行评估,该语句只会产生0

示例

假设我们有一个名为 Table1 的表,其中包含两个字段:

Table1
+------------+--------+
|     ID     | Field1 |
+------------+--------+
| AutoNumber | Text   |
+------------+--------+

我们可以使用以下代码创建一条新记录:

With CurrentDb
    .Execute "insert into table1 (field1) values ('abc')"
End With

如果我们想找到分配给自动编号字段 ID 的值,我们可以这样做:

With CurrentDb
    .Execute "insert into table1 (field1) values ('abc')"
    Debug.Print .OpenRecordset("select @@identity")(0)
End With

@@IDENTITY 是什么?

请注意,上面示例中使用的 SQL 语句独立于任何一个特定的表或字段(没有from 子句),因为@@identity 列仅引用最后一个自动编号值(针对任何记录)在任何表中) 用于当前数据库工作区 (DAO)/连接 (ADO)。

T-SQL documentation 可能有助于您理解,但请注意,这适用于 SQL Server,而不是 MS Access,因此虽然这提供了@@identity 用途的描述,但并非所有内容都将直接转换为 MS Access。

.OpenRecordset("...")(0) 是如何工作的?

至于在.OpenRecordset方法之后直接使用(0),这只是访问Fields集合中第一项的简写(这是Recordset class的默认成员),因此是等价的到:

.OpenRecordset("select @@identity").Fields(0)

【讨论】:

  • 添加来自stackoverflow.com/a/5942862/9439330的信息,因为Dao使用工作区作为范围
  • @ComputerVersteher 感谢您提供宝贵的说明 - 我已经更新了上面的答案。
猜你喜欢
  • 2015-02-07
  • 1970-01-01
  • 2021-12-13
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多