Que yo sepa, @@IDENTITY
no funciona para inserciones basadas en cursor. DAO y ADO usan cursores detrás de escena.
Después de .Update
el registro, debería poder recuperar el valor de identidad simplemente leyendo el valor.
Lo siguiente funciona bien para mí a través de un Recordset ADO abierto con la semántica Keyset:
r.Update
Debug.Print r("ItemID")
Lo siguiente funciona bien para mí a través de un DAO Recordset abierto con la semántica de Dynaset:
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
Debes evitar .Requery
y .MoveFirst
, está introduciendo problemas de concurrencia. Considere:
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")