Why waste user's time by unnecessarily allowing them to edit a row
which another user has in the meantime edited? It rarely makes
sense.
If you have an app where it happens anything more than very rarely,
I'd suggest you might be better off with a different back end.
Thus, you handle when it happens, rather than pre-emptively
overtaxing the record locking engine.
I'm not certain about this, but I've heard that the way Jet actually
implements row-level locking is by storing each record in a single
data page. This means your database will have lots of extra space in
it, though with today's large hard drives, that oughtn't really
matter. It does mean that operating on large sets of records will
have to retrieve more raw data across the wire, though, again, I
doubt that matters much these days.
Far more
authoritative voices than mine have said the same. Here's what
Litwin, Getz and Gunderloy said on the subject in the 2002 ADH:
"With Access 2002's support for true record locking, however, we
now believe
They "believe" -- they don't prove it. They say lots of things that
turn out to make no sense (such as the chapters on replication in
the A97 and A2000 versions of their book, and their idiotic
comparison of DBEngine(0)(0) and CurrentDB()).
that pessimistic locking is the preferred choice for most
applications...."
That's their opinion. I've never implemented it in a single one of
my apps and have not encountered issues at all.
If your working environment makes optimistic locking the preferred
strategy, then use it, but my experience firmly puts me in the
camp of the holy trinity of LG & G as regards the generality of
the issue.
I would say use optimistic locking by default, and choose
pessimistic when optimistic locking (and handling the collisions)
becomes a problem. And at that point, I'd be looking at upsizing, to
be honest.