Лабораторна робота №9 на тему Використання VBA в формах, Бази даних та інформаційні системи, ЗНТУ
« НазадЛабораторна робота №9 на тему Використання VBA в формахМета роботи: навчитися створювати коди програм за допомогою VBA та використовувати методи і події об’єктів форм. 4.1 Робота з формамиФорми мають багато спільного зі звітами. Вони мають однакові розділи, однакові елементи керування. Посилання на форму можна виконати одним із способів: Forms ( „ ім’я_форми ”) або Forms ! ім’я_форми або Forms ! [ім’я_форми] , якщо в імені форми є пробіли. Події форми, коли вона відкривається вперше, здійснюються в такому порядку одна по одній: Open – форма вже відкрита, проте перший запис ще не виведений; Load – форма відкривається і виводиться на екран; Resize – подія виникає, коли відкривається форма, а також, коли змінюються будь-які її розміри; Activate – форма стає активним вікном; Current – запис отримує фокус і стає поточним, а також під час оновлення екрану або виконання запиту для форми. Об’єкт DoCmd дозволяє з середовища VBA викликати методи Access. Синтаксис: DoCmd . метод (перелік параметрів) Найчастіше використовуються такі методи:
- FormName – обов’язковий параметр, який визначає ім’я форми; - View – режим, в якому форма відкривається; визначається константою зі списку: acNormal (за замовчанням), acPreview, acFormPivotTablе,acFormPivotChart; acDesign, acFormDS; - FilterName – ім’я фільтру, який збережений у вигляді запиту і використовується для відбору і сортування записів; - WhereCondition – вираз на мові SQL (без слова where) для відбору записів; заміняє фільтр, якщо відсутній попередній параметр; Наприклад, щоб відкрити форму tvidom для певного робітника, можна побудувати критерій та відкрити форму таким чином: kriteria = BuildCriteria("fio" , dbText , InputBox("Введіть прізвище")) DoCmd.OpenForm "tvidom", , , kriteria - DataMode – режим введення даних в форму, якщо форма відкривається в режимі таблиці або форми; можливі значення параметру: acFormAdd, acFormEdit, acFormReadOnly; за замовчанням –acFormPropertySettings (використовуються властивості форми); - WindowMode – режим вікна, в якому відкривається форма: acWindowNormal (за замовчанням), acDialog, acHidden, acIcon; - OpenArgs – строковий вираз, який передається як параметр у форму, що відкривається; він встановлює властивість форми OpenArgs. Значення цієї властивості найчастіше використовують у модулі форми в кодах на подію Open форми. Задача 4.1 Відкрити автоформу tvidom (див. рис. 3.1) із заголовком "tvidom–автоформа". Спочатку треба створити модуль для виклику форми Sub заголовок_форми() DoCmd.OpenForm "tvidom" , , , , , , "tvidom–автоформа" End Sub А потім в коді на подію Load форми надати властивості Caption значення аргументу OpenArgs Private Sub Form_Load() Me.Caption = OpenArgs End Sub
Задача 4.2 Створити послідовність форм для пошуку відомостей про заробітки певного робітника. Пошук здійснювати за прізвищем або за табельним номером. Спочатку створимо за допомогою майстра форм підпорядковану форму, яка буде відображувати відомості про заробітки. Виберемо для форми тип Режим таблицы. Включимо до форми поля dat і zar (дата роботи і заробіток) таблиці tzarobitok і встановимо порядок сортування за датою. В розділі Примечание формы для обчислення загальної суми заробітків розмістимо Поле1 та встановимо для нього властивість Данные = Sum ( [zar] ). Конструктор форми зображений на рис. 4.1. Рисунок 4.1 – Конструктор форми для таблиці tzarobitok Далі створимо наступну форму для даних з таблиці tvidom. Виберемо поля tn і fio (табельний номер і прізвище) та тип Одиночная форма. В режимі конструктора перетягнемо на макет цієї форми з вікна бази даних піктограму форми tzarobitok подчиненная форма. До форми tvidom буде вбудована підпорядкована форма. В конструкторі у вікні властивостей Подчиненная форма / отчет на вкладці Данные будуть встановлені поля, за якими здійснюється зв’язок між таблицями. Це властивості:
Якщо підпорядковану форму запускати окремо, то будуть підсумовані всі заробітки. А якщо запускати головну форму, то враховуватись будуть заробітки тільки одного конкретного робітника. Щоб відобразити підсумки на формі tvidom, розмістимо нове Поле2 в розділі Примечание формы з підписом Усього нараховано і встановимо для нього властивість Данные = IIf ( IsNull ( [tzarobitok подчиненная форма]![Поле1] ) ;0 ; [tzarobitok подчиненная форма]![Поле1] ) Тобто, якщо людина не має заробітків, для неї немає підсумків в таблиці tzarobitok, а в Поле2 відображується 0. Форма tvidom буде викликатися головною формою для одного робітника, тому встановимо для неї властивість Кнопки перехода=Нет. Тепер створимо головну форму. Розмістимо на ній 2 вільних Поля, командну кнопку та написи (див. рис. 4.2). Рисунок 4.2 – Конструктор головної форми Після запуску форми треба ввести прізвище або табельний номер людини. Якщо клікнути мишкою на полі fam (прізвище), то знищується вміст поля nn (табельний номер) і навпаки. Якщо такої людини немає, про це виводиться повідомлення. Створимо коди програм на події Click для полів та командної кнопки „Знайти”. Option Compare Database Public kriteria As String, nom As Integer Private Sub Знайти_Click() ‘ код на кнопку Знайти Dim dbMyDB As Database, rsRec As Recordset Dim name As String, kriteria As String, nom as Integer Set dbMyDB = CurrentDb Set rsRec = dbMyDB.OpenRecordset ( "tvidom" , dbOpenDynaset) If fam.Value > " " Then ‘ побудова критерію за прізвищем name = fam .Value kriteria = BuildCriteria ( "fio", dbText , name) ElseIf nn .Value > 0 Then ‘ побудова критерію за табельним номером nom = nn .Value kriteria = BuildCriteria ("tn", dbInteger , nom) Else MsgBox "Заповніть поле для пошуку!" Exit Sub End If ‘ пошук запису в таблиці tvidom , що задовольняє критерію rsRec.FindFirst kriteria If rsRec.NoMatch Then ‘ якщо запис не знайдено MsgBox "Такої людини немає" Exit Sub End If DoCmd . Close ‘ закрити форму ‘ виклик форми tvidom DoCmd . OpenForm "tvidom", , , kriteria End Sub Private Sub fam_Click() ‘ знищується вміст поля nn nn.Value = "" End Sub Private Sub nn_Click() ‘ знищується вміст поля fam fam = "" End Sub Рисунок 4.3 – Зразок роботи головної форми Спочатку викликається головна форма (див. рис. 4.3). В одне з полів вводиться табельний номер або прізвище людини. Кнопка Знайти закриває головну форму і викликає форму tvidom з даними тільки про вказану людину (див. рис. 4.4). Можна форму tvidom в режимі конструктора розмістити на головній формі. Тоді в коді програми буде зайвим рядок DoCmd . OpenForm "tvidom", , , kriteria Рисунок 4.4 – Зразок роботи форми tvidom У вікні властивостей головної форми для об’єкту Подчиненная форма / отчет на вкладці Данные треба вказати елементи, за якими здійснюється зв’язок між формами, а саме:
4.2 Контрольні питання1) Події форми Open , Load, Resize, Activate, , Current. 2) Поняття підпорядкованої форми. 3) Посилання на елементи керування форми. 4) Об’єкт DoCmd та його методи. 5) Передача значень параметру від однієї форми до іншої. 4.3 Індивідуальні завданняСтворити форми та написати коди програм для розв’язку завдань свого варіанту. Варіант 11) Створити форму, на якій для кожного господарства – замовника будуть виведені його назва, телефон та перелік замовлень. Вивести на формі дату останнього замовлення. 2) Створити форму для реєстрації нового замовлення з усіма потрібними полями. Забезпечити унікальність коду замовлення. Назву замовника та назву добрива вибирати зі списків. Підрахувати суму до сплати (вартість замовлення – пільги + 20%ПДВ) та загальну суму, на яку зроблені замовлення вказаним господарством. Варіант 21) Створити форму, на якій для кожного замовника будуть вказані його назва, адреса, телефон та перелік замовлень. Вивести на формі загальну масу перевезеного вантажу. 2) Створити форму для реєстрації нового замовлення з усіма потрібними полями. Забезпечити унікальність номеру замовлення. Назву замовника та транспортний засіб вибирати зі списків. Підрахувати вартість замовлення (відстань* маса * вартість т/км – пільги) та загальну кількість замовлень для вибраного замовника. Варіант 31) Створити форму, на якій для кожного готелю будуть вказані його назва, рівень сервісу та відомості про гостей, що зараз перебувають в готелі, з підрахованою сумою до сплати за проживання (вартість за одну добу*термін проживання*пільги + 20%ПДВ). Обчислити загальну сплачену суму для кожного готелю. 2) Створити форму для реєстрації нового гостя. Інформація повинна додаватися до таблиці Гості міста, якщо гість в ній не зареєстрований, та до таблиці Замовлення. Готель та тип номеру вибирати зі списку. Передбачити унікальність коду замовлення та коду гостя. Варіант 41) Створити форму, на якій для кожного постачальника вивести його назву, адресу і перелік замовлень з підрахованою сумою до сплати (вартість замовлення +20% ПДВ) та загальну суму, на яку зроблені замовлення. 2) Створити форму для реєстрації нового замовлення. Забезпечити унікальність коду замовлення. Постачальника, назву та код матеріалу вибирати зі списків. Перевіряти, щоб дата замовлення була раніше за дату постачання. Вивести дату першого замовлення. Варіант 51) Створити форму для реєстрації нового платежу. Прізвище споживача вибирати зі списку. Після цього автоматично виводити на формі назву пільгової категорії, відсоток сплати та розрахунковий рахунок. Перевіряти, щоб останній показник лічильника був більшим за попередній. Виводити на формі витрачену кількість електроенергії. 2) Створити форму, яка демонструє список платежів для кожного споживача з підрахованою сумою до сплати (вартість замовлення-пільги+20%ПДВ) та загальну суму, що сплачена за поточний рік. Варіант 61) Створити форму, на якій для кожного магазину будуть вказані його назва, телефон та відомості про замовлення. Вивести на формі вартість кожного замовлення та підрахувати загальну кількість замовлень для кожного магазину окремо. 2) Створити форму для реєстрації нового замовлення з усіма потрібними полями. Забезпечити унікальність коду замовлення. Назву магазину та назву продукції вибирати зі списків. Підрахувати загальну вартість замовлень для вибраного магазину. Варіант 71) Створити форму, на якій для кожного постачальника вивести його назву, адресу, телефон і перелік замовлень із вартістю та сумою до сплати (вартість замовлення +20% ПДВ). Підрахувати середню вартість одного замовлення без ПДВ. 2) Створити форму для реєстрації нового замовлення. Забезпечити унікальність коду замовлення. Постачальника, назву та код вузла вибирати зі списків. Після вибору вузла автоматично виводити на формі виробника вузла та вартість одного вузла. Підрахувати вартість замовлення та суму до сплати. Варіант 81) Створити форму, на якій для кожного рейсу будуть вказані аеропорт вильоту і аеропорт призначення та перелік проданих квитків, упорядкований за датою вильоту. Вивести на формі сплачені суми та загальну кількість проданих квитків для кожного рейсу окремо. 2) Створити форму для реєстрації продажу квитків з усіма потрібними полями. Номер рейсу, тип салону та розмір пільг вибирати зі списків. Вказати на формі найбільшу кількість проданих квитків в одному замовленні для вказаного рейсу. Варіант 91) Створити форму, яка для кожного хірурга демонструє список його пацієнтів із зазначенням прізвища та категорії пацієнта, назви та дати операції. Підрахувати кількість пацієнтів для кожного хірурга. 2) Створити форму для реєстрації нового пацієнта. Категорію та стать пацієнта, назву операції та хірурга вибирати зі списків. Підрахувати та вивести на формі загальну вартість лікування і суму до сплати з урахуванням пільг. Варіант 101) Створити форму, на якій для кожного магазину будуть вказані його назва, адреса та відомості про замовлені книги. Вивести на формі загальну кількість замовлених книг та найбільший обсяг замовлення. 2) Створити форму для реєстрації нового замовлення. Забезпечити унікальність номеру замовлення. Назву магазину та автора і назву книги вибирати зі списків. Після вибору книги виводити на формі кількість сторінок та відпускну ціну одного примірника. Підрахувати вартість усього замовлення з урахуванням знижок. Варіант 111) Створити форму, на якій для кожного цеху будуть вказані його телефон та відомості про продукцію, поставлену на склад. Вивести на формі дату останньої поставки. 2) Створити форму для реєстрації надходження нової партії продукції на склад. Забезпечити унікальність коду партії. Номер цеху, назву продукції та її ґатунок вибирати зі списків. Дату реєстрації за замовчанням встановлювати рівній системній даті. Перевіряти, що об’єм партії продукції більше або дорівнює обсягу мінімальної партії. Варіант 121) Створити форму, яка для кожної пільгової категорії виводить її назву, відсоток сплати та відомості про сплачені суми за телефон із зазначенням прізвища абонента, номеру телефону та дати платежу. Підрахувати загальну сплачену суму. 2) Створити форму для реєстрації чергового платежу. Номер телефону вибирати зі списку. Після цього виводити на формі назву пільгової категорії абонента, відсоток сплати та кількість несплачених хвилин по всіх видах розмов. Розраховувати розмір суми до сплати в залежності від пільг та дати сплати. ЛІТЕРАТУРА
З повагою ІЦ "KURSOVIKS"! |