Запись г-жи Access Save в подчиненной форме

У меня есть основная форма с управлением вкладкой, содержащим несколько подчиненных форм. Я должен быть уверен, что данные в подчиненной форме сохраняются, когда пользователь переключает вкладки. Проблемой является тот DoCmd. RunCommand acCmdSaveRecord кажется, только относится к текущей форме, таким образом, это не сохраняет данные в подчиненной форме.

Я попробовал различные события на подчиненной форме те, которые деактивируются, OnLostFocus и т.д., но они не стреляют, пока другое поле где-то в другом месте не получает фокус.

Идеальное решение, казалось бы, было бы для помещения чего-то на событие OnChange управления вкладкой, чтобы быть уверенным, что все данные сохраняются. Это - мой вопрос, как сделать, я сохраняю запись в подчиненной форме?

5
задан Icode4food 13 April 2010 в 12:35
поделиться

2 ответа

В Access по умолчанию используется сохранение, поэтому, если вы не сделали что-то довольно сложное, чтобы предотвратить это, перемещение фокуса из подчиненной формы автоматически сохранит запись. Это можно проверить, добавив запись, перейдя от подчиненной формы, а затем проверив таблицу.

2
ответ дан 15 December 2019 в 06:21
поделиться

Вам вообще ничего не нужно делать, поскольку подформа сохраняется, как только теряет фокус (когда меняется элемент управления вкладкой).

Но в качестве упражнения я привел код, который вы напишете, если вам это понадобится.

Вы можете сохранить любую форму, установив для свойства .Dirty значение False. Для чего-то вроде этого, что будет часто выполняться, я думаю, я бы написал подформу, которая будет проходить по подформам, проверять, не грязные ли они, и сохранять грязные. Что-то вроде этого:

  Public Sub SaveSubFormsOnTab()
    Dim pge As Control
    Dim ctl As Control

    For Each pge In Me!ctlTab.Pages
      Debug.Print pge.Name
      For Each ctl In pge.Controls
        If ctl.ControlType = acSubform Then
           If ctl.Form.Dirty Then
              ctl.Form.Dirty = False
           End If
           Debug.Print ctl.Name
        End If
      Next ctl
    Next pge
    Set ctl = Nothing
    Set pge = Nothing
  End Sub

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

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

2
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: