- •§ 1. Поняття про інформаційне моделювання
- •Опорний конспект
- •§ 2. Етапи розв’язання задач на комп’ютері
- •§ 3. Середовища розробки проектів
- •§ 4. Властивості елементів керування
- •§ 1. Поняття про інформаційне моделювання 2
- •Контрольна робота № 1
- •§ 5. Створення проектів
- •§ 6. Основні поняття мови програмування
- •9. Процедура кнопки «Обчислити» для задачі про калькулятор.
- •§ 7. Алгоритм та його властивості
- •Запитання
- •§ 8. Різновиди алгоритмів
- •Запитання
- •§ 9. Типи даних
- •§ 10. Лінійні програми
- •Запитання та вправи
- •Контрольна робота № 2
- •§11. Введення даних і виведення результатів
- •§ 12. Текстові файли даних
- •§ 13. Програми з розгалуженням
- •§ 1. Поняття про інформаційне моделювання 2
- •Запитання
- •§ 14. Елементи керування прапорці і перемикачі
- •§ 15. Алгоритмічна конструкція вибір
- •Контрольна робота № 3
- •§ 16*. Списки
- •§ 17. Підпрограми. Функції користувача
- •§ 18. Підпрограми. Процедури користувача
- •§ 19. Цикли. Цикл з параметром
- •§ 20. Задачі пошуку даних. Цикл «доки»
- •§ 21. Застосування циклів
- •Контрольна робота № 4
- •Розділ 2. Складені структури даних
- •§ 22. Одновимірні масиви. Створення масивів
- •§ 23. Пошук даних в одновимірному масиві
- •1. Пошук даних у масиві за заданим критерієм.
- •5. Проект «На метеостанції». Застосування масивів і процедур користувача у vb.
- •§ 24. Впорядкування одновимірного масиву
- •§ 1. Поняття про інформаційне моделювання 2
- •4. Моделювання предметних областей за допомогою масивів.
- •§ 25. Двовимірні масиви. Створення масивів
- •§ 26*. Опрацювання двовимірних масивів
- •1. Елементи керування DataGridView (vb) та DataGrid (vba).
- •Контрольна робота № 5
- •§ 27. Опрацювання текстових даних
- •§ 28. Структури даних (записи)
- •§ 1. Поняття про інформаційне моделювання 2
- •§ 29. Файли даних прямого доступу
- •5. Vb. Команди для роботи з файлами даних прямого доступу.
- •§ 30. Застосування файлів даних послідовного доступу
- •§ 31. Графіка у vb
- •§ 32. Поняття про об’єктно-орієнтоване програмування
- •Розділ 3. Задачі
- •Складніші задачі*
- •Розділ 4. Vba у програмах пакету ms office
- •§ 33. Застосування vba у ms word
- •§ 34. Vba у програмі ms excell
- •§ 35. Задача про облік товарів на складі
- •§ 36. Розв’язування математичних задач
- •§ 37. Робота 3 базами даних
- •Список літератури
- •§ 1. Поняття про інформаційне моделювання 2
§ 37. Робота 3 базами даних
У цьому параграфі описано, як засобами VBA можна створити таблиці для бази даних, що опрацьовуватимуться програмою MS Access, і як таблиці, створені в MS Access, можна доопрацьовувати за допомогою VBA.
Постановка задачі. Нехай є база даних, що зберігається в таблиці з назвою «Таблиця_1», яка була створена програмою MS Access. Таблиця зберігається у файлі myfilel.mdb на диску d:. Потрібно отримати доступ до даних цього файлу засобами VBA, занести записи з файлу бази даних в оперативну пам’ять, опрацювати їх певним чином і занести результати в інший файл myfile2.mdb, який згодом може бути зчитаний і опрацьований програмою MS Access.
Нехай таблиця містить три поля з назвами «Номер», «Прізвище», «Бал», заповнені даними про групу студентів. У myfile2.mdb треба помістити таблицю з назвою «Таблиця_2» із записами про студентів, які претендують на стипендію, тобто мають рівно чи більше, ніж 71 бал. Записи в новій таблиці повинні складатися лише з двох полів: «Номер», «Прізвище».
Об’єктна модель DAO (Data Access Object). Модель DAO дає змогу працювати з файлами баз даних, створеними різними програмами (не тільки MS Access). Зауважимо, що для роботи з об’єктами DAO мають бути під’єднані бібліотеки об’єктів Microsoft Office Object Library і Microsoft DAO Object Library, що роблять командами Tools => References з головного меню VBA.
Ієрархія класів у DAO визначається ієрархією даних у теорії баз даних: база даних на логічному рівні складається з таблиць і запитів. Таблицям і запитам на фізичному рівні відповідають набори записів. Запис складається з полів. Поле — це найменший структурний елемент у базі даних (як клітинка — найменший структурний елемент в електронній таблиці). Це треба брати до уваги під час розв’язування задач, де одночасно використовуються електронні таблиці та бази даних і де дані з поля запису треба записувати в клітинку електронної таблиці і навпаки.
Розглянемо три класи об’єктів, які застосовують для роботи з базами даних: DataBase (база даних); RecordSet (набір записів бази даних); DAO.Field (поле).
Об’єкт класу DataBase спочатку описують, а потім створюють командою Set так:
Set <Назва об’єкта> = OpenDatabase(<адреса ресурсу>).
Наприклад,
Dim Mybaza As DataBase
Set Mybaza = OpenDatabase("d:\myfile2.mdb").
Об’єкти класу DataBase володіють методами Close (закрити), OpenRecordset (відкрити записи), NewPassword (змінити пароль) тощо. З іншими методами і властивостями об’єктів класу DataBase чи іншого класу можна ознайомитися за допомогою Object Browser (F2), набравши в коді назву об’єкта і крапку.
Об’єкт MyRecords класу RecordSet спочатку описують, а потім створюють так:
Dim MyRecords As RecordSet
Set MyRecords = Mybaza.OpenRecordset(<джерело даних>)
Джерелом даних може бути таблиця «Таблиця_1» з бази даних MS Access, запит «Запит_1», чи вираз SQL-запиту, наприклад, "SELECT ALL * FROM Таблиця_1";.
Об’єкт MyRecords дає змогу працювати з поточним записом. Переміщатися між записами, створювати нові та вилучати записи дають змогу, зокрема, такі методи цього об’єкта:
MoveFirst — перейти до першого запису;
MoveLast — перейти до останнього запису;
MoveNext — перейти до наступного запису;
Delete — вилучити запис;
AddNew — створити новий запис;
Update — занести новий запис у файл.
Компонентами класу RecordSet (об’єкта MyRecords) є об’єкти Fields(0), Fields(1),... — поля поточного запису, які нумеруються від нуля, а також низка функцій, зокрема, функція RecordCount (кількість записів) і функція EOF, яка визначає кінець набору записів (кінець файлу).
Об’єкти Fields(0), Fields(1), ... мають властивості Value (значення), Name (назва поля) та ін. Наприклад, значенням функції MyRecords.Field(0).Name є назва відповідного поля «Номер».
Нові таблиці є об’єктами класу DAO.TableDef.
3. Код проекту. Код складається з двох частин. У першій частині забезпечимо доступ до файлу бази даних і відкриємо доступ до записів першої таблиці. Записи складаються з трьох полів. Записів є п. Оголосимо три масиви, куди помістимо дані з трьох полів про всіх студентів. Для візуального контролю виведемо ці дані на екран командою Debug.Print.
У другій частині коду оголосимо намір створити і створимо нову таблицю, яка в програмі MS Access називатиметься «Таблиця_2». Оголосимо об’єкт класу «поле» і за його допомогою в новій таблиці створимо два поля з назвами «Номер» і «Прізвище» відповідних типів. Додамо нову таблицю у базу даних. Відкриємо доступ до записів нової таблиці. Аналізуємо масив, що містить бали студентів, і додаємо в нову таблицю лише ті відомості, які відповідають критерію пошуку (умові задачі).
Розгляньте код проекту, який створимо у деякому модулі.
Option Base 1
Sub LastCod()
Dim Mybaza As DataBase
Set Mybaza = 0penDatabase("d:\myfile1.mdb")
Dim MyRecords As RecordSet
Set MyRecords = Mybaza.OpenRecordset(“Таблиця_1”)
MyRecords. MoveFirst n = MyRecords.RecordCount
ReDim a(n) As Integer 'ReDim оголошує масиви,
ReDim b(n) As String 'розміри яких задані
ReDim c(n) As Integer 'параметром n
Dim і As Integer і = 1
While Not MyRecords.EOF
a(i) = MyRecords.Fields(0)
b(i) = MyRecords. Fields(1)
c(i) = MyRecords.Fields(2)
MyRecords.MoveNext
Debug.Print a(i), b(i), c(i)
і = і + 1
Wend
'Друга частина проекту
Dim Newtable As DAO.TableDef
Set Newtable = Mybaza.CreateTableDef(“Таблиця_2”)
Dim f1 As DAO.Field
Setf1 = newtable.CreateFieldf(“Hoмep”, dblnteger)
Newtable.Fields.Append f1
Set ft = Newtable.CreateField("Прізвище", dbText)
Newtable.Fields.Append f1
Mybaza.TableDefs.Append Newtable
Dim MyRecords2 As RecordSet
Set MyRecords2 = Mybaza.OpenRecordset("Таблиця_2")
For і = 1 To n
MyRecords2.AddNew
If c(i) >= 71 Then
MyRecords2.Fields(0) = a(i)
MyRecords2.Fields(1) = b(i)
MyRecords2.Update
End If
Next і
End Sub
Зауваження 1. Ознайомившись з мовою SQL, зокрема, з командою SELECT і її частиною WHERE, ви зможете виконувати пошук у базах даних швидким способом. Наприклад, доступ до потрібних даних у цій задачі відразу дає така команда:
Set MyRecords = Mybaza.OpenRecordset ("SELECT ALL Номер, Прізвище _
FROM Таблиця_1 WHERE Бал >= 71";)
Висновок. Ви навчились опрацьовувати і створювати таблиці бази даних програмним шляхом. Можете застосувати форму для введення даних спочатку у форму, а потім у файл бази даних у форматі програми MS Access чи іншої програми, які підтримують об’єктну модель DAO чи подібну до неї.
Вправи
Модифікуйте код, використавши для зберігання даних в оперативній пам’яті замість трьох масивів один масив записів.
Модифікуйте код, зважаючи на зауваження 1.
Проаналізуйте, як можна спростити код, якщо в MS Access заздалегідь створити порожню таблицю «Таблиця_2» потрібної структури (заповнити її треба буде програмним шляхом).
