如何知道最近添加的记录的ID?

问题描述 投票:0回答:1

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

根据我在StackOverflow上发布的信息

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

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

vba ms-access access-vba
1个回答
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)如何工作?

关于在(0)方法之后直接使用.OpenRecordset,这只是访问Fields集合中的第一项的快捷方式(它是Recordset class的默认成员),因此等效于:

.OpenRecordset("select @@identity").Fields(0)
© www.soinside.com 2019 - 2024. All rights reserved.