Нужно сузить результаты запроса, которые появляются в подчиненной форме, затем выберите и покажите среднее - PullRequest
0 голосов
/ 01 апреля 2019

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

Я сделал мгновенный поисковый запрос по ключевым словам (поиск по мере ввода отображается в реальном времени) и создал форму с подчиненной формой запроса для отображения результатов. Также пытался повторить ту же часть кода для 2-го окна поиска ключевого слова поиска (под названием «Фильтр»), но он сохраняет запрос на основе исходных данных, а не данных результатов.

Код из запроса ниже ....

SELECT [Combined Source Data].*
FROM [Combined Source Data]
WHERE ((([Source] & [Class Code] & [Classification Title] & [Department/Division]) Like "*" & [Forms]![SearchForm]![Search].[Text] & "*" And ([Source] & [Class Code] & [Classification Title] & [Department/Division]) Like "*" & [Forms]![SearchForm]![FILTER].[Text] & "*"));

Код из несвязанных полей поиска, в котором есть изменения в процедуре события ....

Private Sub Filter_Change()
DoCmd.Requery "SearchQuery subform"
End Sub

Private Sub Search_Change()
DoCmd.Requery "SearchQuery subform"
End Sub

Второй поиск по ключевым словам должен фильтровать результаты, но это не так. Пожалуйста, помогите --- пытался взломать это в течение ДНЕЙ ...

Заранее спасибо!

1 Ответ

1 голос
/ 01 апреля 2019

Когда ссылка на компонент Access встраивается в оператор SQL, любые ошибки, возникающие из таких ссылок, часто подавляются. Это относится и к данному SQL-запросу, поскольку свойство Textbox.Text недоступно, если элемент управления не имеет фокуса. Если вы пытаетесь сослаться на элемент управления из другого кода VBA, например

Private Sub OtherField_GotFocus()
   Debug.Print "Search: " & Me.Search.Text
End Sub

вы должны получить ошибку

Ошибка 2185: нельзя ссылаться на свойство или метод для элемента управления, если элемент управления не имеет фокуса.

И поскольку вы ссылаетесь на два отдельных элемента управления Textbox одинаковым образом, оба не могут иметь фокус в одно и то же время, поэтому всегда будут те или иные значения, неправильно включенные в запрос. Текст вопроса говорит, что

... он сохраняет запрос на основе исходных данных, а не данных результатов.

но я подозреваю, что запрос преобразуется во что-то вроде ... Like "*search_term*" and ... Like "**" или ... Like "**" and ... Like "**" в зависимости от того, какой элемент управления имеет фокус, поэтому одна сторона оператора AND всегда имеет значение True.


Несмотря на общность сообщения об ошибке, на свойство Value можно ссылаться без фокусировки на элемент управления (и, следовательно, внутри оператора SQL). Недостаток в вашем случае заключается в том, что он не обновляется сразу при каждом новом нажатии клавиши, а также не при каждом срабатывании события Change. Вам нужно будет разработать другой способ реализации «мгновенного» аспекта текстовых полей, или вам придется применить другой метод, например, традиционную кнопку поиска.

...