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