Робота з базами даних за допомогою DAO
Все більше програм використовує для зберігання даних бази даних. Один з інструментів для роботи з базами даних - бібліотека DAO (Data Access Objects). Про неї і піде мова в цій статті.
Для початку потрібно підключити цю бібліотеку. Для цього в меню Project | References відзначте пункт "Microsoft DAO 3.6 Objects Library". У складі Visual Basic 6.0 поставляється бібліотека версії 3.6. Якщо у Вас більш рання версія - відзначте її, особливих відмінностей немає.
Примітка: У цій статті буде розглянута робота з базами MS Access (* .mdb). Бувають і інші типи баз даних, наприклад FoxPro.
Як здійснити вибірку даних? Спочатку оголошуємо змінні.
Відкриваємо базу даних. Для цього викликаємо метод OpenDatabase, і в якості параметра передаємо повний шлях і ім'я файлу бази даних. Зверніть увагу, що db - це об'єкт і тому пишемо ключове слово Set.
Формуємо рядок SQL запиту. Припустимо, нам потрібно отримати всі поля таблиці Orders.
Тепер відкриваємо рекордсет. Для цього викликаємо метод OpenRecordset об'єкта db з першим параметром - SQL запитом. У цього об'єкта є ще 3 необов'язкові параметри.
Параметр type визначає тип відкриття рекордсета. Може приймати значення однієї з цих констант:
Редагований об'єкт. Може швидко знаходити і повертати записи при використанні індексованих таблиць.
Оновлюваний. Ефективний, оскільки представляє набір посилань на дані в основному запиті (а не на реальні дані). Може повертати записи з декількох таблиць завдяки використанню об'єднання, навіть коли ці таблиці зв'язуються з декількох баз даних. Такі записи в багатьох випадках Оновлюваність.
Можуть оброблятися швидше, ніж об'єкти Dynaset і Table, особливо для невеликих наборів записів. Може повертати записи з декількох таблиць завдяки використанню об'єднання. Такі записів у багатьох випадках Оновлюваність.
Працює швидше, ніж об'єкт Snapshot. Може повертати записи з декількох таблиць завдяки використанню об'єднанню.
Оновлюваний. Може повертати записи з декількох таблиць завдяки використанню об'єднання.
Значення за замовчуванням для параметра type - dbOpenTable.
Параметр options визначає деякі характеристики відкривається рекордсета. Може приймати значення, що складається з комбінації 11 констант.
Параметр LockEdit (в DAO 3.5 цей параметр називається lockedits) визначає тип блокування рекордсета. Може приймати значення однієї з 5 констант:
Використовується для переміщення до попереднього запису.
Також знадобляться властивості BOF і EOF.
BOF повертає True, якщо поточна запис знаходиться перед першим записом в об'єкті типу Recordset.
EOF повертає True, якщо поточна запис знаходиться після останнього запису в об'єкті типу Recordset.
Поточний запис знаходиться в класі Fields.
Замість Debug.Print природно можна поставити і оператор присвоювання (=)
Закриваємо рекордсет і базу даних
В кінці процедури для того, щоб звільнити пам'ять пишемо
Додавання і зміна записів
Для додавання і зміни записів використовується схожа технологія.
При додаванні запису відкриваємо рекордсет.
Для додавання запису використовується метод AddNew об'єкта типу Recordset.
Тепер запис додана, і ми заповнюємо всі поля для даного запису.
Закриваємо рекордсет і базу даних і звільняємо пам'ять.
Код для зміни запису дуже схожий на попередній код. Для зміни запису використовується метод Edit. Також потрібно змінити SQL запит і зробити його приблизно таким:
Передбачається наявність поля ID, тип якого числовий і його значення унікально для кожного запису. В даному випадку ми будемо змінювати запис значення поля ID якої дорівнює 23.
Видалення запису можна зробити двома шляхами. Перший шлях - виконання SQL запиту з командою DELETE. Ідентифікувати запис будемо по полю ID. Передбачається, що значення поля ID унікальні для кожного запису. Видаляємо запис, ID якої дорівнює 5.
Рекордсет відкривати не потрібно, так як нам не треба отримувати дані з бази. Для виконання запиту ми використовуємо метод Execute об'єкта типу Database. Він має 2 параметра. Перший параметр Query - рядок виконуваного запиту. Другий необов'язковий параметр options - константа або комбінація констант, що відображає характеристики виконуваного запиту.
Другий спосіб видалення запису полягає в використанні методу Delete об'єкта типу Recordset. Цей метод видаляє поточний запис. Він не має параметрів.
Кількість записів і номер поточного запису
Для визначення кількості записів в рекордсете використовується властивість RecordCount об'єкта типу Recordset. Але є невелика неув'язочка. Якщо рекордсет типу Dynaset, Snapshot або ForwardOnly, то властивість RecordCount покаже число записів, тільки при досягненні останнього запису. В цьому випадку потрібно відразу переміститися до кінця рекордсета.
Номер поточного запису визначається за допомогою властивості AbsolutePosition. Відлік починається з нуля. Тобто якщо поточна запис - перша, то AbsolutePosistion покаже 0. Якщо поточна запис знаходиться до першої або після останньої, то властивість AbsolutePosition покаже -1.
Властивість PercentPosition повертає процентне відношення номера поточного запису від кількості записів.
Приклад роботи з DAO можна взяти тут.