Voor zover ik weet @@IDENTITY
werkt niet voor op cursor gebaseerde invoegingen. DAO en ADO gebruiken beide cursors achter de schermen.
Nadat u .Update
het record zou je de identiteitswaarde terug moeten kunnen krijgen door simpelweg de waarde te lezen.
Het volgende werkt prima voor mij via een ADO Recordset geopend met Keyset-semantiek:
r.Update
Debug.Print r("ItemID")
Het volgende werkt prima voor mij via een DAO-recordset geopend met Dynaset-semantiek:
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
Je moet .Requery
vermijden en .MoveFirst
, introduceert u gelijktijdigheidsproblemen. Overweeg:
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")