私の知る限り、@@IDENTITY
カーソルベースの挿入では機能しません。 DAOとADOはどちらも、舞台裏でカーソルを使用します。
.Update
を実行した後 値を読み取るだけでID値を取り戻すことができるはずのレコード。
以下は、キーセットセマンティクスで開かれたADOレコードセットを介して正常に機能します。
r.Update
Debug.Print r("ItemID")
以下は、Dynasetセマンティクスで開かれたDAOレコードセットを介して正常に機能します。
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
.Requery
は避けてください および.MoveFirst
、並行性の問題が発生しています。検討してください:
Dim r as DAO.Recordset, db as DAO.Database
Set db = CurrentDb
Set r = db.OpenRecordset("SELECT TOP 1 * FROM item ORDER BY ItemID DESC", dbOpenDynaset, dbSeeChanges)
r.AddNew
''// Set field values here
r.Update
''// At this point another user adds a new record
r.Requery
r.MoveFirst ''// ORDER BY ItemID DESC means that you're going to see the new user's row
Debug.Print r("ItemID")