【发布时间】:2011-05-09 21:37:57
【问题描述】:
我在 MS Access 中有以下代码:
Sub IdentityFail()
Dim db1 As DAO.Database, db2 As DAO.Database
Dim id1 As Long, id2 As Long
CurrentDb.Execute "CREATE TABLE LocalDummy (Col1 AUTOINCREMENT, Col2 INT)", dbFailOnError
Set db1 = CurrentDb
Set db2 = CurrentDb
db1.Execute "INSERT INTO LocalDummy(Col2) VALUES(Null)", dbFailOnError
id1 = db1.OpenRecordset("SELECT @@IDENTITY")(0)
db2.Execute "INSERT INTO LocalDummy(Col2) VALUES(Null)", dbFailOnError
id2 = db2.OpenRecordset("SELECT @@IDENTITY")(0)
Debug.Print id1, id2
Debug.Print db1.OpenRecordset("SELECT @@IDENTITY")(0), _
db2.OpenRecordset("SELECT @@IDENTITY")(0), _
CurrentDb.OpenRecordset("SELECT @@IDENTITY")(0)
End Sub
我希望这会输出以下内容(即,每个不同的 db 对象都有自己的“最新身份”值):
1 2
1 2 0
相反,我得到了(即,它似乎是全局范围的):
1 2
2 2 2
我认为SELECT @@IDENTITY 是在 Jet 4.0+ 中获取最新自动编号 ID 的安全方法。我究竟做错了什么?
【问题讨论】: