В) Операції з текстовими полями

Створимо запит Категорія+код, який об’єднає інформацію двох полів таблиці Типи (поле Категория і КодТипа)в одному полі (Нове поле).

Програма Access дозволяє виконувати логічні операції не лише з числовими даними, а й з текстовими полями. Створимо за допомогою майстра запит до таблиці Типи в який ввійдуть поля Категория і КодТипа. У режимі конструктора задамо вираз, який визначатиме нове поле:

. [Категория] & "-("& [КодТипа] & ")", де символ "-" означає пробел.

Назвемо новостворене поле Нове поле. Виконання такого запиту призведе до появи нового поля, де знаходиться інформація про категорію товару, а в дужках відповідно код типу.

Приклад 6. Створення у запитах виразів за допомогою побудовувача

 

А)Створення простого виразу

Обчислимо суму замовлень кожного клієнта (на основі записів таблиці Закази).

Оскільки ціни на товари, величина замовлення та розмір знижки для кожного найменування знаходяться в таблиці Заказано, а інформація про замовлення окремим клієнтом (товар та кількість) знаходиться у таблиці Закази, то запит повинен включати поля двох зв'язаних таблиць.

Вартість замовлення одного найменування обчислюється за формулою:

[Цена]*[Количество]*(1-[Скидка]/100)

де в квадратних дужках записані назви відповідних полів таблиці Заказано.

Просумувавши для кожного клієнта вартість замовлених товарів (використовуючи функцію групових операцій - Sum) отримаємо вартість замовлення кожного клієнта.

У базі даних "Борей" створимо запит Вартість замовлень, в структуру якого ввійде лише поле КодКлиента (таблиці Закази).

У вікно конструктора запиту потрібно додати таблицю Заказано, оскільки саме поля цієї таблиці повинні утворити обчислювальне поле.

Зауваження При додаванні таблиці у вікні конструктора запиту автоматично відобразиться зв'язок типу "один-до-багатьох", який зв'язує дані двох таблиць

У першому порожньому стовпці бланку конструктора запиту створимо нове поле Вартість, значення якого обчислюватимуться за наведеною вище формулою. Для створення такого виразу використаємо побудовувач виразу. Для цього, перебуваючи у комірці, де треба створити вираз, викличемо побудовувач за допомогою кнопки Построить панелі інструментів. У верхнє поле вікна побудовувача введемо знак рівності (з клавіатури або за допомогою кнопки середньої частини вікна). У лівій нижній частині вікна побудовувача виберемо папку Таблиці, а в ній таблицю Заказано. Із середньої нижньої частини вікна виберемо поле Цена та перенесемо його у вікно побудовувача (двічі клацнувши по полю або натиснувши кнопкуВставить). Аналогічно будуємо вираз далі. У результаті цього у вікні побудовувача з'явиться вираз.

= [Заказано]![Цена]*[Заказано]![Количество] * (1- [Заказано]![Скидка] /100 )

Натиснувши кнопкуОК вікна побудовувача, даний вираз переміститься у комірку бланку запита. Змінимо назву поля на Вартість, а у вікні властивостей поля (яке відкриється через відповідну команду контекстного меню поля) формат поля на грошовий.

Запустивши на виконання такий запит, отримаємо динамічну таблицю, в якій кожному клієнту відповідатимуть декілька записів з порахованою вартістю кожного окремого замовлення.

Для того, щоб просумувати усі замовлення для кожного клієнта, у запиті Вартість замовлень підключимо групові операції (за допомогою кнопкиГрупповые операции) та виберемо функцію додавання для поля Вартість, Вікно конструктора запиту матиме вигляд.

Зауваження При повторному відкритті конструктора запиту на бланку у комірці з обчислювальним полем буде знаходитись вираз:

Вартість: Sum([Заказано]![Цена]*[Заказано]![Количество]*(1 -[Заказано]![Скидка]/100))

а в рядку групових операцій - елемент Выражение. Програма сама змінила вираз, врахувавши операцію додавання.

Б) Побудова складних виразів:

1) Створимо запит Іменинники, який відображатиме записи співробітників фірми Борей, у яких у поточному місяці буде день народження

У запит повинні ввійти поля з інформацією про прізвище та ім'я співробітника, а також його дата народження (таблиця Сотрудники). У першому вільному стовпці конструктора запиту введемо логічний вираз, який прирівнюватиме місяць народження співробітника до поточного місяця, тобто вираз

Моnth([Сотрудники]!|ДатаРождения])= Моnth(Now ())

дефункціїMonth()іNow()знаходяться у списку вбудованих функцій (папка Функции => Встроенние функции,категоріяДата/времявікна побудовувачавиразів).

Оскільки створений вираз - логічний, то він може приймати лише одне з двох значень:False абоTrue. Виводити треба лише записи, для яких цей вираз приймає значенняTrue (істина), тобто у рядок умови відбору вводять значення Yes (абоДа для русифікованої версії). Результатом виконання такого запиту буде динамічна таблиця із записами співробітників, у яких день народження припадає у поточному місяці.

2)Створимо запит Закінчується, який у таблиці Товары позначитиме товар, кількість якого на складі менша за 10 одиниць.

У результаті виконання такого запиту повинно утворюватись нове поле, в якому відображатиметься повідомлення "ЗАКІНЧУЄТЬСЯ". Для цього на бланку конструктора запиту до таблиці Товари, в якому знаходяться ті поля, які на думку користувача є необхідними (у нашому випадку це поля КодТовара, Марка, Цена, НаСкладе), потрібно створити обчислювальне поле Повідомлення, котре визначатиметься виразом:

IIf([НаСкладе]<10; "ЗАКІНЧУЄТЬСЯ";),

Зауваження Синтаксис функціїIIf аналогічний до синтаксису стандартної функції організації розгалуженняIf:

IIf (умова; значення,.!; значення_2),

де умова - логічний вираз, який може приймати одне з двох значеньTrue абоFalse; значення_1 - значення, яке прийме функція, якщо логічний вираз приймає значення True, значеннz_2 - значення, яке прийме функція, якщо логічний вираз приймає значенняFalse.

Умова задається нерівністю, яка визначається кількістю одиниць найменування на складі (значенням у полі На-Складе). Якщо кількість менша 10 одиниць, то у полі Повідомлення з'явиться слово "ЗАКІНЧУЄТЬСЯ", якщо ж кількість перевищує 10 одиниць, то комірка залишиться порожньою.

3) Створимо запит Вік, який відображатиме записи тих співробітників, кому виповнилося 40 років.

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

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

IIf (DateSerial (Year(Date()); Моnth([ДатаРождения]);_ Dау([ДатаРождения]))<Dаtе();Уеаг(Dаtе())-Уеаг([ДатаРождения]);_ Уеаг(Dаtе())-Уеаг([ДатаРождения])-1),

деDateSeria»(Y, M, D) - функція, яка перетворює у дати три числа: Y - рік, М - місяць та D - день. У нашому випадку функція DateSerial (Уеаг(Date());Моnth([ДатаРождения]); Day([ДатаРождения]))

з поточного рокуYear(Date()) місяця дня народження та дня народження сформує дату народження у поточному році. Якщо ця дата передує поточній датіDate(), тобто день народження уже був у цьому році, то вік обчислюється як різниця між поточним роком та роком народженняYear(Date())-Уеаг([ДатаРождения]), якщо ж дня народження ще не було, то від різниці між роками віднімається один рік.

Для того, щоб відобразити записи працівників, яким за 40 років, потрібно додати ще умову на поле Вік>40.

Прикл.7. Створення перехресного запиту

Створимо запит Клієнт-товар, який відображатиме інформацію про те, скільки кожен клієнт замовив кожного найменування.

Створимо спочатку запит Замовлено товарів, який відображатиме записи про замовлення клієнтами відповідних найменувань із зазначенням кількості та ціни найменування, тобто динамічна таблиця результату виконання запиту повинна складатися з таких полів: КодКлиента (з таблиці Закази), Марка (з таблиці Товари), Количество і Цена (з таблиці Заказано).

На основі цього запиту створимо перехресний запит, використовуючи відповідний майстер, який завантажиться після вибору елементу Перекрестний запрос діалогового вікнаНовый запрос. На першому кроці майстра вибираємо запит Замовлено товарів, на основі якого буде створюватись новий запит. На другому і третьому кроках виберемо у ролі рядків значення поля КодКлиента, а у ролі стовпців - значення поля Марка. На наступному кроці майстра задамо функціюСумма для проведення обчислень зі значеннями поля Количество, а також відмінити опцію для проведення підсумкових обчислень по кожному рядку. На останньому кроці назвемо запит Клієнт-товар та задамо опцію для перегляду результату виконання запиту.

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