Новости

5.4.2. Форма, яка використовує запит з параметрами

5.4.2. Форма, яка використовує запит з параметрами

При описі запитів з параметрами вже згадувалося, що їх дуже зручно використовувати в якості джерела даних для форми. Якщо така форма містить елементи управління, назви яких збігаються з назвами параметрів, то значення цих елементів і використовуються в якості параметрів при виконанні запиту. Природно, тип значень і сенс використання елементів управління форми і параметрів запиту повинен збігатися. Розглянемо приклад створення такої форми.

Припустимо, нам потрібно створити форму, яка б відображала підсумки продажів товарів за найменуваннями за обраний період. Як джерело даних для неї зручно було б використовувати запит, який повертає відповідну вибірку. Оскільки період повинен вибиратися в формі, то для завдання періоду в запиті повинні використовуватися параметри.

Створіть новий запит і відкрийте його в режимі конструктора. Додайте до нього таблиці Замовлення (Orders), Замовлено (Order Details) і Товари (Products). Конструктор автоматично розставить всі існуючі між таблицями постійні зв'язки (задані у вікні Схема даних (Relationships) на рівні бази даних). У бланк запиту додайте поля Марка (ProductName) і ЕдінііаІзмеренія (QuantityPerUnit) з таблиці Товари (Product), Кількість (Quantity) з таблиці Замовлено (Order Details). В визначення четвертого поля введіть наступне:

Вартість: Sum (CCur ([Замовлено]. [Ціна] * [Кількість] * (1- [Знижка]) / 100) * 100)
(Cost: Sum (CCur ([Order Details]. [UnitPrice] * [Quantity] * (1- [Discount]) / 100) * 100))

Останнім додайте поле ДатаРазмещенія (OrderDate) з таблиці Замовлення (Orders). На панелі інструментів Microsoft Access натисніть кнопку Групові операції (Totals). Задайте наступні значення групових операцій - Угруповання (Group By) для полів Марка (ProductName) і ЕдініцаІзмеренія (QuantityPerUnit), Sum - для поля Кількість (Quantity), Вираз (Expression) - для поля Вартість (Cost) і Умова (Where) для поля ДатаРазмещенія (OrderDate). Визначення поля Кількість (Quantity) змініть наступним чином - Кількість: Кількість (Qty: Quantity). Для поля Вартість (Cost) задайте порядок сортування по спадаючій (Descending), а для поля ДатаРазмещенія (OrderDate) - умова Between [Дата0] And [Дата1]. Збережіть запит в базі даних під ім'ям Продажі товарів за період (запит). На рис. 5.54 зображений вийшов запит в режимі конструктора (Design View), а на рис. 5.55 - рядок його SQL-оператора (SQL View).

ЗАУВАЖЕННЯ

Після вибору для поля Кількість (Quantity) груповий операції Sum конструктор автоматично присвоїть цьому полю ім'я Sum-Кількість (SumOfQuantity). На перший погляд, для додання імені поля читабельною виду досить прибрати з його назви перші чотири символи (шість - для англійського варіанту). Однак якщо це зробити, то при спробі виконати запит Microsoft Access в цій ситуації видасть повідомлення про помилку:
У вираженні: (CCur ([Замовлено]. [Ціна] * [Кількість] * (1- [Знижка]) / 100] * 100)
не можна вказувати підлеглий запит
(Subqueries can not be used in the expression Sum (CCur ([Order Details] .UnitPrice * [Quantity] * (1 - [Discount]) / 10O) * 10O)).
Це пов'язано з тим, що при обчисленні поля Вартість (Cost) використовується поле Кількість (Quantity) таблиці Замовлено (Order Detail). Цієї ситуації можна уникнути декількома способами. Один з них полягає в завданні нового імені - Кількість (Qty).

На наступному кроці необхідно сконструювати форму, яка буде підпорядкована і заснованої на щойно створеному запиті. Перейдіть на вкладку Форми (Forms) і відкрийте нову форму в режимі конструктора. Задайте для неї такі властивості:

  • Режим за замовчуванням (Default View) - Таблиця (Datasheet).
  • Режим форми (Allow Form View) - Ні (No).
  • Режим таблиці (Allow Datasheet View) - Так (Yes).
  • Режим зведеної таблиці (Allow PivotTable View) - Ні (No).
  • Режим зведеної діаграми (Allow PivotChart View) - Ні (No).
  • Джерело записів (Record Source) - Продажі товарів за період (запит).

Натисніть на панелі інструментів кнопку Список полів ( Натисніть на панелі інструментів кнопку Список полів (   - Field List) - Field List). З вікна, що з'явилося перетягніть на форму все що містяться в ньому поля. Закрийте готову форму, зберігши її під ім'ям Продажі товарів за період (підпорядкована).

На цьому всі підготовчі дії закінчені. Тепер можна приступити до створення потрібної нам форми. Відкрийте нову форму в режимі конструктора і задайте для неї такі властивості:

  • Підпис (Caption) - Продажі товарів за період;
  • Режим за замовчуванням (Default View) - Проста форма (Single Form);
  • Режим форми (Allow Form View) - Так (Yes);
  • Режим таблиці (Allow Datasheet View) - Ні (No);
  • Режим зведеної таблиці (Allow PivotTable View) - Ні (No);
  • Режим зведеної діаграми (Allow PivotChart View) - Ні (No);
  • Смуги прокрутки (Scroll Bars) - Відсутні (Neither);
  • Область виділення (Record Selectors) - Ні (No);
  • Кнопки переходу (Navigation Button) - Ні (No);
  • Розділові лінії (Dividing Lines) - Ні (No);
  • Автоматичний розмір (Auto Resize) - Ні (No).

Решта властивості форми можна залишити без змін.

ЗАУВАЖЕННЯ

Значення всіх перерахованих властивостей можна задати на свій розсуд. Я просто навів ті значення властивостей, які зазвичай використовую при конструюванні форм.

Помістіть в форму два елементи управління поле (Text Box) і вирівняйте їх таким чином, щоб вони розташовувалися один за одним уздовж горизонтальної лінії. Введіть текст приєднаної написи (підписи) першого елемента - Період с, а для другого елементу - по. Для того щоб розмір написів відповідав розміру міститься в них тексту, по черзі виберіть з їх контекстного меню пункт Розмір | за розміром, даних (Size | To Fit).

Для першого поля задайте ім'я Дата0 і вкажіть для властивості Значення за замовчуванням (Default Value) наступне:
= Format ( "01.01." & Str (Year (Date ())); '' Середній формат дати ")
(= Format ( "01.0L" & Str (Year (Date ())); "Medium Date")).

Для другого поля введіть ім'я Дата1 і значення властивості Значення за замовчуванням (Default Value):
= Date ().

Для обох полів задайте наступні властивості:

  • Формат поля (Format) - Середній формат дати (Medium Date);
  • Вирівнювання тексту (Text Align) - По центру (Center);
  • Після поновлення (After Update) - в тіло процедури обробки цієї події введіть оператор -
    Forms! [Продажі товарів за період (форма)]. Form! [Продажі товарів за період (підпорядкована)]. Requery.

Останнє, що ще можна зробити, - вибрати для полів і їх підписів спосіб оформлення (звичайне оформлення, піднесений і т.д.).

Далі виберіть на панелі елементів елемент Підпорядкована форма / звіт (Subform / Subreport) і розташуйте його на макеті форми. Як уже згадувалося вище, це призведе до запуску відповідного майстра. У першому вікні майстра виберіть раніше створену форму Продажі товарів за період (підпорядкована) в якості основи для створюваної підпорядкованої форми. В іншому поведінку майстра практично нічим не відрізняється від описаного вище. Єдиним винятком є ​​те, що не буде видано на екран вікно майстра, що пропонує вказати поля для зв'язку між головною і підлеглою формами (див. Рис. 5.43 і 5.44). Це вікно відображається на екрані тільки тоді, коли для головної форми вказано джерело даних.

Після закінчення роботи майстра видаліть приєднаної до підлеглій формі напис і подкорректируйте розмір і положення всіх елементів управління так, щоб це виглядало приблизно як на рис. 5.56. Збережіть отриману форму під ім'ям Продажі товарів за період (форма). В режимі форми вона представлена ​​на рис. 5.57.

пояснення

  1. Функція Date () повертає поточну системну дату, функція Year (Date ()) повертає значення поточного року, функція Str (Year (Date ())) перетворює це значення в рядок, а вираз "01.01." & Str (Year (Date ())) повертає рядок, що містить дату початку поточного року. Остання дія відбувається за допомогою функції Format - отримане значення рядка перетворюється в середній формат дати. Якщо функцію Format не використовувати, дата буде відображатися в тому вигляді, в якому ми її сконструювали, незалежно від значення властивості Формат поля (Format). Наприклад, якщо поточна системна дата лежить в межах 1998 року, то без використання функції Format значення поля Дата0 буде відображатися у вигляді: 01.01. 1998 (Зверніть увагу на прогалину між останньою крапкою і значенням поточного року).
  2. При відкритті форми Продажі товарів за період (форма) в режимі перегляду в поля Дата0 і Дата1 підставляються значення першого дня поточного року і поточної системної дати відповідно. Ці ж значення автоматично використовуються в якості параметрів запиту, що лежить в основі підпорядкованої форми. При зміні значення дати одного з полів ініціюється подія Після поновлення (After Update) і запускається відповідна процедура обробки. Вона містить всього один оператор, який виконує оновлення (requery) підпорядкованої форми. При оновленні форми відбувається, крім усього іншого, і повторне виконання лежить в основі цього запиту. Як значення параметрів використовуються оновлені значення полів форми. Слід зауважити, що подія Після поновлення (After Update) відбувається після того, як значення елемента управління було модифіковано і елемент втратив фокус введення (проте форма при цьому залишилася активної).
  3. Єдиний оператор процедури обробки події Після поновлення (After Update) ілюструє синтаксис звернення до методів і властивостей підпорядкованої форми. Повний синтаксис звернення до підлеглій формі такий:
    Forms! [Імя_главной_форми] .Form! [Імя_подчіненной_форми]
  4. Microsoft Access дозволяє в режимі конструктора головною форми переглядати і модифікувати властивості підпорядкованої форми і її елементів. Для цього необхідно спочатку виділити елемент управління Підпорядкована форма / звіт (Subform / Subreport), клацнувши на обмежує його рамці. Після цього можна виділити або форму, яка є джерелом для підпорядкованої форми, або будь-який з її елементів і працювати з ними як зазвичай.
  5. У цьому прикладі не використовувалася форма-календар, створена нами в попередньому прикладі. Це було зроблено з метою спростити виклад і уникнути захаращення прикладу несуттєвими в даному випадку подробицями. Однак ніщо не заважає прив'язати до полів Дата0 і Дата1 календар, полегшивши тим самим введення і модифікацію значень типу дата.

[ Попередня ] [ Наступна ]

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

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: