This one confused me for a while and the problem had nothing to do
with IBO but I pass it on in case anyone else hits this problem.

The symptoms were that primary keys that have values from a generator
were becoming corrupted just at the point I was implementing DML
caching. The application had been working fine until then ... But
the problem had nothing to do with DML caching which seems to work
just fine but to do with Interbase itself.

Under IB6 (Dialect 3) generators are 64bit and within the database
all generators are stored within one page. This puts a limit on the
number of generators that can be used and once the limit is reached
the database starts to corrupt, or at least that page of the
database. The problem may well have been there in earlier versions
of Interbase but with generator values being 32bit the limit was
higher. If the database page size is 1024 this seems to imply a
generator limit of a little over 100. A larger page size helps but
is not the ideal solution. Firebird release 0.9.4 seems to have this
problem fixed.

Martin Lunt