Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекцій ЕКОНОМІЧНА ІНФОРМАТИКА.doc
Скачиваний:
26
Добавлен:
28.10.2018
Размер:
24 Mб
Скачать

3.18. Робота з об'єктами доступу до даних

Щоб працювати з даними в базі даних, потрібно спочатку виконати з'єднання із цією базою даних, тобто одержати на неї посилання. У моделі DAO це буде Database, а в моделі ADO – Connection. Коли посилання отримане, можна звертатися до сімейств і об'єктів цієї бази даних. Приклади з'єднання дані вище в розділі “Модели объектов доступа к данным DAO і ADO”.

Типи даних об'єктів визначаються посиланнями на об'єкти відповідних моделей, що зберігаються в бібліотеках. Найпоширенішими об'єктними типами, підтримувані Access VBA, є:

- об'єктні типи даних Access з бібліотеки Access 10.0 – Form, Report, Control – відповідно присвоюються об'єктам, формам, звітам і їхнім елементам керування;

- об'єктні типи даних DAO – Database, TableDef, Field, DAO.Recordset, QueryDef. Тип даних Database присвоюється об'єкту База данных, QueryDefзапити (вираз SQL), TableDefтаблиці, Dao.Recordsetнабору записів у таблиці;

- об'єктні типи даних ADO – Connection заміняє тип даних Database в DAO, Сommand - QueryDef, ADODB - DAO.Recordset.

Розглянемо приклади опису об'єктних змінних:

Dim FF As Form, Fam As Control, Bd As Database

Присвоювання значення об'єктній змінній

Оператор Dim тільки описує змінну. Для того, щоб змінна містила посилання на об'єкт, необхідно за допомогою оператора Set присвоїти цієї змінній посилання на об'єкт відповідного типу. Тип об'єктної змінної повинен відповідати об'єкту, їй присвоєному. Наприклад:

1) Set FF = Forms![Список студентов] - створює змінну FF для форми Список студентов;

2) Set Fam = Forms![Список студентов]!ФИО - створює змінну Fam в елементі керування форми Список студентов;

3) Set Bd = CurrentDB()присвоює змінній Bd значення поточної бази даних;

4) Set Rs = db.OpenRecordset("Продажи") - присвоює змінній Rs значення запису таблиці Продажи поточної бази даних;

5) Set Tabl = Bd.CreateTableDef(“Сотрудники”) – створює в поточній Bd таблицю з іменем Сотрудники й зберігає посилання на цей об'єкт у змінної Tabl;

  1. Set Fld = Tabl.CreateField(“ФИО”, dbText)– створює поле й присвоює посилання на нього об'єктній змінній Fld.

7) Set ім'я об'єктної змінної = Newстворюється новий екземпляр об'єкта.

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

Набори записів у таблицях

Після з'єднання з базою даних і відкриття таблиці створюється новий набір записів, і тепер основна робота, проводиться з об'єктом Recordset.

Існує три типи наборів записів:

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

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

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

Властивості об'єкта Recordset

BOF - повертає значення True, якщо позиція поточного запису перебуває перед першим записом.

Bookmark - установлює або повертає значення Variant, що ідентифікує поточний запис.

EOF - повертає значення True, якщо позиція поточного запису перебуває нижче останнього запису.

Filter - повертає або установлює критерій визначення запису, що включається в набір записів.

RecordCount – повертає кількість записів у наборі.

Fields.Countповертає кількість полів у таблиці.

Fields(i).Name повертає ім'я i-го поля в таблиці.

Sort - повертає або установлює порядок сортування в наборі записів динамічного й простого типів.

Методи об'єкта Recordset

AddNew - додає новий запис у набір табличних або динамічних записів.

Close - закриває набір даних.

Delete - видаляє поточний запис із набору табличних або динамічних записів.

Update - обновляє набір записів.

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

Move - переміщає покажчик поточного запису на певну кількість записів. Цей метод має наступний синтаксис:

Об'єкт.Move рядок

Об'єкт - об'єкт типу Recordset.

Рядок - змінна типу long integer, що визначає кількість записів, на які слід перемістити положення курсору. Для руху по набору записів у зворотному порядку використовується негативне значення параметра рядок.

MoveFirst, MoveLast, MoveNext, MovePrevious - переміщає поточний запис у першу, останню, наступну або попередню позицію поточного набору записів.

Робота з набором записів таблиці.

Перед написанням програм потрібно відкрити вікно текстового редактора VBA командами Модули Создать. У модулі зробити посилання на бібліотеки доступу до даних DAO і ADO. Для цього виконати команди Tools References і вибрати бібліотеки об'єктів так, як це показано на рис. 3.23.

Рис.3.23 - Вікно посилань для підключення бібліотек.

Приклад 1. Нехай є форма "Товары", створена на основі однойменної таблиці в поточній базі даних. Необхідно підрахувати cумарну вартість кави. Для цього у формі створюється елемент керування з ім'ям Стоимость_кофе й кнопка Расчет стоимости (рис.3.24), під якою потрібно написати програму.

Private Sub Кнопка17_Click()

Dim db As Database

Dim rs As DAO.Recordset

Set db = CurrentDb

Set rs = db.OpenRecordset("Товары")

With rs

.MoveFirst

Me![Стоимость_кофе] = 0

Do While .EOF = False

If .Fields("Марка") Like "Кава*" Then Me![“Стоимость_кофе”] = _

Me![“Стоимость_кофе”] + .Fields("Стоимость товара")

.MoveNext

Loop

End Wtth

End Sub

Рис. 3.24 - Форма “Товары”

Приклад 2. Знайти й вивести на екран номер групи з максимальною кількістю студентів і середнім балом у групі більше 4,7 у таблиці "Группа".

Private Sub Пошук_Номер_Групи()

Dim db As Database

Dim rs As DAO.Recordset, max As Single, n As Variant

Set db = CurrentDb

Set rs = db.OpenRecordset("ГРУППА")

With rs

.MoveFirst

max = .Fields(1)

.MoveNext

Do While .EOF = False

If .Fields(1) > max And .Fields(2) > 4.7 Then max = .Fields(1): n = .Bookmark

.MoveNext

Loop

.Bookmark = n

MsgBox "Кількість студентів - " & max & Chr(13) _

& "Номер групи - " & .Fields(0)

End With

End Sub

Приклад 3. Використовуючи бібліотеку ADO у вікні модуля створити процедуру для заповнення даними поле Среднее” таблиці Урожайність” (рис.3.25).

Рис.3.25 - Структура таблиці “Урожайність”

Public Sub Розрахунок_ADO()

Dim connection As New ADODB.connection 'Якщо база днных поточна, те

'цей рядок можна не писати

'Якщо базу даних потрібно відкрити на диску,

' те після цього рядка потрібно писати

'Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0";Data

' Sourse=шлях до файлу"

Dim rs As New ADODB.Recordset

Dim s As Double, i As Integer, n As Long

With rs

.Open "Урожайність", CurrentProject.connection, adOpenKeyset, _

adLockOptimistic

.MoveFirst

Do While .EOF = False

s = 0: n = 0

For i = 1 To .Fields.Count - 2

s = s + .Fields(i): n = n + 1

Next i

s = s / n

.Fields(5) = s

.MoveNext

Loop

End With

End Sub