Макроси з умовами, блог про шифрування

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

Для створення макросу з умовою необхідно застосувати стовпець Умова (Condition). Зазвичай він не відображається. Для того щоб зробити його видимим в конструкторі макросу, виберіть на стрічці Робота з макросами | Конструктор> Показати або приховати> Умови (Macro Tools | Design> Show / Hide> Conditions).

Не дивно, що саме в стовпці Умова задаються умови. Умова схоже на вираз, але воно в результаті завжди видає одне з двох значень: Істина або Брехня. Програма Access перевіряє умова і вирішує з його допомогою виконати чи ні відповідну макрокоманду. (Мовою програмістів це називається перевіркою умови.)

Ось як діє цей механізм.

| Якщо залишити стовпець Умова порожнім (як у випадку звичайних макросів), програма Access завжди виконує дану макрокоманду, якщо вона не скидається через помилки;

| Якщо умова задано і виявляється Істиною, Access виконує відповідну макрокоманду;

| Якщо умова задано і виявляється Брехнею, Access пропускає макрокоманду і переходить до виконання наступної команди в списку.

Коротко - у вас є спосіб виконувати макрос тільки іноді, в міру необхідності.

В ході цього обговорення виникає цікаве питання: як сформувати умову? У найпростіших типах умов порівнюються два різних значення. Ось приклад:

Ця умова порівнює поточне значення елемента управління ProductName зі словом "Baloney" (Болонська копчена ковбаса). Якщо в даний момент ProductName містить цей текст (і тільки його), умова одно Істині. Якщо ж ProductName містить щось ще, результат умови - Брехня.

Іноді ви отримуєте умова прямо протилежне тому, яке хотіли створити. У важкий момент завжди можна змінити умова на протилежне, помістивши в початок слово Not. Умова Not [ProductName] = "Baloney" одно Істині, тільки якщо поточний елемент не містить улюблений усіма м'ясний продукт.

Знак рівності (=) - один з основних компонентів умовної логіки, але не єдиний варіант. Можна використовувати знаки операцій "більше ніж" (>) і "менше ніж" (<) и оператор "не равно" (о). Далее приведено выражение, проверяющее, больше ли числовое поле определенного значения:

Для більшої важливості можна додати в суміш ваші улюблені функції Access. (У розділах 4 і 7 описано безліч корисних функцій.) Далі наведено умова, що перевіряє довжину поля і повертає значення Істина, якщо поле менше трьох символів:

Len ([FirstName]) <3

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

У програми Access є лише кілька функцій, які повертають булеві значення, але найчудовіша з цієї зоряної плеяди називається IsNull (). Як ви дізналися раніше, незаповнені поля - це поля, що не містять жодних даних. Функція IsNull () перевіряє, чи не порожньо дане поле або елемент управління. Ось як можна її застосовувати для виявлення пропущеної прізвища:

Ця умова дає в результаті значення Істина, якщо в поточному полі LastName немає ніяких даних.

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

На закінчення, останній прийом, який може застосовуватися в умовах, - поєднання декількох умов для створення більш потужних Суперумови. Для цього є два ключових слова, здатних допомогти вам об'єднувати умови: And (І) і Or (Або).

And вимагає одночасного виконання обох умов, таким чином, роблячи ваше умова більш суворим. Наступна умова повертає результат Істина, тільки якщо обидва поля і FirstName, і LastName довше трьох символів кожне:

Len ([FirstName]) <3 And Len([LastName]) <3

Or надає дві альтернативи для задоволення умови. Наступна умова повертає результат Істина, якщо поле FirstName або LastName порожньо. Воно повертає Брехня, тільки якщо в обох полях є текст.

IsNull ([FirstName]) Or IsNull ([LastName])

За допомогою цих будівельних блоків - умовних операторів, функцій і ключових слів Not, And і Or - можна створити безліч умов. У наступному розділі ви побачите приклад, що змушує умови працювати.

Перевірка даних за допомогою умов

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

Макроси з умовами, блог про шифрування
Як відомо з глави 4, у програми Access є кілька засобів, здатних допомогти захистити дані у вашій таблиці, включаючи маски введення, умови на значення і підстановки. Слід завжди намагатися застосувати ці кошти перш, ніж звертатися до макрокодірованію. Однак існує багато типів помилок, що вимагають застосування макросів. Один загальний приклад - коректність одного поля, що залежить від значення іншого поля.

Перший крок - реагувати на відповідні події - головним чином події форми До вставки, До оновлення та До підтвердження. Коли вони виникають, можна виконати умови і знайти серед них помилкові. Якщо ви бачите щось, що вам не подобається, використовуйте команду ОтменітьСобитіе (CancelEvent) для повного переривання процесу і, таким чином, скасування операції вставки, оновлення або видалення.

Мал. 15.21. Коли встановлюється прапорець Please notify me about special offers (Будь ласка, повідомляйте мені про спеціальні пропозиції), в поле WantsEmail встановлюється значення Так. Але у цій записи є проблема - в поле Email немає значення

У команди ОтменітьСобитіе немає аргументів - вона просто перериває виконується в даний момент процес. ОтменітьСобитіе працює з будь-яким подією, що починається зі слова "До" ( "Before"), що означає готовність реальної операції до виконання, але ще не саме її виконання.

Припустимо, ви хочете створити просту умову, яке зупиняє оновлення певного запису. Розгляньте форму, показану на рис. 15.21.

Вам знадобиться наступне логічне умова:

WantsEmail = Yes And IsNull ([EmailAddress])

Ця умова повертає значення Істина, якщо WantsEmail одно Та й EmailAddress порожньо. Коли це виконується, саме час скасувати оновлення за допомогою макрокоманди ОтменітьСобитіе.

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

Коли подія скасовується, воно не виконує відкат всіх змін. Скасування події лише заважає завершенню операції. Якщо змінюється запис і робиться спроба перейти до іншого запису, виникає подія До оновлення (Before Update). Якщо макрос скасовує цю подію, програма Access забороняє переходити до іншого запису та залишає вас на колишньому місці. Але поточна запис залишається в режимі редагування з усіма відредагованими значеннями. Ваша справа усунути проблему або натиснути клавішу для повної відмови від спроби поновлення.

Умовна макрокоманда ОтменітьСобитіе - серцевина багатьох перевірочних макросів. Але вам потрібен ще один завершальний штрих: повідомлення про помилку. Інакше користувач, який виконує оновлення, не здогадається, в чому справа. Він буде схильний вважати, що Access зовсім злетіла з котушок.

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

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

На рис. 15.22 показаний закінчений макрос, а на рис. 15.23 - виконується макрос.

Макроси з умовами, блог про шифрування

Мал. 15.22. Цей макрос складається з двох макрокоманд з умовою. Для блокування некоректних даних приєднаєте його до подій До оновлення та До вставки