2013-11-19 2 views
0

Я создал функцию, которая проверяет, связан ли первичный ключ с внешним ключом. Если он уже связан, он запрашивает у пользователя, чтобы он захотел перезаписать существующее значение. Если он еще не связан, он просто сохраняет значение в БД, даже не запрашивая пользователя.Управление обновлениями с помощью VBA

Проблема, с которой я столкнулся, заключается в том, что после того, как моя функция уже выполнила обновление, форма БД также попыталась выполнить обновление, в результате чего появилось дублирующее сообщение об ошибке.

Я понимаю, что могу просто отвязать элементы управления на форме, чтобы они не пытались выполнить функцию обновления, хотя для удобства использования я хочу, чтобы эти элементы управления были связаны. Итак, какие другие средства я могу отменить форму от выполнения обновления и, возможно, просто обновить ее с помощью новой информации? Я уверен, что это, вероятно, легко сделать, хотя я действительно не знаю терминов для поиска в google, чтобы найти ответ.

ответ

1

Если вы хотите остаться с этой моделью лучшее, что вы можете сделать, это подключить на Form.BeforeUpdate Event и установить Cancel флаг верно, а также вызова метода DoCmd.CancelEvent.
Когда ваш код выполнен, он может вызвать метод Refresh для запроса новых значений.

Надеюсь, это ответит на ваш вопрос и решает вопрос, который у вас есть.

+0

Это очень помогает, хотя позволяет сказать, что у меня установлена ​​функция, связанная с кнопкой «on press» (которая может измениться), выполняющей проверку, есть ли способ, который я мог бы просто сказать cancelUpdate и обновить в этот момент времени ? Также, как точно установить флаг «Отмена» на значение true, вы имеете в виду просто делать это в смысле кодирования или это что-то встраивается в Access? Я прошу прощения, я все еще изучаю веревки с помощью Access и VBA. – Newd

+1

@Newd. С этой моделью я бы использовал глобальный флаг (логический), который является истинным, когда кнопка нажата и будет установлена ​​в значение false после завершения обработки. Всякий раз, когда вызывается «BeforeUpdate», я проверяю этот глобальный флаг и, если true, автоматически отменяет событие обновления (в противном случае оно может пройти). Для второй части вопроса: «BeforeUpdate» имеет логический параметр («Отмена»), вы должны установить его в true в коде обработчика события. –

+0

Звучит так, как будто это было бы фантастическим способом, чтобы это произошло, а также звучание «глобального флага», похожее на то, что это будет фантастический инструмент для моего инструментария. По звукам я могу использовать одну функцию «on click», чтобы назначить переменную, а затем снова получить эту переменную из другой функции, вызванной другим событием? У вас есть какие-то хорошие сайты, чтобы я мог узнать об этом? – Newd

Смежные вопросы