У нас есть база данных MS Access 2007 с простой формой, отображающей данные таблицы. Мы используем диалоговое окно «Найти» (щелкните бинокль на ленте «Домой»), чтобы найти нужные записи. Запись теперь в режиме обновления (вы увидите карандаш в ряду область «желоба»).
При нажатии кнопки справки отображается:
Вы пытались вызвать Update или CancelUpdate или пытались обновить поле в наборе записей без предварительного вызова AddNew или Edit. (Ошибка 3020)
В базе данных ядра СУБД Microsoft Access вы вызвали обновление или CancelUpdate, но перед написанием не использовались методы AddNew или Edit. данные в запись.
В базе данных ODBCDirect эта ошибка возникает при попытке записи данных в запись без предварительного вызова AddNew или Edit.
Мы воспроизвели это в новой базе данных, где нет кода VBA. Таким образом, проблема заключается исключительно в MS Access, и вы сможете легко ее воспроизвести.
Если вы сохраните запись перед поиском, проблемы не возникнет. К сожалению, у нас есть пользователи, выполняющие поиск, пока запись все еще находится в режиме редактирования.
Мы пытались настроить события и обработку ошибок на уровне формы, поля данных и уровня приложения Access. Ничто не может обнаружить или уловить эту ситуацию. В VBA нет способа определить, активен ли диалог поиска.
Есть ли у кого-нибудь идеи по предотвращению ошибки или способ сохранить запись до того, как произойдет поиск? Сейчас наша лучшая мысль - создать сценарий AutoHotkey или AutoIt, который ожидает, пока диалоговое окно «Найти» перейдет в фокус. Затем мы отправим Ctrl + S, чтобы сохранить текущую запись для принудительного сохранения.