Såvitt jag vet @@IDENTITY
fungerar inte för markörbaserade inlägg. DAO och ADO använder båda markörer bakom kulisserna.
Efter att du .Update
posten bör du kunna få tillbaka identitetsvärdet helt enkelt genom att läsa värdet.
Följande fungerar bra för mig via en ADO Recordset som öppnats med Keyset-semantik:
r.Update
Debug.Print r("ItemID")
Följande fungerar bra för mig via en DAO Recordset öppnad med Dynaset semantik:
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
Du bör undvika .Requery
och .MoveFirst
, introducerar du samtidighetsproblem. Tänk på:
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")