Доколкото ми е известно @@IDENTITY
не работи за вмъквания, базирани на курсора. DAO и ADO използват курсори зад кулисите.
След като .Update
записа, трябва да можете да върнете стойността на самоличността просто като я прочетете.
Следното работи добре за мен чрез ADO Recordset, отворен със семантика на Keyset:
r.Update
Debug.Print r("ItemID")
Следното работи добре за мен чрез DAO Recordset, отворен със семантика на Dynaset:
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")