У меня есть странное обстоятельство, связанное с формой доступа. У меня есть родительская форма (показанная в представлении «Одна форма») с подчиненной формой (показанная в представлении «Непрерывные формы»). В родительской форме отображаются записи (по одной) для каждого проекта, а в подчиненной форме отображаются примечания (все они) для каждого проекта.
Подформа примечаний может содержать десятки или сотни записей для каждой записи проекта. И чтобы пользователям было удобно начинать вводить заметки в форму прямо при получении записи, у меня есть код в текущем событии родительской формы, который «позиционирует» записи в подчиненной форме, чтобы показать четыре нижние существующие записи а затем одна запись, где они могут начать вводить текст. Этот код выглядит следующим образом:
Dim mymove As Integer
Dim c As Integer
'' Attempt to scroll down in the CaseNotes subform to a convienent location
'' so that user can read the most recent note and has access to the next
'' blank note
With Me.CaseNotes.Form.Recordset
' Load the # of notes for this record
c = .RecordCount
' The display shows only 5 notes. Otherwise, you have to scroll.
' If there are more than 4 notes, we want to display just the last
' four and then have a blank line where a new note can be entered.
' The following code makes the moves necessary for this.
If c <= 4 Then mymove = c Else mymove = 4
If mymove > 0 Then
.MoveLast
.Move -mymove
End If
'move to new record
.AddNew
End With
Этот код работал миллион лет, и с ним вообще никаких проблем. Однако недавно мы добавили элемент комбинированного списка в родительскую форму, который позволяет пользователям выбирать источник данных для родительской формы. Событие после обновления для этого поля со списком изменяет RecordSource родительской формы в соответствии со значением, выбранным пользователем.
После того, как мы реализовали это, наш код позиционирования больше не работает сразу после изменения источника данных. Таким образом, вы выбираете новый источник данных, он загружает новые данные в родительскую форму и в подчиненные формы, а затем подчиненная форма примечаний правильно позиционирует себя (используя приведенный выше код), но затем перед передачей управления пользователю, она возвращается к исходной (плохой) позиции для заметок. Непонятно почему. Код позиционирования работает (я установил точку останова и прошел по коду), но он каким-то образом отменяется.
В любом случае, чтобы перехитрить это, я добавил некоторый дополнительный код в поле со списком после обновления кода события, чтобы повторно запустить код позиционирования после установки RecordSource. Вот где все становится странным. Этот код работает нормально ... , пока я выполняю его вручную . Если я делаю это (устанавливаю точку останова и продолжаю нажимать F8), то она проходит через код позиционирования и оставляет меня там, где я хочу быть. Но если я не установлю точку останова и просто позволю коду катиться самостоятельно, это не сработает. Кажется, что он делает позиционирование, но затем он возвращается к исходной (плохой) позиции подчиненной формы, перед тем как вернуть мне контроль над формой.
Кажется, здесь нет абсолютно никакой разницы. В одном случае я делаю это вручную, а в другом случае код просто запускается сам по себе. Это должно дать тот же результат, я думаю. Почему это может дать разные результаты, и что я могу сделать, чтобы решить эту проблему?
У меня есть общее ощущение, что запускаются разные события в зависимости от того, установил ли я точку останова, но не уверен, с чего начать в плане отладки. Любая помощь очень ценится.
Я использую Access 2013 32-разрядную версию под Windows 7, если это вообще полезно.