MS Access - закрыть форму без сохранения изменений дизайна, acSaveNo не работает - PullRequest
3 голосов
/ 09 марта 2012

У меня есть приложение Front End / Back End в MS Access, и у меня возникают некоторые проблемы с производительностью при закрытии форм.

Эти формы всегда сохраняются перед закрытием, потому что в Form_Open я скрываю некоторыеколонки и редактировать подпись.Затем, когда я закрываю форму, она сохраняет скрытые столбцы и тратит много времени!

Я уже сделал много изменений настроек в Access для оптимизации для FE / BE.Но у меня все еще есть проблемы с формами, которые сохраняются перед закрытием.На соревнованиях по спасению это действительно тратит много времени.С подпрограммой скрытия / редактирования столбцов требуется 20 секунд для сохранения.Без процедуры это занимает 1 с или менее, но мои данные не сохраняются.

Как я могу скрыть / отредактировать эти столбцы без необходимости впоследствии сохранять форму?Или как я могу закрыть форму без сохранения изменений структуры?

К сожалению, в Access нет события BeforeClose, а в событии Close или Unload он сохраняется перед переходом на эту подпрограмму, поэтомуЯ не могу отменить его, чтобы закрыть позже в коде.

Скрыть код:

'show all columns
For i = 1 To 8
    Form_Y_SubF_LP.Controls("Item_00" & i).ColumnHidden = False
    Form_Y_SubF_LP.Controls("Quantity_00" & i).ColumnHidden = False
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).ColumnHidden = False
Next
'Hide unnecessary columns
For i = 8 To ProtQuant + 1 Step -1
    Form_Y_SubF_LP.Controls("Item_00" & i).ColumnHidden = True
    Form_Y_SubF_LP.Controls("Quantity_00" & i).ColumnHidden = True
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).ColumnHidden = True
Next

'Change the caption of columns to the real name of each prototype
prot = DLookup("[Prototype]", "Y_Configurações", "[Program]= '" & ProgramName & "'")
For i = 0 To UBound(Split(prot, ";"), 1)
    Form_Y_SubF_LP.Controls("Item_00" & i).Properties("Caption") = "Item_" & Split(prot, ";")(i)
    Form_Y_SubF_LP.Controls("Quantity_00" & i).Properties("Caption") = "Quantity_" & Split(prot, ";")(i)
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).Properties("Caption") = "DistributionEQ_" & Split(prot, ";")(i)
Next

1 Ответ

2 голосов
/ 10 марта 2012

Простое решение состоит в том, чтобы установить Close Button = No на листе свойств формы, затем добавить командную кнопку cmdCloseMe , с этим для события «При нажатии»:

Private Sub cmdCloseMe_Click()
    DoCmd.Close acForm, Me.Name, acSaveNo
End Sub

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...