You have 100% control over that. Why is everyone selecting entire tables and locking them with bulk updates?
Are you using bound forms? If you are using bound forms and the forms are bound to queries that select a SINGLE record for update, it would be extremely rare that users would be conflicting with each other.
Please describe how the forms/updates are designed.
Access has no control over the locking of a RDBMS. The lock options you see in Access apply ONLY to Jet and ACE databases, NEVER to SQL Server or any other RDBMS.
You need to turn off all your locking schemes and figure out what you are doing to cause the conflicts? Are you using queries that update multiple tables, this can lead to a deadly embrace where user a locks tblA and user b locks tblB and that prevents user a from also locking tblB and so his multi-table update can't happen.
The database only operates on a single record at a time, all queries operate on a single record at a time. The issue isn't with row-level locking on the table itself since that only applies for the duration that you are reading/writing data.
The form uses a query that is effectively `select * from tbldata where lock = username` which only returns one record as the user can only have one lock at a time.
The issue with the custom locking behaviour is that when you update a record on Access it doesn't immediately replicate to all other copies of the frontend DB which allows the database to lock a record someone else already owns.
There is only one table being used and updated, no multi-table locking involved.
The full flow whena user opens a record is:
- Clear any existing locks for this user
- Select one record that doesnt already have a lock and matches a list of rules
- Update lock field to current user
- Open form, form query selects a single record where lock = username
There are quite a few steps involved and some of the queries while they aren't massive, do add a none 0 duration to them which is where the issue lies.