MS Access: как отключить автосохранение формы и создать кнопку «Сохранить»

Я так понимаю, что ввод данных в форму в MS Access автоматически обновляет поля в таблице. Однако как отключить эту функцию и вместо этого позволить пользователю нажать кнопку «Сохранить» в конце, чтобы обновить записи? Читал в Интернете, что мне нужен VBA и т. Д., С которыми у меня нет опыта.


person FishFold    schedule 07.06.2017    source источник


Ответы (4)


Это можно сделать только в коде.

Вам нужно установить логическую переменную на уровне модуля для управления сохранением (автоматическое или ручное) и установить для нее значение True при нажатии кнопки сохранения.

Private mIsUserUpdate As Boolean 'Flag

'Cancel Auto Save
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Not mIsUserUpdate Then Cancel = True
End Sub

'Manual Save
Private Sub YourButtonName_Click()

    '...
    'Do work
    '...

    mIsUserUpdate = True 'OK to save
    DoCmd.RunCommand acCmdSaveRecord
    mIsUserUpdate = False 'Revert
End Sub
person Kostas K.    schedule 07.06.2017
comment
Возможно, Me.Undo вместо Cancel = True - person sdMarth; 25.08.2018

К сожалению, вы не можете отключить автосохранение в формах. В качестве обходного пути вы можете скопировать данные во временную таблицу, разрешить пользователю редактировать данные по мере необходимости и, нажав кнопку «Сохранить», скопировать измененные данные обратно в основную таблицу.

Также в качестве обходного пути можно использовать отмену сохранения записи, как это описано в ответе @Kostas K. в одной форме, но в этом случае вы не сможете изменить отредактированную запись или использовать какие-либо элементы управления вне формы редактирования, если она подчиненная форма, поэтому кнопка «Сохранить» должна находиться в той же форме, что и редактируемые данные.

person Sergey S.    schedule 07.06.2017

Другой способ сделать это — использовать пару текстовых полей. Один привязан к базе данных, а другой нет. Связанное текстовое поле не будет видно.

Text1 is not bound
Text2 is bound

Код для кнопки сохранения..

Me.Text2.value = me.Text1.value
if me.dirty=true then me.dirty=false

Вы можете попасть в определенные условия...

If isnull(me.Text1.value) then me.Text2=.value=""
person MSI Mike    schedule 20.06.2019

Я пробовал много способов. Ответ Костаса К. в порядке. Но если вы случайно или намеренно отредактируете поле, вы не сможете использовать кнопки навигации. Вы не можете перейти к следующей или предыдущей записям, если не войдете в режим редактирования (установите для переменной флага значение True). Для меня ниже код работает лучше. Если вы хотите отредактировать запись, нажмите кнопку «Редактировать». После редактирования вы можете использовать кнопку «Сохранить» вручную или кнопку навигации, чтобы сохранить запись.

Dim update As Boolean

Private Sub cmdedit_Click()
    update = True
End Sub

Private Sub cmdsave_Click()
    'Your commands or ...
    DoCmd.RunCommand acCmdSaveRecord
End Sub

Private Sub Form_Dirty(Cancel As Integer)
    If update = False Then Cancel = True
End Sub

Private Sub Form_AfterUpdate()
    update = False
End Sub
person taezar.tw    schedule 17.04.2021
comment
@Maëlan Я указал имя автора. - person taezar.tw; 18.04.2021