Как я могу предотвратить непреднамеренное сохранение пользователями свойства 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 в следующий раз он открывается?

0 ответов

Другие вопросы по тегам