Из скрипта, управляя формой, создать новую запись, и послать в базу

Dmitry S. Kravchenko
Дата: 31.05.2004 00:36:00
Привет!

Когда, работая в форме, вызываешь команду "создать запись", то форма опустошается, в клетки вписываются значения по умолчанию. В этот момент в базу еще ничего не занесено.

Как только в форум что-нибудь вписываешь, на корешке записи появляется изображение карандаша. В этот момент в базу еще ничего не занесено.

После этого есть несколько вариантов. Можно закрыть форму или уйти на другую запись - тогда в момент этого события, введенные данные будут переданы в базу.

Можно нажать ESC, тогда данные исчезнут.

А можно ткнуть мышкой в изображение карандаша и тогда данные пойдут в базу, а текущая запись останется прежней.

****
Внимание, вопрос:

Как, командуя формой из скрипта, имитировать последние два действия, то есть, отмену ввода данных и посылку данных в базу не сменяя текущей записи?

****
Я сделал форму с подчиненной формой. Родительская форма содержит строки, соответствующие текущему дню. Поэтому скрипт проверяет, наступил ли новый день. Если "нет", то просто перемещается к нужной родительской записи. А если "да", то создает новую запись.

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

Как управиться?

Пасиб.

Димс.
Alexander G
Дата: 31.05.2004 01:26:21
Создать
DoCmd.GoToRecord acDataForm, "Форма1", acNewRec

Отменить
Me.Undo (или создать мастером аналогичную кнопочку и посмотреть код, там он будет другим)
В примере хелпе есть еще вариант (он вычистит новую запись вместе со значениями по умолчанию)
    Dim ctlC As Control
        ' Для каждого элемента управления.
        For Each ctlC In Me.Controls
            If ctlC.ControlType = acTextBox Then
                ' Восстанавливаем исходное значение.
                ctlC.Value = ctlC.OldValue
            End If
        Next ctlC

Сохранить
DoCmd.RunCommand acCmdSaveRecord
или
Me.Dirty = False
Или сделать кнопку мастером и взять ее код

По поводу подчиненной формы - чуть подробнее, если можно.
Dmitry S. Kravchenko
Дата: 31.05.2004 15:25:12
Александр, про подчиненные формы - это не другой вопрос, а тот же. Просто ситуация, в которой мне было нужно то, что я спрсил.

Видимо, поможет то, что Вы сообщили.

Теперь у меня в форме в обработчике открытия код

    If DMax("Дата", "День") = Date Then
        Set rs = Me.Recordset.Clone
        rs.FindLast "TRUE"
        Me.Bookmark = rs.Bookmark
    Else
        DoCmd.GoToRecord , , acNewRec
        DoCmd.RunCommand acCmdSaveRecord
    End If

Димс.