11. Jak odczytać autonumer, nadany podczas wstawiania rekordu?

Autorem prezentowanego rozwiązania jest Krzysztof Naworyta:

Function GetNextCounter(tbName as String) as Long
  Dim db  As DAO.Database
  Dim rst As DAO.Recordset
  Dim Klucz As Long

  Set db = CurrentDb
  Set rst = db.OpenRecordset(tbName,,dbAppendOnly)
  With rst 
    .AddNew
	Klucz = .Fields(0) 'zakładam, że autonumer jest pierwszym polem ...
    .Close	           'zamiast .Update !	
  End With
  GetNextCounter = Klucz
End Function

Wykorzystanie w innym miejscu kodu:

'(...)
retVal = GetNextCounter("Tabela1")
db.Execute "INSERT INTO Tabela1 (ID, Pole1) SELECT " & retVal & ", ..." 
db.Execute "INSERT INTO PodTabela (kluczObcy, Pole1) SELECT " & retVal & ", ..." 
'(...)

Pomyslowe! Rezerwacja numeru i INSERT INTO... Warto zapamietac ten trik.

Istota rozwiązania polega na tym, że Access za każdym razem rezerwuje nowy numer, nawet jeśli wycofamy sie z zapisu. Gwarantuje to bezkonfliktowe przydzielanie wartości ID także w środowisku sieciowym, gdy jednocześnie kilku użytkowników chce dodawać rekordy do tabeli. Także, jeśli nie zaistnieje jakaś sytuacja awaryjna - uzyskujemy numeracje bez 'dziur'.

A oto kilka słów pomysłodawcy:

.AddNew podnosi licznik tabeli i od tego momentu ktoś inny już tego numeru nie dostanie! Numer został zużyty (ale nie wprowadzony) i amen ! Mozna go spokojnie użyć ponownie, bez strachu, że ktoś nam go wpisze z innego komputera. -- KN