Как я могу предотвратить непреднамеренное сохранение пользователями свойства ServerFilter в форме Access ADP?
У меня есть несколько форм в проекте Access ADP, которые отображают данные, отфильтрованные по EventID, выбранному в поле со списком. Формы открываются с DoCmd.OpenForm
функция, используя WhereCondition
аргумент для применения фильтрации данных на стороне сервера перед их отображением.
Все это прекрасно работает, пока пользователь не решит нажать кнопку " Сохранить" на панели инструментов. Теперь, когда ServerFilter
сохраняется в форме, и каждый раз, когда он открывается после этого, он всегда использует фильтр, который пользователь непреднамеренно сохранил, даже если я указываю что-то еще в WhereCondition
аргумент.
Что я пробовал:
Я могу открыть форму в режиме конструктора, очистить
ServerFilter
свойство, сохраните форму, и она снова заработает - пока пользователь не нажмет кнопку "сохранить", когда форма открыта.Я попытался очистить фильтр при закрытии формы с помощью кода следующим образом:
(Либо Form_Unload
или же Form_Close
События)
Private Sub Form_Unload(Cancel As Integer)
' Make sure we dont' accidentially save a server filter.
If Me.ServerFilter <> "" Then
Me.ServerFilterByForm = False
Me.ServerFilter = ""
Me.FilterOn = False
DoCmd.Save acForm, Me.Name
End If
End Sub
Я также попытался очистить это значение, когда форма открывается или загружается, но опять же, похоже, это не имеет никакого эффекта. Сохраненный пользователем фильтр сохраняется.
Я нашел обсуждение здесь, где разработчик работал с подобной проблемой, но в итоге он выбрал путь использования
OpenArgs
передать его критерии фильтра. Я бы предпочел использовать стандартный подходWhereCondition
,Если я изменю форму на представление конструктора, я смогу очистить свойство ServerFilter, и оно останется очищенным, но кажется странным, что вы можете установить свойство, но не очистить его во время выполнения...
Пример кода для очистки фильтра, открыв форму в режиме конструктора...
Public Function ClearServerFilters(strFormName As String)
DoCmd.OpenForm strFormName, acDesign
With Forms(strFormName)
If .ServerFilter <> "" Then
.ServerFilter = ""
DoCmd.Save acForm, strFormName
End If
End With
DoCmd.Close acForm, strFormName, acSaveNo
End Function
Любые идеи о том, как я могу на самом деле очистить ServerFilter
свойство (во время выполнения), чтобы форма правильно использовала WhereCondition
в следующий раз он открывается?