Até onde eu sei
@@IDENTITY
não funciona para inserções baseadas em cursor. O DAO e o ADO usam cursores nos bastidores. Depois de
.Update
o registro, você deve ser capaz de obter o valor de identidade de volta simplesmente lendo o valor. O seguinte funciona bem para mim por meio de um conjunto de registros ADO aberto com semântica de conjunto de chaves:
r.Update
Debug.Print r("ItemID")
O seguinte funciona bem para mim por meio de um DAO Recordset aberto com a semântica do Dynaset:
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
Você deve evitar
.Requery
e .MoveFirst
, você está introduzindo problemas de simultaneidade. Considerar: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")