Я действительно публикую это из отчаяния после многого поиска для ответа и попыток нескольких разных вещей без успеха.
У меня есть база данных Access, в которой я недавно переносил таблицы в SQL 2005, Access продолжает функционировать для пользователей как интерфейс, предоставляющий формы, отчеты и запросы.
Однако, начиная с перехода к настройке доступа FE/SQL BE, пользователи сообщали, что иногда, когда они вводят новую запись, они нажимают на подформацию (сохраняя запись) или нажимают на сохранение в самом меню, он переходит к существующей записи. Новая запись была сохранена, но по какой-либо причине доступ переключается на другую запись по мере ее обновления. Затем пользователь должен закрыть, найти сохраненную запись и продолжить ее редактирование.
Сценарий: пользователь вводит цитату и заполняет все детали котировки, клиент, дата и т.д., затем клики в подформе позиций линий, чтобы добавить продукт (или щелкает сохранить в меню), и вдруг форма цитаты (и подчиненная позиция) показывает детали некоторой случайной цитаты. Случайная цитата может быть последней или лет назад и не имеет ничего общего с цитатой, которую они вводили.
Это странное поведение происходит только при вставке новой записи, никогда не редактируя существующую запись. Пользователи сообщают мне, что это происходит "чаще", когда они начинают добавлять новую (цитату, клиент, что угодно) после открытия базы данных.
Я заметил, что это происходит только в формах, которые имеют подчиненные формы, поэтому моя первая мысль заключается в том, что это связано с доступом, отправляемым через данные подформы до сохранения данных формы, что вызывает нарушение PK. Но это, похоже, не происходит: на сервере SQL нет ошибок, и запись успешно сохраняется. Заставляя пользователей сохранять основную запись формы перед добавлением записей подформ (т.е. На цитату, заставляя их сохранять цитату, прежде чем добавлять строки), не работает, она просто вызывает скачок (иногда) при сохранении.
Не работает vba в режиме сохранения или в потоке, я установил точки останова для всех обработчиков событий, когда он перескакивает, а vba не выполняется. Некоторые из "прыгающих" форм не имеют vba в форме. Но у всех есть подчиненные формы. Я подозреваю, что это связано с блокировкой записи.
Сервер, на котором запущены таблицы, - это SQL Server 2005, пользователи используют сочетание Access 2000 и 2003, в основном XP SP3 с несколькими старыми блоками Win2k. Они используют репликацию Merge, а несколько пользователей запускают реплицированные версии SSEE2005 и подписываются на основной сервер. Большинство пользователей не реплицируются, просто подключаясь непосредственно к серверу через собственные клиентские соединения ODBC или SQL. Но я проверял, что это происходит со всеми пользователями, обычно один или два раза в день, и это случилось со мной раньше. Так что это не проблема пользователя.
Худшая часть этого поведения заключается в том, что это происходит только некоторое время, и мне не удалось найти сценарий, который будет всегда заставлять это произойти.
Если кто-то испытал что-то подобное раньше, пожалуйста, дайте мне знать, как вы его отсортировали, или даже предложения будут приветствоваться.
Update: (1/10/09) Проблема решена, благодаря Дэвиду Фентону. Установка формы в режим ввода данных (Form.DataEntry = true), прежде чем открывать ее для добавления записей, действительно препятствует прыжкам. Клиент не сообщает никаких проблем, так как я изменил это неделю назад.