Это то, что, по-моему, является источником моей проблемы, и, возможно, поэтому Аарон сказал, что Джет "случайным образом блокирует записи". Из документов DAO:
Recordset.AddNew Method
Примечание Когда вы используете AddNew в рабочем пространстве Microsoft Jet и ядро базы данных должно создать новую страницу для хранения текущей записи, блокировка страницы пессимистична. Если новая запись помещается на существующую страницу, блокировка страницы является оптимистичной.
Я думаю, что я вижу это больше в этом проекте, потому что он часто вставляет большое количество записей , когда пользователь открывает форму, поэтому движок БД создает много новых страниц, поэтому AddNew - как вызывается во время события вставки в форме - имеет больше шансов вернуться к пессимистической блокировке, поэтому больше шансов для конфликтов с другими записями, редактируемыми одновременно на той же странице.
Я создам тестовую площадку, чтобы проверить, верны ли мои подозрения.
Если это так, кажется, что вы могли бы избежать этого с помощью , а не , используя AddNew
(AllowAdditions = False
), а вместо вставлять новые записи с помощью запроса + обновлять набор записей формы , Даже если запрос вставки вызывает новую страницу, с querydef.Execute
вы не открываете набор записей, поэтому теоретически не должно быть проблем с блокировкой.