#vba #ms-access #ms-access-2007
#vba #ms-доступ #ms-access-2007
Вопрос:
Итак, я знаю, как это звучит, вы не должны хранить вычисляемые поля в таблице доступа. Однако это мой случай:
У меня есть форма, в которой пользователь вводит вес тюков. В нижней части формы находятся два поля, которые вычисляют общий вес всех тюков и общее количество тюков. Эти два поля необходимо сохранить в нашей таблице, чтобы мы могли отслеживать итоги от смены к смене.
Прямо сейчас у меня есть два вычисляемых поля, а затем у меня есть два скрытых поля, которые имеют источники управления для таблицы. Два скрытых поля на самом деле находятся в родительской форме этой подформы веса тюка. При вводе нового веса тюка в элементе управления происходит событие OnClick, которое обновляет родительские скрытые элементы управления с помощью вычисленных элементов управления формы. Проблема в том, что эти поля не обновляются сразу после ввода нового веса тюка, и если я помещаю запрос, повторный расчет, обновление в событие afterupdate, поля обновляются правильно, но курсор переходит к первой записи, которая очень недружественна для пользователя. Что еще хуже, так это то, что иногда кому-то приходится удалять или изменять кучу записей в середине этой формы, и после каждого щелчка и обновления она продолжает выводить вас наверх (или в низ, если я добавлю DoCmd.GoToRecord,,AC новая запись).
TLDR: Мне нужен лучший способ получить сумму всех тюков за 12-часовую смену для хранения в нашей таблице. Способ, который не требует обновления, потому что это приводит к неправильному размещению курсора, если записи нуждаются в обновлении.
(Я также попытался обновить таблицу после того, как форма веса тюка теряет фокус, но по какой-то причине это не согласуется с немедленным обновлением как общего веса тюка, так и общего количества скрытых элементов управления количеством тюков)
Комментарии:
1. Запросите набор записей формы, а не форму, и фокус записи не изменится:
Me.Recordset.Requery
. Или не обновляйте поля суммы до тех пор, пока не будете готовы зафиксировать запись. Используйте форму перед событием обновления. Эти суммы должны быть рассчитаны «по смене», когда это необходимо.2. Почему вы используете OnClick вместо события AfterUpdate элементов управления данными?
3. Отредактируйте вопрос, чтобы показать код, сохраняющий суммы в полях родительской записи.
4. Я.набор записей.запрос сработал отлично, спасибо! У меня просто возникла небольшая проблема при переключении с дополнительной формы на основную форму, она выдала мне сообщение «это было отредактировано другим пользователем», от которого я избавился, используя тот же код в событии OnExit дополнительной формы. Кроме того, я ошибся в событии OnClick, это было событие onEnter. Но я добавил код в onEnter, а также в Afterupdate для учета переключения с основной формы обратно на веса тюков. Работает отлично.
Ответ №1:
Вы можете использовать команду SetFocus для своего выражения. Затем курсор переместится в это поле.
Me.controlfield.Setfocus
Или
Me.controlfield.Text.Setfocus