Access 2007: фильтрация результатов отчета с помощью раскрывающегося списка - PullRequest
0 голосов
/ 12 июня 2009

У меня вопрос двоякий.

  • У меня есть около двадцати разных таблиц в базе данных. Сервировка стола разнообразна; одна общая нить состоит в том, что у всех них есть поле 'County'.

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

Это выполнимо на уровне таблицы, используя фильтр по форме, но это довольно неуклюже, и у меня есть несколько таблиц / запросов, которым потребуется этот же фильтр округа.

Я могу быть на полпути со следующим:


Создать несвязанную форму. Добавьте поле со списком. Установите источник строки поля со списком, чтобы включить поле округа. Установите его Связанный столбец в 1. Установите для свойства «Количество столбцов» значение 2. Установите для свойства Column Width значение 0 "; 1" Назовите поле со списком «ChooseCounty».

Добавить командную кнопку в форму. Кодируйте событие нажатия кнопки следующим образом:

(Примечание. Чтобы написать код, в представлении «Дизайн формы» выберите командную кнопку. Отобразите страницу свойств кнопки. Нажмите на вкладку «Событие». В строке «По щелчку» напишите:

[Порядок событий]

Нажмите на маленькую кнопку с 3 точками, которые появляются в этой строке. Когда откроется окно кода, курсор будет мигать между двумя уже существующими строками кода. Между этими строками напишите следующий код.)

Me.Visible = False

Закройте окно кода.

Назовите эту форму 'ChooseCounty'.

В запросе, являющемся полем источника отчета в отчете [округ] строку критериев, напишите:

формы! ChooseCounty! ChooseCounty

Далее, закодируйте событие Open отчета: (Используя тот же метод, что описан выше)

DoCmd.OpenForm "ChooseCounty",,,,, acDialog

Код события закрытия отчета:

DoCmd. Закрыть acForm, "ChooseCounty"

Когда будете готовы запустить отчет, откройте отчет. Форма откроется и будет ждать выбора компании. Нажмите кнопку команды, и отчет будет запущен. Когда отчет закрывается, он закрывает форму.


Я могу убедить отчет запустить форму, но только один раз - я не могу понять, куда именно нужно «формы! ChooseCounty! ChooseCounty». Возможно, кто-то сможет уточнить или предложить более элегантный способ сделать это?

  • Мне нужно настроить большой мета-отчет, содержащий подотчеты по всем таблицам, и, используя одну и ту же выпадающую форму «выбрать страну», мне нужно, чтобы этот выбор каскадно проходил по всем подотчетам , У меня нет ни малейшего представления, как это сделать. Предложения приветствуются!

~ Т

1 Ответ

1 голос
/ 13 июня 2009

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

  1. поместить ссылку на контроль формы в качестве критерия в источник данных каждого подотчета, ИЛИ

  2. создать невидимый элемент управления в отчете, который имеет в качестве своего элемента управления "= Forms! ChooseCounty! ChooseCounty". Назовите этот элемент управления "CountyFilter". Затем добавьте CountyFilter в свойства ссылки. Например, если вы связываете подотчеты по идентификатору, вы получите:

    • LinkMaster: ID; CountyFilter
    • LinkChild: ID; округ

(при условии, конечно, что ID является вашим полем ссылки для дочерних отчетов, а "County" - это имя поля в дочернем подотчете).

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

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

Что касается предыдущего вопроса, вы пишете:

Я могу убедить отчет активировать форма, но только один раз - я не могу показаться выяснить, где именно 'Формы! ChooseCounty! ChooseCounty' нужно идти

У вас есть два варианта:

  1. жестко соедините источник записей отчета с использованием ссылки на элемент управления формы, поэтому в качестве условия WHERE вашего отчета будет указано: «WHERE County = Forms! ChooseCounty! ChooseCounty» (и вы должны установить это как параметр типа text чтобы убедиться, что он обрабатывается правильно).

  2. лучший способ - установить источник записей в событии OnOpen отчета.

После того, как вы откроете форму как диалоговое окно, у вас будет что-то вроде этого:

Me.Recordsource = "SELECT * FROM MyTable WHERE County='" _
  & Forms!ChooseCounty!ChooseCounty & "'"

И сразу после этой строки вы можете закрыть форму, так как она больше не нужна.

Вероятно, вы захотите событие OnNoData для случая, когда записи не возвращаются. Обычно это что-то простое, например:

  MsgBox "No records found!"
  DoCmd.Close acReport, Me.Name

Я надеюсь, что это ответит на ваши вопросы, но если нет, я с удовольствием предоставлю больше объяснений.

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