Из скрипта, управляя формой, создать новую запись, и послать в базу
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
|
|
Димс.