Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ОТИ - копия.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
8.91 Mб
Скачать

Работа с серверными фильтрами

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

Хотя серверные фильтры обладают большими преимуществами, их можно использовать только в тех случаях, когда в качестве источника записи выступает таблица или представление. Можно создать фильтр для формы, связанной с функцией, но Access игнорирует его. Если попытаться определить серверный фильтр для формы, связанной с хранимой процедурой, то при открытии формы Access выведет предупреждение «Невозможно применить фильтр сервера к сохраненной процедуре источника записей. Фильтр не применен» (A Server Filter cannot be applied to a stored procedure Record Source. Filter not applied.). Таблицы и представления не поддерживают использование параметров, поэтому невозможно создать отчет, который одновременно использует фильтры и параметры.

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

Для рассмотрения работы сетевого фильтра откройте файл проекта Поставки.adp, а в нем откройте созданную форму

Переключитесь в режим конструктора и в свойстве Серверный фильтр (Server Filter) укажите значение: НАИМ_ТОВ LIKE ‘M%’. В результате в форме выведутся не все наименования товаров, а несколько записей, удовлетворяющих этому условию. (рис. 19.6).

Рис. 19.6. Форма с серверным фильтром.

Серверный фильтр содержит условие, аналогичное инструкции WHERE, но без использования этого ключевого слова. Учтите, что Access посылает этот фильтр серверу, поэтому необходимо соблюдать синтаксис языка SQL: текстовые значения и значения дата/время должны заключаться в одинарные кавычки, а в операторе сравнения следует использовать групповые символы % и _, а не * и ?. Если требуется указать несколько критериев, их объединение производится с помощью логических операторов AND или OR

Обратите внимание, что в панели инструментов кнопка Серверный фильтр по форме (Server Filter by Form) не доступна. Невозможно выбрать команду Записи - Фильтр - Серверный фильтр по форме (Records - Filter - Server Filter by Form), поскольку свойство Серверный фильтр по форме (Server Filter by Form) установлено в значение Нет. Если закрыть форму и сохранить изменения форма постоянно будет фильтровать данные с указанным критерием, и пользователь не сможет его изменить.

Замечание. Если вы сомневаетесь в правильности фильтра, можно установить свойство Серверный фильтр по форме в значение Да, нужно перейти в режим формы и с помощью интерфейса этой формы применить фильтр, который хотим использовать. При обратном переключении в режим конструктора вы увидите, что указанный фильтр записан в свойство Серверный фильтр с правильным синтаксисом. Установим свойство Серверный фильтр по форме в значение Нет и сохраним изменения. Access будет использовать этот автоматически созданный фильтр при каждом открытии формы.

Если вы хотите разрешить пользователям устанавливать свойство Серверный фильтр, необходимо установить свойство Серверный фильтр по форме в значение Да. Чтобы увидеть, как работает эта настройка, откройте форму. Вместо вывода записей Access откроет интерфейс Серверный фильтр по форме (Server Filter by Form) (рис. 19.7).

Рис. 19.7. Форма с предопределённым серверным фильтром

Параметры фильтрации в окне Серверный фильтр по форме аналогичны параметрам, используемым при выполнении обычной фильтрации. В каждом поле можно вводить любые условия и задавать несколько условий для отдельного столбца с помощью вкладок Или (OR). По умолчанию в раскрывающемся списке предлагаются только варианты Is Null и Is Not Null. При необходимости можно вывести полный список значений конкретного поля, установив в режиме конструктора его свойство подстановки Применение автофильтра (Filter Lookup) в значение Всегда (Always). Кроме того, можно установить флажок Записей на сервере (Records at server) на вкладке Правка и поиск диалогового окна Параметры (см. рис. 19.3).

Для применения серверного фильтра просто нужно ввести необходимый критерий в соответствующие текстовые поля и щелкнуть на кнопке Применить серверный фильтр (Apply Server Filter) на панели инструментов. Щелкнем на этой кнопке, не указывая никаких значений фильтрации,. Просмотрим результат. Обратите внимание, что кнопка Серверный фильтр по форме применяется и для переключения режимов.

Установка входных параметров

Серверные фильтры являются удобным средством, если необходимо отфильтровать данные из таблицы или представления. Однако ими воспользоваться не удастся, если набором данных является функция или хранимая процедура. К счастью, функции или хранимые процедуры для управления данными могут использовать входные параметры.

При использовании в качестве источника записей формы запроса с параметрами Access запрашивает эти параметры у пользователя при открытии формы. Однако формы проекта имеют свойство Входные параметры, которое представляет собой альтернативный способ указания параметров функции или хранимой процедуры, используемой в качестве источника записей отчета.

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

Например, хранимая процедура, используемая формой, имея параметр с именем @Enter_НАИМ_ТОВ, выведет только товары, название которых начинается с буквы М, если в свойстве Входные параметры записать: @Enter_НАИМ_ТОВ nvar char(25) = ‘M’.

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

@Enter_НАИМ_ТОВ nvar char(25) = [Введите часть имени или полное наименование компании:].

При открытии этой формы пользователем Access выводит следующее окно:

Рис. 19.8. Запрос параметра при открытии формы

Отчёты в проекте Access

В отличие от таблиц и запросов отчёты проекта Access фактически аналогичны отчётам настольных баз данных, также как и формы. Поскольку работа осуществляется с данными, хранящимися на сервере SQL Server, важно понимать, ключевые особенности каждого типа запроса и способы их максимально эффективного использования в качестве источников записей отчётов.

Отличительные особенности отчётов проекта Access

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

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

Настройка свойств отчета проекта

Давайте рассмотрим новые свойства отчета проекта Access. Создайте отчёт с использованием объектов проекта и щелкните на кнопке Вид (View) в панели инструментов Access для переключения отчета в режим конструктора. Откройте окно свойств, выбрав команду Вид – Свойства (View – Properties)/ Перейдите на вкладку Данные (Data). Здесь имеются три свойства. Описатель источника записей (Record Source Qualifier), Серверный фильтр (Server Filter) и Входные параметры (Input Parameters).

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

Таблица 19.2. Дополнительные свойства отчёта проекта

Свойство

Расположено на вкладке

Описание

Описатель источника записей (Record Source Qualifier)

Данные

Указывает владельца источника записей этого отчета на сервере SQL Server. Если только администратором сервера не указан другой пользователь, то по умолчанию это свойство имеет значение dbo (сокращение от database owner - владелец базы данных)

Серверный фильтр (Server Filter)

Данные

Определяет фильтр, посылаемый серверу программой Access для ограничения количества записей, извлекаемых с сервера при открытии отчета

Входные параметры (Input Parameters)

Данные

Позволяет указывать значения входных параметров, используемых в источнике записей отчета

Свойство Серверный фильтр

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

Хотя серверные фильтры обладают большими преимуществами, их можно использовать только в том случае, если и качестве источника записи выступает таблица или представление. Можно создать фильтр для отчета, связанного с функцией, но Access проигнорирует его. Если попытаться определить серверный фильтр для отчета, связанного с хранимой процедурой, то при открытии отчета Access выведет предупреждение «Невозможно применить фильтр сервера к сохраненной процедуре источника записей. Фильтр на применён.» (A Server Filter cannot be applied to a stored procedure Record Source. Filter not applied.) Таблицы и представления не поддерживают использование параметров, поэтому невозможно создать отчет, который одновременно использует фильтры и параметры.

Свойство Серверный фильтр содержит условие, аналогичное инструкции WHERE, но без использования этого ключевого слова. Учтите, что Access посылает этот фильтр серверу, поэтому необходимо соблюдать синтаксис языка SQL. Проделайте действия, аналогичные подобным действиям, проделанным вами с формами

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

Совет.

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

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

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

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

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

Входные параметры

Если в качестве источника записей для отчета используется запрос с параметрами при открытии отчета Access запрашивает значения параметров у пользователя. Однако отчеты проекта имеют свойство Входные параметры, которое является альтернативным способом указания параметров функции или хранимой процедуры, используемой в качестве источника записей отчета.

Для каждого параметра необходимо указать его имя, тип данных и значение.