Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottieni ID dell'ultimo record inserito - Accedi a DAO, ODBC, SQL Server 2008 Identity Field

Per quanto ne so @@IDENTITY non funziona per gli inserimenti basati sul cursore. DAO e ADO utilizzano entrambi i cursori dietro le quinte.

Dopo aver .Update il record dovresti essere in grado di recuperare il valore di identità semplicemente leggendo il valore.

Quanto segue funziona bene per me tramite un recordset ADO aperto con semantica Keyset:

r.Update
Debug.Print r("ItemID")

Quanto segue funziona bene per me tramite un recordset DAO aperto con la semantica Dynaset:

r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")

Dovresti evitare .Requery e .MoveFirst , stai introducendo problemi di concorrenza. Considera:

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")