Ошибка MS Access «Обновить или отменить обновление» с помощью диалогового окна поиска

У нас есть база данных MS Access 2007 с простой формой, отображающей данные таблицы. Мы используем диалоговое окно «Найти» (щелкните бинокль на ленте «Домой»), чтобы найти нужные записи. Запись теперь в режиме обновления (вы увидите карандаш в ряду область «желоба»).

  • Не сохраняя запись, нажмите на УЖЕ открыть диалоговое окно "Найти".
  • Найдите запись, которая не может быть найдено.
  • Щелкните форму еще раз. Запись все еще находится в режиме редактирования (т.е. карандаш все еще показывает). Попытайтесь сохранить или отредактируйте другое поле.
  • Это окно сообщения будет отображаться "Обновить или Отменить обновление без AddNew или Edit. "Вы можете нажать OK или Кнопки справки.
  • При нажатии кнопки справки отображается:

    Вы пытались вызвать Update или CancelUpdate или пытались обновить поле в наборе записей без предварительного вызова AddNew или Edit. (Ошибка 3020)

    В базе данных ядра СУБД Microsoft Access вы вызвали обновление или CancelUpdate, но перед написанием не использовались методы AddNew или Edit. данные в запись.

    В базе данных ODBCDirect эта ошибка возникает при попытке записи данных в запись без предварительного вызова AddNew или Edit.

    Мы воспроизвели это в новой базе данных, где нет кода VBA. Таким образом, проблема заключается исключительно в MS Access, и вы сможете легко ее воспроизвести.

    Если вы сохраните запись перед поиском, проблемы не возникнет. К сожалению, у нас есть пользователи, выполняющие поиск, пока запись все еще находится в режиме редактирования.

    Мы пытались настроить события и обработку ошибок на уровне формы, поля данных и уровня приложения Access. Ничто не может обнаружить или уловить эту ситуацию. В VBA нет способа определить, активен ли диалог поиска.

    Есть ли у кого-нибудь идеи по предотвращению ошибки или способ сохранить запись до того, как произойдет поиск? Сейчас наша лучшая мысль - создать сценарий AutoHotkey или AutoIt, который ожидает, пока диалоговое окно «Найти» перейдет в фокус. Затем мы отправим Ctrl + S, чтобы сохранить текущую запись для принудительного сохранения.

    5
    задан Dean Hill 19 November 2010 в 19:35
    поделиться