If I understand your comments, turning off "Record Locking"
doesn't prevent Access from handling edit conflicts. In the event
of an update conflict, the users sees the message about needing to
refresh the record and given the option of discarding his changes
or overwriting the other user's changes.
There are two issues there:
1. record-level vs. page-level locking
2. optimistic vs. pessimistic locking.
If you turn off record-level locking, the full data pages are
locked, and this can mean that editing one record can lock other
records stored inside the same data page. However, this is not
nearly as much of a problem as it sounds like it would be -- I never
use anything else, and my users don't have edit conflicts.
Optimistic/pessimistic locking refers to what happens when a user
lands on a record that is locked by another user. With pessimistic
locking, the user can't make any changes until the other user
releases the lock. With optimistic locking, the edits are allowed
and the database engine optimistically assumes that by the time the
edits are done, the record will be unlocked by the other user. This
is yet another case where it would seem that pessimistic locking is
the way to go, but you'll end up with much worse problems than you
do with optimistic locking. Again, I never use anything but
optimistic locking in all my apps, and users almost never report
edit conflicts.
If you're having concurrency issues with page-level locking and
optimistic locking, then you may need to re-architect your
application.
- Your schema may need adjustment so that tables are partitioned
differently.
- You might be able to improve concurrency with, say, random
Autonumber as PK (since tables are clustered on the PK, this means
new records won't be clustered at the end of the table, where edits
could be happening on the same data page.
- You might need to change you some of your forms to be unbound, or
to make sure they are dirty only for brief periods (i.e., if you're
editing in code, save quickly).
- You might be better off upsizing to SQL Server or another
server-based database engine, which is not file-based and thus can
avoid certain concurrency issues that happen with Jet/ACE back ends.
There are lots of things that can be done if you're having
concurrency problems. But it's not clear that your problems will not
be fixed by one or both of Allen's recommendations (switching to
page-level locking and using optimistic locking).