Dim strWhereCategory As String 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Dim strWhereCategory As String



' объявление переменной для условия отбора данных

strWhereCategory = "Код_поставщика = Forms![Отчеты о продажах]!Spisok"

‘ создание строки отбора данных

‘ создание выбора вида отображения формы

Select Case Me!grpOtchet

Case 1

DoCmd.OpenForm "Приход", acNormal

' открытие формы в обычном режиме просмотра

Case 2

DoCmd.OpenForm "Сводная форма", acFormPivotTable

' открытие формы в режиме сводной таблицы

Case 3

If IsNull(Forms![Отчеты о продажах]!spisok) Then

DoCmd.OpenForm "Приход", acNormal

Else

DoCmd.OpenForm "Приход", acNormal,, strWhereCategory

' открытие формы в обычном режиме просмотра с фильтром

End If

End Select

DoCmd.Close acForm, "Отчеты о продажах"

' закрытие текущей формы

End Sub

 

Разберем смысл кода приведенного в листинге 3.

Объект DoCmd — это "рабочая лошадка" программирования в Access. Этот объект позволяет программным образом выполнять макрокоманды Access.

У объекта DoCmd нет свойств, только методы.

Приводить здесь методы DoCmd с комментариями нет никакого смысла — эти методы в точности соответствуют набору действий в конструкторе макрокоманд.

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

Для перебора значений группы переключателей используется стандартная условная конструкция Select Case …. End Select, где внутри созданы блоки перебора Case трех значений, соответствующих трех видов отчетов.

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

 

OpenForm FormName, View, FilterName, WhereCondition, DataMode, WindowMode

 

Описание аргументов метода:

FormName Имя формы
View Вид отображения формы. Возможные значения: · acNormal– обычный режим формы · acFormPivotTable – режим сводной таблицы · acFormPivotChart– режим сводной диаграммы · acPreview – печать формы Значение по умолчанию acNormal.
Filter Name Имя фильтра, который ограничивает или сортирует данные записей формы. Вы можете написать имя или существующего запроса, или фильтра, который был сохранен как запрос. Однако, запрос должен включить все поля в форме.
Where Condition Это условие отбора записей на языке запросов SQL или выражение, которое используется для того, чтобы отобрать все записи формы, соответствующие этому условию. Для того, чтобы открыть форму и вывести только те записи, которые удовлетворяют определенным значениям элементов управления на другой форме, используйте следующее выражение: [ fieldname ] = Forms![ formname ]![ controlname on other form ]   Где аргумент fieldname - имя поля в основной таблице или форме, которую вы хотите открыть. Controlname на другой форме - имя элемента управления на другой форме, которая содержит значение, по которому вы будете производить фильтрацию записей.
Data Mode Режим ввода данных для формы. Применяется только к формам открытым в виде формы или виде Datasheet.
Window Mode Режим окна, в котором форма открывается.

 

Например, код

DoCmd.OpenForm "Приход", acNormal

откроет форму "Приход" в обычном режиме просмотра. А код:

DoCmd.OpenForm "Сводная форма", acFormPivotTable

откроет форму "Сводная форма" в режиме сводной таблицы.

 

Самое сложное в нашем программном коде – это создание условия отбора данных. С этой целью была объявлена переменная strWhereCategory строкового типа.

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

strWhereCategory = "Код_поставщика = Forms![Отчеты о продажах]!Spisok"

 

где Код_поставщика – поле в форме, которую будете открывать и по которому производите выборку данных (в нашем случае это поле из формы Приход)

Forms![Отчеты о продажах]!Spisok – обращение к выбранному значению списка на форме «Отчеты о продажах».

При этом условие strWhereCategory – является условием языка SQL, где используются специальные конструкции языка. В частности для обращения к семейству всех форм используется объект Forms. Затем указывается имя формы, затем имя элемента управления. Разделителем между именами служит знак восклицания. Если в именах присутствуют пробелы, то они заключаются в квадратные скобки.

 

Таким образом, например, в результате выбора пользователем из списка названия – МЧП Белинда будет передано значение

"Код_поставщика = 2"

где

«МЧП Белинда» имеет код =2.

Поэтому после нажатия кнопки «Просмотр формы» вам будет открыта форма с двумя записями с поставщиком МЧП Белинда.

 

Метод Close применяется для закрытия определенного вида объекта.

Синтаксис метода:

Expression.Close(ObjectType, ObjectName, Save)

Аргументы метода:

Expression выражение, которое возвращает один из объектов
ObjectType тип объекта. Аргумент принимает следующие значения: acDataAccessPage, acDefault default, acDiagram, acForm, acFunction, acMacro, acModule, acQuery, acReport, acServerView, acStoredProcedure, acTable
Save сохранение данных перед закрытием объекта. Аргумент принимает следующие значения: acSaveNo, acSavePrompt (Модуль будет закрыт, но не будут сохранены изменения к модулю), acSaveYes

 

Поэтому в нашем случае мы записали:

DoCmd.Close acForm, "Отчеты о продажах"

Что соответствует закрытию формы "Отчеты о продажах".

 

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

Такими условными конструкциями будут

If flag.Value = False Then

End If

и

If flag.Value = true Then

End If

 

Для отбора записей с учетом периода дат необходимо объявить новую строковую переменную для создания условия, а именно переменную strWhereCategory2.

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

Аналогично с запросами, условная строка будет иметь вид:

strWhereCategory2 = "Дата_накладной Between Forms![Отчеты о продажах]!txtNach And Forms![Отчеты о продажах]!txtConch"

где txtNach – значение текстового поля с начальной датой, а txtConch – значение текстового поля с конечной датой.

А для отбора записей с учетом периода дат и названия поставщиков необходимо объявить строковую переменную strWhereCategory3.

Для объединения двух условий воспользуемся логической функцией And.

Условная строка будет иметь вид:

strWhereCategory3 = "Код_поставщика = Forms![Отчеты о продажах]!Spisok And Дата_накладной Between Forms![Отчеты о продажах]!txtNach And Forms![Отчеты о продажах]!txtConch"

где txtNach – значение текстового поля с начальной датой, а txtConch – значение текстового поля с конечной датой.

Окончательно программный код будет иметь вид, приведенный в листинге 4.

Листинг 4. Обработчик события нажатия кнопки «Просмотр форм»

Private Sub comOpenForm_Click()

Dim strWhereCategory1 As String

Dim strWhereCategory2 As String

strWhereCategory1 = "Код_поставщика = Forms![Отчеты о продажах]!Spisok"

strWhereCategory2 = "Дата_накладной Between Forms![Отчеты о продажах]!txtNach And Forms![Отчеты о продажах]!txtConch"

strWhereCategory3 = "Код_поставщика = Forms![Отчеты о продажах]!Spisok And Дата_накладной Between Forms![Отчеты о продажах]!txtNach And Forms![Отчеты о продажах]!txtConch"

If flag.Value = False Then

Select Case Me!grpOtchet

Case 1

DoCmd.OpenForm "Приход", acNormal

Case 2

DoCmd.OpenForm "Сводная форма", acFormPivotTable

Case 3

If IsNull(Forms![Отчеты о продажах]!spisok) Then

DoCmd.OpenForm "Приход", acNormal

Else

DoCmd.OpenForm "Приход", acNormal,, strWhereCategory1

End If

End Select

End If

If flag.Value = True Then

Select Case Me!grpOtchet

Case 1

DoCmd.OpenForm "Приход", acNormal,, strWhereCategory2

Case 2

DoCmd.OpenForm "Сводная форма", acFormPivotTable,, strWhereCategory2

Case 3

If IsNull(Forms![Отчеты о продажах]!spisok) Then

DoCmd.OpenForm "Приход", acNormal

Else

DoCmd.OpenForm "Приход", acNormal,, strWhereCategory3

End If

End Select

End If

DoCmd.Close acForm, "Отчеты о продажах"

End Sub

Сохраните процедуру, выйдите из редактора VBA, сохраните форму, перейдите в режим просмотра.

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

- выберите из списка Вид отчета – Продажи по всем поставщикам и нажмите кнопку Просмотр формы. Если вы верно выполнили все вышестоящие инструкции, то у вас должна отобразится форма Приход. Закройте форму Приход.

- выберите из списка Вид отчета – Продажи по определенному поставщику, из списка Поставщики – выберите любого поставщика, например МЧП Олимпийский, и нажмите кнопку Просмотр формы. Если вы верно выполнили все вышестоящие инструкции, то у вас должна отобразится форма Приход с примененным фильтром на выбранного поставщика. Закройте форму Приход.

- выберите из списка Вид отчета – Сводный отчет с итогами, установите начальную дату – 1.01.2001, конечную дату – 1.01.2010, установите флажок учитывать период дат, и нажмите кнопку Просмотр формы. Если вы верно выполнили все вышестоящие инструкции, то у вас должна отобразится сводная форма с примененным фильтром дат. Закройте сводную форму.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 382; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.5.183 (0.031 с.)