Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 2880 Лабораторна робота №7 на тему Робота з об'єктами DAO та Створення модулів, Бази даних та інформаційні системи, ЗНТУ

Лабораторна робота №7 на тему Робота з об'єктами DAO та Створення модулів, Бази даних та інформаційні системи, ЗНТУ

« Назад

Лабораторна робота №7 на тему Робота з об'єктами DAO та Створення модулів

Мета роботи: навчитися створювати коди програм на VBA, які добавляють та видаляють записи, встановлюють фільтр, відшукують записи, що задовольняють певній умові.

2.1 Деякі теоретичні відомості

DAO (DataAccessObjects) – об’єкти доступу до даних викори­стовуються для керування базами даних з усіх додатків, які підтриму­ють VBA. Для цього в редакторі VBA в меню Tools – References треба підключити бібліотеку об’єктів Microsoft DAO 3.6 Object Library.

Для роботи з базою даних можна описувати змінні як об’єкти доступу до даних Database, Recordset, Querydef  та ін. Як і для будь-якої об'єктної змінної її треба спочатку оголосити, а тільки потім вста­новити посилання на об'єкт за допомогою оператора Set. Наприклад, така послідовність команд описує об’єктні змінні dbMyDB та rsRec, а метод OpenRecordsetстворює в активній базі даних об’єкт Recordset – динамічний набір записів на основі даних таблиці tvidom.

Dim dbMyDB As Database , rsRec As Recordset

Set dbMyDB = CurrentDb

Set rsRec = dbMyDB . OpenRecordset ( "tvidom", dbOpenDynaset)

Розглянемо деякі властивості та методи об'єкта Recordset.

  • Updateзберігає зміни, зроблені в об'єкті Recordset за допомогою методів AddNew та Edit.

  • Editкопіює до буферу поточний запис об'єкта Recordset та ро­бить можливим його змінення. Після завершення змін треба викли­кати метод Update для збереження запису в об'єкті Recordset. Якщо ме­тод Update не викликати, то внесені зміни будуть скасова­ні без попередження і до бази даних не запишуться.

  • AddNew створює і добавляє новий запис. Можна записати до нього якісь дані, проте поточний запис не зміниться. Щоб перейти на новий запис, можна використати властивість Bookmark, а саме надати їй значення LastModified.

В динамічному наборі записів новий запис завжди добавляється в кінець набору, тому перейти на нього можна і за допомогою методу MoveLast, і за допомогою закладки Bookmark. В об’єкті Recordset типа таблиці з активним індексом місце нового запису визначається поряд­ком сортування.

  • Bookmark – визначає закладку, яка запам’ятовує номер поточного запису в об'єкті Recordset, а потім використовується для повер­нення в об'єкті Recordset на той самий запис.

  • MoveFirst, MovePrevious, MoveNext, MoveLast – методироблять поточним перший, попередній, наступний або останній записи об'єкта Recordset відповідно.

Задача 2.1. Створити процедуру, яка добавляє новий відділ до таблиці tvidom.

Sub AddRecord ( )

Dim r As Recordset

Set r = CurrentDb . OpenRecordset ( " tviddily " , dbOpenDynaset)

With r

    . AddNew

    ! pidrozdil = InputBox("Введіть відділ")

    ! tel = InputBox("Введіть телефон")

    ! shef = InputBox("Введіть прізвище начальника")

    . Update

End With

End Sub

  • FindFirst, FindPrevious, FindNext,FindLast – використовуються для пошуку записів, які задовольняють вказаним умовам. Ці мето­ди роблять активними перший, попередній, наступний або остан­ній запис, для яких виконуються умови, відповідно.

Умови для пошуку або фільтру можна записувати власноруч або використовувати метод BuildCriteria. Щоб перевірити, чи знайдено потрібний запис, використовують властивість NoMatch.

  • NoMatch– властивість, яка має значення True, якщо потрібний запис не знайдений, і False, якщо знайдений.

  • Filter– задає або повертає значення фільтру. Правила запису критерію для фільтру такі ж самі, як і для команд пошуку.

  • BuildCriteria метод утворює рядок символів, який має вигляд критерію для пошуку або фільтру. Синтаксис:

BuildCriteria(“поле ”, тип_даних_поля , текстовий_вираз)

поле – це ім’я поля, в якому здійснюється пошук, воно запису­ється в лапках (це може бути й функція або вираз рядкового типу);

тип_даних_поля – це внутрішня константа Access, VBA, DAO або ADO; використовують одну з таких констант:

dbBoolean , dbByte , dbChar , dbCurrency , dbDate , dbInteger , dbLong , dbMemo , dbNumeric , dbSingle , dbText , dbTime

текстовий_вираз – це змінна, яка містить зразок для пошуку або сам вираз для пошуку у вигляді текстової константи.

Задача 2.2. Знайти в таблиці tvidom прізвище людини, яка наро­дилася до 1970 року (поле dtr – дата народження).

Sub Пошук ( )

Dim r As Recordset , strCriteria As String , fam As String

Set r = CurrentDb . OpenRecordset ( " tvidom" , dbOpenDynaset)

strCriteria = BuildCriteria ( "Year (dtr) " , dbInteger , "<1970" )

r . FindFirst strCriteria

If  r . NoMatch( ) Then

    MsgBox " Такої людини немає! "

Else

    fam = r ! fio

    MsgBox  fam

End If

EndSub

Для продовження пошуку треба використати метод FindNext.

  • Closeзакриває відкритий об'єкт доступу до даних.

  • Deleteвилучає поточний запис в об'єкті Recordset.

  • RecordCount– кількість записів, до яких був здійснений доступ в об'єкті Recordset. Властивість не показує скільки записів міститься в об'єкті Recordset доки не буде виконане звернення до всіх записів. Після звернення до останнього запису з набору записів значення властивості стає рівним повному числу не видалених записів в об'єкті Recordset.

Задача 2.3. Підрахувати  кількість людей в таблиці tvidom, які народилися раніше 1970 року. Використаємо інший критерій пошуку.

Sub кількість( )

Dim r As Recordset , strCriteria As String , n As Integer

Set r = CurrentDb . OpenRecordset ( " tvidom" , dbOpenDynaset )

strCriteria = BuildCriteria( "dtr" , dbDate , "<1–1–70")

r . Filter = strCriteria

Set r = r . OpenRecordset

If r . RecordCount > 0 Then

r . MoveLast

n = r . RecordCount

MsgBox " Таких людей – " & Str(n)

Else

    MsgBox " Таких людей немає! "

End If

EndSub

Задача 2.4. Підрахувати  кількість чоловіків та жінок в таблиці tvidom. Використаємо класичний алгоритм підрахунку кількості.

Sub Стать()

Dim r As Recordset ,  m As Integer, f As Integer

Set r = CurrentDb . OpenRecordset (" tvidom", dbOpenDynaset )

m = 0: f = 0

r . MoveFirst

Do Until  r .EOF

If   r ! pol = "чоловік" Then

    m = m + 1     ' m - кількість чоловіків

Else

    f = f + 1      ' f - кількість жінок

End If

r . MoveNext

Loop

    MsgBox "Чоловіків – " & Str(m) & Chr(13) & "Жінок – " & Str(f)

End Sub

2.2 Контрольні питання

1) Створення об'єкта Recordset, типи об'єкта.

2) Метод OpenRecordset  і його параметри.

3) Методи об'єкта Recordset і їхнє призначення.

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

5) Метод BuildCriteria та його використання.

6) Використання циклів для розрахунків в таблицях.

2.3 Індивідуальні завдання

Написати програми, які відчиняють таблиці як набори записів і виконують такі дії:

1) добавляють новий запис до головної таблиці та заповнюють його даними;

2) відшукують потрібний запис і змінюють дані в ньому;

3) встановлюють фільтр та підраховують скільки записів задо­вольняють умовам фільтру;

4) вилучають записи з підпорядкованої таблиці, які задовольня­ють певній умові.

З повагою ІЦ "KURSOVIKS"!