Доступ к VBA для получения текущих настроек автофильтра

Есть ли способ узнать, какой автофильтр был применен к запросу?

Я не могу использовать форму, так как структура базы данных меняется (ничего не могу с этим поделать). Так что использовать форму и Me.Filter, к сожалению, нельзя. Есть ли что-нибудь подобное для открытого запроса выбора?

Что я делаю сейчас, но меня тошнит:

DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy

На самом деле мне нужно было бы запустить еще один запрос для отфильтрованного запроса. Итак: вставить все в новую таблицу было бы нормально, лучше получить настройки фильтра в виде списка условий или оператора SQL.

Любые идеи?


person vacip    schedule 10.04.2016    source источник
comment
@HansUp Когда вы находитесь в режиме таблицы, над каждым полем есть фильтр. Как в Экселе. Мои пользователи захотят это использовать, и мне придется определить, что они отфильтровали. Это понятно? Могу добавить скриншот.   -  person vacip    schedule 10.04.2016
comment
Хорошо, сейчас я понимаю. Спасибо. Я никогда раньше не слышал о такой функции, называемой автофильтром.   -  person HansUp    schedule 10.04.2016
comment
@HansUp у него есть правильное имя? На мой взгляд, фильтр сбивает с толку, он используется примерно для 10 вещей в Access...   -  person vacip    schedule 10.04.2016
comment
Извините, я не знаю правильного названия --- автофильтр может быть даже правильным, насколько я знаю. ;-) Лучшее, что я могу предложить, это добавить объяснение в свой комментарий к вопросу, чтобы никто не запутался в том, что вы хотите.   -  person HansUp    schedule 10.04.2016


Ответы (2)


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

В этом случае создайте простую контейнерную форму с элементом управления подчиненной формы и используйте свой запрос в качестве SourceObject элемента управления подчиненной формы.

Вот простой пример с именованным запросом (qryFoo2) как SourceObject ...

? Forms!Form20!Child0.SourceObject
Query.qryFoo2

Без применения пользовательского фильтра...

? Forms!Form20!Child0.Form.Filter

? Forms!Form20!Child0.Form.FilterOn
False

Затем, если я применю фильтр ("начинается с 'h'") к текстовому полю моего запроса...

? Forms!Form20!Child0.Form.Filter
([qryFoo2].[text_field] Like "h*")
? Forms!Form20!Child0.Form.FilterOn
True
person HansUp    schedule 10.04.2016
comment
Работает как шарм, блестящее решение! Спасибо! - person vacip; 10.04.2016

Я также не слышал об Автофильтре, и я считаю, что Me.Filter возвращает любой примененный фильтр (кроме источника записи, конечно) формы.

Однако, если вы считаете, что это не так, вы можете использовать RecordsetClone, так как он всегда возвращает текущие записи, отображаемые в форме:

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If rs.RecordCount > 0 Then
    While rs.EOF = False
        ' Loop rs and do stuff.
        rs.MoveNext
    Wend
End If

Set rs = Nothing
person Gustav    schedule 10.04.2016
comment
Спасибо, но проблема в том, что у меня нет формы. У меня есть запрос в режиме таблицы. - person vacip; 10.04.2016