Autant que je sache @@IDENTITY
ne fonctionne pas pour les insertions basées sur le curseur. DAO et ADO utilisent tous deux des curseurs dans les coulisses.
Après avoir .Update
l'enregistrement, vous devriez pouvoir récupérer la valeur d'identité simplement en lisant la valeur.
Ce qui suit fonctionne bien pour moi via un jeu d'enregistrements ADO ouvert avec la sémantique Keyset :
r.Update
Debug.Print r("ItemID")
Ce qui suit fonctionne bien pour moi via un jeu d'enregistrements DAO ouvert avec la sémantique Dynaset :
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")
Vous devriez éviter .Requery
et .MoveFirst
, vous introduisez des problèmes de concurrence. Considérez :
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")