I did a small experiment on a ~790 record recordset; I printed the
bookmark's 4 bytes for each record, and noticed that they were
sequential (hex) up to a point, then there was a gap, then another
sequential block etc.
Very interesting. My bests are that you are seeing some reference into a
BLOCK of disk (or memory space).
Remember, ms-access uses 2000 byte blocks, and stuffs in as many records it
can into that block (with some room left over).
So, you might be seeing is that when the block is full, one moves on to the
next block of memory. While I have not really studied the internal workings
of the jet database, I most certainly have studied the workings of database
engines, and JET is very much like other systems in that is uses blocks of
disk space, and stuffs records into those blocks. Remember, each record in
ms-access is a variable length record, so what happens is the data engine
resolves the record to some block of data on disk. At this point a
sequential scan occurs to pull out the record from that block. Often, if you
add just FEW bytes of data into a record, and then write it back to disk,
the new record now can't fit into the 2000k block, so some records are
pushed (split out) into a NEW 2000k block (this explains why a file bloats
SO quickly right after a compact and repair - what happens is all records
are packed tightly as possible into 2000k blocks. However, when records are
expanded a bit, then new 2000k blocks are often created since they expands
out of the 2000k block. When a good number of these new blocks have been
created, then file expansion is becomes VERY low when you update, or edit
data.