Anti-FAQ: Czy można przepełnić Autonumer?

Wartości w polu Autonumer przyrastają cyklicznie, to znaczy tak:

      ID(Autonumer)
      1
      2
      ...
      2147483646
      2147483647
      -2147483648
      -2147483647
      -2147483646
      ...
      -3
      -2
      -1
      0
      1
      2
... i tak w kółko. A zatem przypomina to podroż po obwodzie koła, która nigdy się nie kończy. Jedyne, co może się nam przytrafić, to naruszenie unikalności tego pola, bo zwykle zakładany tam indeks bez powtórzeń. Jednak w normalnej pracy to chyba tylko teoretyczna możliwość.

U w a g a: Należy zauważyć, że po liczbie 2147483647, następną w kolejności jest -2147483648. Taaaki skok na drugi koniec zakresu liczb typu Long może wydać się dziwny, ale tylko do czasu, gdy uświadomimy sobie, że to tylko interpretacja dziesiętna kolejnych wartości binarnych. W notacji szesnastkowej już nie ma wątpliwości, że 'wewnętrznie' te liczby różnią się o 1 (jeden). Poniżej zamieściłem te same wartości, właśnie w notacji szesnastkowej:

      ID(Autonumer)
      00000001
      00000002
      ...
      7FFFFFFE
      7FFFFFFF
      80000000
      80000001
      80000002
      ...
      FFFFFFFD
      FFFFFFFE
      FFFFFFFF  'dopiero tutaj następuje zamknięcie cyklu 
      00000000  'i przeskok z samych jedynek na same zera.
      00000001
      00000002
... i tak w kółko. Płynie z tego pewien dość przydatny wniosek: Dla pola typu Autonumer, najmniejszą wartością jest 0 (zero), a największą -1 (minus jeden). To spostrzeżenie wykorzystuje się do zerowania Autonumeru bez konieczności defragmentacji bazy, opisane w dziale Anti-FAQ: Tabele (pkt. 6). Wystarczy za pomocą kwerendy INSERT INTO... wpisać do pola ID liczbę -1, żeby Access dał się 'oszukać' i zwiększył licznik do maksymalnej wg siebie wartości (szesnastkowo FFFFFFFF). I tak cykl się zamyka - znowu możemy liczyć od początku.

K. P.