Как сделать фильтр в отчете access?

  • 09/25/2018
  • Время чтения: 3 мин

Если вы используете код Visual Basic для приложений (VBA), чтобы открыть форму или отчет, рекомендуется указать, какие записи нужно отобразить.When you use Visual Basic for Applications (VBA) code to open a form or report, you may want to specify which records to display. Записи для отображения в форме или отчете можно указать несколькими способами.You can specify the records to display in the form or report in several ways. Распространенный способ — отобразить настраиваемое диалоговое окно, в котором пользователь вводит условия для базового запроса формы или отчета.A common approach is to display a custom dialog box in which the user enters criteria for the underlying query of the form or report. Чтобы получить условия, нужно добавить ссылку на элементы управления в диалоговом окне.To get the criteria, you refer to the controls in the dialog box. В разделах ниже описаны три способа использования введенных условий в настраиваемом диалоговом окне для фильтрации записей.The following sections describe three ways you can use criteria entered in a custom dialog box to filter records.

Использование аргумента whereconditionUsing the wherecondition argument

Аргумент wherecondition метода или команды OpenForm или OpenReport является самым простым способом получить условия в ситуациях, когда пользователь предоставляет только одно значение.

The wherecondition argument of the OpenForm or OpenReport method or action is the simplest way to get criteria in situations where a user is providing only one value. Например, можно отобразить форму, предлагающую пользователю выбрать код заказа для счет-фактуры, которую нужно напечатать.

For example, you could display a form that prompts users to select an order ID for the invoice they want to print.

Если вы используете процедуру обработки событий, можно применить фильтр, отображающий только одну запись, добавив аргумент в метод OpenReport, как показано в строке кода ниже:If you are using an event procedure, you can apply a filter that displays only one record by adding an argument to the OpenReport method, as shown in the following line of code:

DoCmd.OpenReport «Invoice», acViewPreview, , «OrderID = » & OrderID

«OrderID = » в выражении фильтра указывает на поле OrderID в базовом запросе отчета счета-фактуры. OrderID в правой стороне выражения указывает на значение, выбранное пользователем из списка OrderID в диалоговом окне.

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

The expression concatenates the two, causing the report to include only the invoice for the record the user selected.

Аргумент wherecondition применяется только процедурой обработки событий, указанной для события OnClick кнопки, запускающей метод OpenForm или OpenReport.

The wherecondition argument is applied only by the event procedure specified for the OnClick event of the button that runs the OpenForm or OpenReport method.

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

This gives you the flexibility of using any number of different dialog boxes to open the same form or report and applying different sets of criteria depending on what the user wants to do. Например, пользователю может потребоваться напечатать счет-фактуру для определенного клиента или просмотреть заказы только для определенного продукта.For example, the user may want to print an invoice for a certain customer or view orders only for a certain product.

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

You can use the wherecondition argument to set criteria for more than one field, but if you do, the argument setting quickly becomes long and complicated. В этих случаях, возможно, проще указать условия в запросе.

In those situations, specifying criteria in a query may be easier.

Использование запроса в качестве фильтраUsing a query as a filter

Отдельный запрос, иногда называемый запросом с фильтром, может ссылаться на элементы управления в диалоговом окне, чтобы получить его условия.A separate query, sometimes called a filter query, can refer to the controls on your dialog box to get its criteria.

С помощью этот способа можно фильтровать записи в форме или отчете, присвоив аргументу filtername метода или команды OpenForm или OpenReport значение имени создаваемого запроса с фильтром.

Using this approach, you filter the records in a form or report by setting the filtername argument of the OpenForm or OpenReport method or action to the name of the filter query you create.

Запрос с фильтром должен содержать все таблицы в источнике записей формы или отчета, который вы открываете.The filter query must include all tables in the record source of the form or report you are opening.

Кроме того, запрос с фильтром должен содержать все поля в открываемой форме или отчете, либо необходимо присвоить его свойству OutputAllFields значение Yes.Additionally, the filter query must either include all the fields in the form or report you are opening, or you must set its OutputAllFields property to Yes.

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

After you create and save the query to use as a filter, set the filtername argument of the OpenReport method or action to the name of the filter query. Аргумент filtername применяет указанный запрос с фильтром каждый раз, когда запускается метод OpenReport.

The filtername argument applies the specified filter query each time the OpenReport method runs.

Использование запроса в качестве фильтра для установки условий обладает преимуществами, аналогичными использованию аргумента wherecondition метода OpenForm или OpenReport.Using a query as a filter to set the criteria has advantages similar to using the wherecondition argument of the OpenForm or OpenReport method.

Запрос с фильтром обеспечивает такую же гибкость использования нескольких диалоговых окон для открытия одной формы или отчета и применения различных наборов условий в зависимости от нужных действий.A filter query gives you the same flexibility of using more than one dialog box to open the same form or report and applying different sets of criteria depending on what a user wants to do.

Читайте также:  Как в excel сделать разделение на столбцы?

Прямая ссылка на элементы управления диалогового окна в базовом запросе формы или отчетаDirectly referring to dialog box controls in the underlying query of a form or report

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

You can also refer to the dialog box controls directly in the underlying query of a form or report instead of through the arguments of the OpenForm or OpenReport method.

При использовании этого подхода методу или команде OpenForm или OpenReport не требуется аргумент wherecondition или filtername.Using this approach, the OpenForm or OpenReport method or action requires no wherecondition or filtername argument.

Вместо этого при каждом открытии формы или отчета его базовый запрос ищет диалоговое окно, чтобы получить его условия.Instead, each time you open a form or report, its underlying query looks for the dialog box to get its criteria.

Тем не менее, если пользователь открывает форму или отчет в окне базы данных, а не через диалоговое окно, Access отображает окно параметра, запрашивающее у пользователя значение диалогового окна.However, if a user opens the form or report in the Database window rather than through your dialog box, Access displays a parameter box that prompts the user for the dialog box value.

Поддержка и обратная связьSupport and feedback

Источник: https://docs.microsoft.com/ru-ru/office/vba/access/concepts/forms-design/apply-a-filter-when-opening-a-form-or-report

Фильтрация данных в отчете

Фильтрация данных в отчете

Записи в отчетах, так же как и в формах, могут фильтроваться. Для этого существует свойство отчета Фильтр (Filter). Значением этого свойства является логическое выражение WHERE инструкции SELECT.

Применение фильтра приводит к тому, что, когда для конкретной записи заданное в качестве фильтра логическое выражение принимает значение Истина (True), эта запись отображается, в противном случае — нет.

Пример такого выражения представлен на (задан интервал дат, в котором должно лежать значение поля «ДатаИсполнения» (ShippedDate)).

Для того чтобы фильтр, введенный в диалоговом окне свойств отчета, был применен к записям в отчете, требуется еще установить значение свойства Фильтр включен (Filter On) равным Да (Yes). В противном случае он сохраняется, загружается при выполнении отчета, но не применяется. Свойство можно установить либо в диалоговом окне свойств, как это показано на, либо в макросе или процедуре VBA.

  Работа с макросами

Основной набор средств Microsoft Access, который мы рассматривали в предыдущих главах книги, ориентирован на пользователей, не владеющих языками программирования.

Для программистов же к этим средствам добавлены макросы (небольшие программы на языке макрокоманд системы Access) и модули (процедуры на языке Visual Basic for Application, VBA). С их помощью можно существенно расширить функциональные возможности создаваемого вами приложения и настроить его на нужды конкретных пользователей.

В этой главе мы познакомимся с одним из этих средств — макросами и одним из языков программирования Access — языком макрокоманд. С модулями и языком VBA мы вас познакомим.

Итак, мы будем обсуждать следующие вопросы:

  • Понятие макроса
  • Использование макросов в приложениях-
  • Создание макросов и групп макросов
  • Задание условий для управления процессом выполнения макроса
  • Различные способы запуска макросов
  • Советы по отладке макросов
  • Обработка событий в формах и отчетах с помощью макросов
  • Преобразование макросов в процедуры VBA

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

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

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

В содержится список макрокоманд Microsoft Access 2010, сгруппированных по категориям: работа с данными в формах и отчетах; выполнение команд, макросов, процедур и запросов; работа с объектами; импорт/экспорт данных и объектов и прочие. В категорию «Прочие» собраны все макрокоманды, которые позволяют влиять на интерфейс приложения.

Макрокоманды Microsoft Access 2010

Категория Назначение Макрокоманда
Работа с данными в формах и отчетах Отбор данных Применить Фильтр (ApplyFilter)
Перемещение по данным СледующаяЗапись (FindNext) НайтиЗапись (FindRecord) КЭлементуУправления (GoToControl) НаСтраницу (GoToPage) НаЗапись (GoToRecord)
Обновление данных или экрана Обновление (Requery) ПоказатьВсеЗаписи ( ShowAllRecords )
Выполнение Выполнение команды Выполнить Команду (RunComraand)
Выполнение макроса, процедуры или запроса ЗапускМакроса (RunMacro) Залуск Программы (RunCode) ОткрытьЗапрос (OpenQuery) 3anycк 3anpoca SQL (RunSQL)
Выполнение другого приложения Запуск Приложения (RunApp)
Прерывание выполнения Отменить Событие (CancelEvent) Остановить ВсеМакросы (StopAllMacros) ОстановитьМакрос (StopMacro)
Выход из Microsoft Access Выход (Quit)
Импорт/экспорт Передача объектов Microsoft Access в другие приложения Вывести В Формате (OutputTo) ОтправитьОбъект (SendObject)
Преобразование формата данных Преобразовать БазуДанных (Transfer Database) ПереносБазыДанныхSQL (TransferSQLDat abase) Преобразовать ЭлектроннуюТаблицу (Transfer Spreadsheet) ПреобразоватьТекст (TransferText )
Работа с объектами Копирование, переименование и сохранение объекта КопироватьОбъект (CopyObject) Копировать Файл БазыДанных (CopyDatabase File) Переименовать (Rename) Сохранить (Save)
Прочие Вывод на экран или скрытие встроенной или специальной панели инструментов Подача звукового сигнала ПанельИнструментов (ShowToolbar) Сигнал (Веер)

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

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

По сравнению с предыдущей версией Access, в Microsoft Access 2010 появились три новые макрокоманды: ПереносБазыДанныхSQL (TransferSQLDatabase) — переносит базу данных Microsoft SQL Server 7.0 и выше на другой сервер;

КопироватьФайлБазыДанных(CopyDatabaseFile) — выполняет копирование текущей базы данных Microsoft SQL Server 7.0 и выше, присоединенной к проекту Access;

ОткрытьФункцию (OpenFunction) — выполняет функцию, определенную пользователем, в проекте Access. Эта функция- представляет собой запрос, который, используя входные параметры, возвращает результаты так же, как и хранимая процедура.

Читайте также:  Как сделать отмену в Word?

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

Как будет показано в следующем разделе, для создания макроса требуется знать лишь основные приемы работы в Microsoft Access и Windows, такие как перетаскивание объектов из окна База данных (Database) в специальное окно — Конструктор макросов (Macro Design), выбор действия из списка и ввод выражений в качестве аргументов макрокоманды. Поэтому, если очень не хочется изучать синтаксис языка VBA или это представляется слишком трудным, смело применяйте макросы, и вы получите достаточно функциональное приложение.

Как уже говорилось выше, основное назначение макросов — это создание удобного интерфейса приложения: чтобы формы и отчеты открывались при нажатии кнопок в форме или на панели инструментов или же привычным выбором команды меню; чтобы при открытии приложения пользователь видел на экране не окно База данных (Database), наполненное множеством таблиц, запросов, форм и отчетов, а некую понятную форму, с помощью которой можно было бы сразу производить желаемые действия и т. д. С помощью макросов можно создать удобные меню и панели инструментов для приложения, и чуть позже мы опишем, как это сделать.

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

  • Возможности макрокоманд ограничены по сравнению с возможностями языка VBA, поэтому в ряде случаев без программирования на VBA не обойтись, хотя сначала нужно быть уверенным, что эти дополнительные возможности действительно нужны. Язык VBA предоставляет более широкие возможности для работы с данными, позволяет использовать механизм программирования объектов для связи с другими приложениями, вызывать функции из библиотек динамической загрузки (DLL) Windows и создавать собственные специализированные функции.
  • Макросы можно использовать практически везде, где применяются процедуры VBA, однако процедуры VBA, как правило, выполняются быстрее.
  • Макросы являются объектами, существующими отдельно от форм и отчетов, в которых они используются, поэтому, когда этих объектов становится очень много, их поддержка достаточно трудоемка. Процедуры обработки событий VBA являются неотъемлемой частью форм и отчетов, и в этом есть свои преимущества. Например, при переносе форм и отчетов из одной базы данных в другую с ними автоматически переносятся связанные процедуры.

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

Источник: http://advicecomp.ru/filtraciya-dannyx-v-otchete/

фильтр по датам в Access

 Strech   (2006-09-05 02:59) [0]

Помогите сделать фильтр по датам в Access. Даты передаю в запрос через параметры. Рузультат выборки удручает.Запрос:select * from saleswhere (date >= :StartDate and date = :StartDate and date Даты передаю в запрос через параметры.и нехрена в параметры строки пихать…

 Fay ©   (2006-09-05 08:30) [4]

> и нехрена в параметры строки пихать…Блин, мне такая хрень даже в голову не пришла!А я сижу, думаю… Будь date функцией (я не знаю Access), да хоть процедурой Ж:) это не объясняет указанное поведение.

 Strech   (2006-09-06 05:44) [5]

> date — не функция, часом?была такая мысль, уточнил sales.date — не помогает

> и нехрена в параметры строки пихать…

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

вопросов по этому форуму с такой же проблемой море, все советуют с параметрами работать, а хоть кто-нибудь это реализовал? Strech   (2006-09-06 05:47) [6]

а есть что-нибудь типа монитора запросов для access? хотелось бы увидеть что за запрос в конечном итоге получается?

 sniknik ©   (2006-09-06 09:14) [7]

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

да, у конвертора движка, есть такая «фича» если строка(число/дату он туда-обратно не преобразует) с датой  ошибочна то он все одно пытается ее преобразовать пользуясь другими доступными настройками локализации. (лучше бы возвращал ошибку…)

> все советуют с параметрами работать, правильно советуют> а хоть кто-нибудь это реализовал?нет блин, ты единственный на всей планете кому такая глупая мысль голову пришла (это же подумать только, писать так, как рекомендуют в руководстве, нонсенс! как же без наших любимых извращений? ;о)))> хотелось бы увидеть что за запрос в конечном итоге получается?а ты разве его не сам пишеш? в итоге такой и остается как написан… (ну только на место дельфевских обозначений параметров вставлены вопросы, в соответствии со стандартом (мелкософтским ?). и кстати любой монитор тут тебя «обманет» сделает визуализацию с подстановкой в удобной для человека текстовой форме…) Strech   (2006-09-06 15:19) [8]

2 sniknik ©   (06.09.06 09:14) [7]ты к чему весь этот пост написал? Типа сумничать хотел — у тебя это получилось. Лучше бы дельный совет дал.Прочти еще раз вопрос, так как в руководстве написано не работает, поэтому за помощью и обратился.

Параметры в строки преобразуются не по моей воле, а по воле программистов писавших компоненты ADO. Как они преобразуются я не знаю. Если ты мне объяснишь — буду признателен.Если кто-то это реализовал, значит у него были такие же проблемы и он их решил, мог бы поделиться инфой как это сделать.

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

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

 Desdechado ©   (2006-09-06 15:36) [9]

А ты откуда эти даты берешь?В нормальных условиях они строкаминикогда не будут и в прараметр не попадут в этом ужасном виде.

Читайте также:  Как в access сделать запрос по месяцу?

 Strech   (2006-09-06 16:25) [10]

даты типа TDateTimeя думал что поскольку параметры имеют тип ftDateTime то они автоматом преобразуются в нужную строку #год/месяц/день#

 Desdechado ©   (2006-09-06 16:31) [11]

TDateTime — это тип данных, он фиксирован#год/месяц/день# — это ФОРМАТ представления данных, он произволен

 sniknik ©   (2006-09-06 16:31) [12]

> ты к чему весь этот пост написал? типа в помощь…> Типа сумничать хотел — у тебя это получилось.нда, простое разяснение воспринимается как умничанье? что же будет на сложных вещах? о смене профессии не думал? подумай.

> Лучше бы дельный совет дал.я дал см. [3]> Параметры в строки преобразуются не по моей воле, а по воле программистов писавших компоненты ADO. > Как они преобразуются я не знаю. Если ты мне объяснишь — буду признателен.

разьясняю. сами в строки они НЕ ПРЕОБРАЗУЮТСЯ, и програмисты «писавших компоненты ADO» НЕ ВИНОВАТЫ.

> Может это дало бы мне возможность понять алгоритм преобразования и справиться с проблемой.ты ищеш не там где «потерял» а там где светлее. sniknik ©   (2006-09-06 16:33) [13]

если уж возник формат… то речь точно о строке.

 Strech   (2006-09-06 16:40) [14]

2 sniknik ©   (06.09.06 16:33) [13]ошибаешься, они преобразуются именно в строки

> и нехрена в параметры строки пихать…

так вот оказалось, что туда именно строки и надо пихать, иначе не работает
 Strech   (2006-09-06 16:48) [15]

извеняюсь, слово «сами» не узрелк сожалению с моим примитивным разумом мне сложно сделать вывод, что текст «и нехрена в параметры строки пихать…» нужно понимать как «пихай туда строки»спасибо за помощь

 sniknik ©   (2006-09-06 17:02) [16]

> ошибаешься, они преобразуются именно в строкину буду спорить, т.к. у тебя они преобразуются (в запросе именно они, что было ясно еще в [3]), кто это делает под сомнением (но разработчики винды, ltkmab? ADO, компанент в этом случае заранее реабилитированы ;)> так вот оказалось, что туда именно строки и надо пихать, иначе не работает

и тут не спорю, с уточнением… у тебя не работает… а на одного тебя миллионы у которых работает.

> нужно понимать как «пихай туда строки»нет, читать надо буквально. Anatoly Podgoretsky ©   (2006-09-06 20:41) [17]

Чем дальше в лес, тем толще партизаны.

 Desdechado ©   (2006-09-06 21:28) [18]

Anatoly Podgoretsky ©   (06.09.06 20:41) [17]Нет, это похоже на:»Так, салаги, вам тест на соответствие. А, все равно не прошли. Только время на вас потратил.»авторунадеяться на помощь после оскорблений глупоPS «ошибаться может каждый, но только дурак упорствует в своих заблуждениях» (с)тырено

 Strech   (2006-09-07 02:26) [19]

если я кого-то оскорбил, то прошу прощения. Однако на помощь надеяться все-таки приходится. Хотелось бы разобраться. Я признаю, что туплю и что в базах данных ничего не понимаю, но учиться то надо.2 sniknik ©   (06.09.06 17:02) [16]

> у тебя не работает… а на одного тебя миллионы у которых > работает.

а почему бы хоть одному из миллиона у кого работает, не написать мне как сделать, чтобы и у меня работало. Очень прошу.сейчас я сделал преобразование TDateTime -> строка в формате #Год/Месяц/День#.

Параметры как ftString. Так работает. Однако это ничем не отличается от генерирования полного текста sql запроса вручную, и смысл использования параметров пропадает.

> нет, читать надо буквально.

Ты можешь для меня тупого сказать, как обойтись без преобразований? sniknik ©   (2006-09-07 08:51) [20]

> а почему бы хоть одному из миллиона у кого работает, не написать мне как сделать, чтобы и у меня работало. по той же причине по какой от тебя есть «обвинение» метода с параметрами, но не показано как сделано… т.е.

предлагается поверить на слово что все сделано правильно но вот не рабатает…я уже гдето писал, что стараюсь придерживаться авторского стиля ветки (что авторов почемуто не радует)… т.е. в ответ на неподкрепленное ничем заявление аналогично заявляю — нет работает, и виноват в «нерабочести» твоей интерпретации метода только ты.

не вериш на слово? аналогично, я не верю что ты сделал правильно (и не вижу другого способа узнать в чем ты ошибся, (с моей точки зрения там просто не в чем…), потому, что как только ктото покажет тебе правильную работу, так ты слиняеш, и не скажеш в чем ошибся.

(не надо говорить что ты «не такой», подавляющее большинство анонимов так делает), и ветка потеряет смысл для читающих)хочеш решить? меняй стиль общения. ну или разбирайся сам, это вовсе не сложно (тайн там точно нет). > Очень прошу.ни это, ни эмоции делу не помогут. только факты.> Ты можешь для меня тупого сказать, как обойтись без преобразований?береш…

и не преобразовываеш. еще никого не подводило…===================================а это я подумываю себе постоянным посскриптумом сделать…http://www.ln.ua/~openxs/articles/smart-questions-ru.html

 Strech   (2006-09-07 09:09) [21]

> sniknik ©   (07.09.06 08:51) [20] я думал что в вопросе все предельно ясно написаноесть комонент Query, в нем забит запрос:select * from saleswhere (date >= :StartDate and date я думал что в вопросе все предельно ясно написанонадеюсь ты (а с тобой и другие, кто читает) понял что ошибался. > [21] уже лучше но.1.

нет типов «проблемных» полей, и ранее ничего не указывает что они дататайм, а не та же строка.2. не показано как  StartDate, EndDate получают значения (проблема может быть в логике программы, и в момент присваивания когда ты думаеш что они = «01.08.2006»/»30.08.

2006″, реально равны чемуто другому)не показано внесение запроса (и не указано что в десигне), т.е. фактически там может быть другой запрос…3. пример данных? (все что не показано для меня не существует, т.к. не проверяется) 4.

некритично но желателно версия базы (95/97/2000/2002, некритично потому как скорее всего новая, да и у старых таких проблем не наблюдалось (другие были))проверить правильность можно так

ADODataSet1.Close;ADODataSet1.CommandText :=  «select * from sales «+  «where (date >= :StartDate and date

Источник: http://delphimaster.net/view/3-1157410788

Ссылка на основную публикацию
Adblock
detector