Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Void CDBView::DoFilter(CString col)

Поиск

{

CFiIterDlg dig;

int result = dlg.DoModal():

if (result == IDOK)

CString str = col + " = " + dlg.m_fiIterValue;

m_pSet->Close();

m_pSet->m_strFiIter = str;

m_pSet->Open();

int recCount = m_pSet->GetRecordCount();

if (recCount == 0) {

MessageBox("No matching records.");

m_pSet->Close();

m_pSet->m_strFiIter = "";

m_pSet->Open();

UpdateData(FALSE);

}

}

Ми додали до створюваномудодатком функції сортування і фільтрації записів бази даних. Відтранслює додаток і запустіть його на виконання. На екрані з'явиться головне вікно програми, яке виглядає так само, як і раніше. Однак тепер можна сортувати записи по будь-якому полю, для чого достатньо просто вибрати ім'я поля в меню Sort. Крім того, з'явилася можливість задати фільтрацію відображуваних записів, вибравши ім'я необхідного поля в меню Filter, а потім ввівши значення фільтра в розкрився діалоговому вікні Filter. Визначити, як записи відсортовані або який для них заданий фільтр, ви зможете, переміщаючись від одного запису до іншого. Спробуйте, наприклад, відсортувати записи по відділах або по зарплаті, а потім встановіть фільтрацію по будь-якому з відділів, який ви бачили, переглядаючи базу.

Аналіз функції OnSortFirstName (). Всі функції сортування мають однакову структуру. Вони закривають вибірку даних, встановлюють свої переменниe-члени m_strSort у вибірці і знову відкривають вибірку даних, а потім викликають функцію UpdateData () для оновлення вікна подання даними з знову отриманої відсортованої вибірки даних. Однак у тексті функцій сортування ви не знайдете жодного виклику функції, в назві якої було б слово Sort. Коли ж у такому випадку виконується сортування?

Вона виконується, коли вибірка даних відкривається наново. Об'єкт класу CRecordSet (як і об'єкт будь-якого іншого класу, похідного від CRecordSet, наприклад об'єкт класу CDBSet в цій програмі) використовує спеціальну строкову змінну m_strSort для визначення способу упорядкування записів. Об'єкт аналізує цю строкову змінну при формуванні вибірки даних і відповідно впорядковує вибрані з бази запису.

Аналіз функції DoFilter (). Всякий раз, коли користувач вибирає команду з меню Filter, керуюча програма викликає відповідний цій команді метод: OnFi lterDept (), OnFilterUserlD (), OnFiIterMiddleName () або OnFilterEMail (). Кожна з цих функцій нічого не робить, окрім виклику методу DoFilter (), передаючи йому як параметр строкову змінну, визначальну поле, по якому потрібно виконати фільтрацію.

Функція DoFilter () незалежно від того, яка саме команда була обрана в меню, завжди відображає одне і те ж діалогове вікно. Якщо значення result не дорівнює IDOK, значить, користувач виконав щиголь на кнопці Cancel і весь оператор IF пропускається, а функції DoFilter () залишається тільки закінчити свою роботу.

Усередині конструкції IF насамперед створюється строкою змінна, яка буде використовуватися для фільтрації записів бази даних. Строкова мінлива застосовується для виконання фільтрації записів так само, як це відбувається при сортуванні. В даному випадку строкою змінна називається m_strFiIter. Рядок, яка використовується для фільтрації записів бази даних, повинна мати наступний формат:

ИдентификаторПоля = Значение

Тут ІдентіфікаторПоля є аргументом типу CString функції DoFiIter (), а Значення вводиться користувачем в діалоговому вікні. Наприклад, якщо користувач вибере команду фільтрації по полю відділу і введе в діалоговому вікні значення фільтра hardware, функція DoFiIteг () повинна буде створити рядок.

Сформувавши вказаний рядок, програма буде готова до виконання фільтрації записів. Для цього, як і у випадку сортування, вибірка даних повинна бути закрита, а потім, при її повторному відкритті, функція DoFilter () виконає формування вибірки даних з урахуванням необхідної фільтрації. Що відбудеться, якщо в результаті роботи встановленого фільтра не буде вибрано жодного запису? Хороше питання. Функція DoFilter () виявляє подібну ситуацію, підраховуючи кількість записів в створюваній вибірці і порівнюючи потім це число з нулем. Якщо набір записів порожній, програма виводить вікно повідомлення, що інформує користувача про ситуації, що склалася. Потім програма закриває вибірку, присвоює рядковий змінної фільтра порожнє значення та знову відкриває вибірку записів. Таким чином відновлюється вибірка, що включає всі записи таблиці User.

І, нарешті, незалежно від того, чи вдалося виявити записи, що відповідають заданому фільтру, або ж вибірка даних включає всю базу даних, програма повинна заново відобразити дані на екрані. Для цього викликається функція UpdateData ().

 

Стандарт ODBC і DAO

 

Вибір між класами ODBC і DAO. MSVC + + надає набір класів для доступу до БД через ODBC і DAO. У багатьох відносинах DAO є для класів ODBC суперкласом, включаючи більшість функціональних можливостей ODBC і додаючи при цьому безліч своїх власних. На жаль, хоча класи DAO і можуть працювати з джерелами даних ODBC, для яких існують ODBC-драйвери, таке їхнє застосування не особливо ефективно. З цієї причини DAO-класи більше підходять для створення програмних додатків, що оперують файлами баз даних формату. Mdb фірми Microsoft, створюваних додатком Microsoft Access. Файли інших форматів, з якими можна працювати безпосередньо, використовуючи класи DAO, створюються додатками FoxPro і Excel.

Класи інтерфейсу DAO, які використовують додаток Microsoft Jet Database Engine, настільки схожі на класи інтерфейсу ODBC, що в деяких випадках можна шляхом простої зміни назви класу в тексті програми замінити інтерфейс доступу з ODBC на DAO: CDatabase змінюється на CDaoDatabase, CRecordset - на CDaoRecordset, a CRecordView - на CDaoRecordView. Однак між класами ODBC і DAO є істотна відмінність в тому, як реалізуються системні бібліотеки. ODBC-класи реалізовані як набір модулів DLL, в той час як класи DAO реалізовані у вигляді об'єктів OLE. Використання об'єктів OLE робить систему DAO кілька більш сучасною в порівнянні з ODBC, принаймні, у відношенні архітектури.

Хоча система DAO реалізована у вигляді об'єктів OLE, вам не доведеться турбуватися про роботу з подібними об'єктами безпосередньо. Вхідні в MFC класи DAO беруть обробку всіх деталей управління на себе, надаючи дані і методи, що забезпечують взаємодію з об'єктами OLE. Клас

CDaoWorkspace забезпечує за допомогою статичних методів прямий доступ до об'єктів ядра бази даних DAO. Хоча MFC бере керування робочою областю на себе, можна використовувати її дані і методи для безпосередньої ініціалізації зв'язку з базою даних.

Ще одна відмінність полягає в тому, що класи DAO надають більш потужний набір функцій, які можна використовувати для маніпулювання базою даних. Ці більш потужні методи дозволяють виконувати з базами даних складні операції, використовуючи невеликий обсяг вихідного тексту на C + + або SQL-вирази, написані безпосередньо розробником:

• обидві системи (ODBC і DAO) можуть працювати з ODBC-джерелами даних, але в цьому випадку DAO менш ефективна, так як орієнтована для роботи з базами даних формату. mdb;

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

• обидві системи - і ODBC і DAO - використовують для з'єднання з базою даних, до якої здійснюється доступ, об'єкти класів баз даних MFC. В ODBC такий клас бази даних називається CDatabase, а в системі DAO - CDaoDatabase. Хоча ці класи і мають різні назви, вони містять безліч схожих членів;

• обидві системи, ODBC і DAO, використовують об'єкти класу вибірки даних для зберігання записів, вибраних на поточний момент. В ODBC такий клас вибірки даних називається CRecordset, а в системі DAO - CDaoRecordset. DAO-клас вибірки даних містить практично всі члени класу ODBC. Крім того, DAO-клас має великий набір додаткових методів;

• системи ODBC і DAO використовують схожі методики перегляду вмісту джерела даних, а саме: в обох системах додаток повинен створити об'єкт бази даних, об'єкт вибірки даних, а потім викликати методи відповідного класу для маніпулювання базою даних.

Відмінності між системами ODBC і DAO полягають у наступному:

• хоча вхідні в MFC класи ODBC і DAO схожі (іноді навіть дуже), деякі аналогічні методи мають різні імена. Крім того, класи DAO включають багато методів, яким немає аналогів в класах ODBC;

• в системі ODBC для визначення опцій, які можуть використовуватися при відкритті вибірки даних, використовуються макроси і перерахування, тоді як в DAO для цих цілей визначено константи;

• велика кількість існуючих ODBC-драйверів робить систему ODBC придатної для роботи з безліччю файлів баз даних різних форматів, в той час як система DAO більше підходить для додатків, що працюють тільки з файлами формату. mdb;

• система ODBC реалізована у вигляді набору DLL-модулів, а DAO реалізована як набір об'єктів OLE;

• в ODBC об'єкт класу CDatabase безпосередньо взаємодіє з джерелом даних. DAO-об'єкт класу CDaoWorkspace займає проміжне положення між об'єктами класів CDaoRecordset і CDaoDatabase, що дає можливість робітничому середовищі взаємодіяти з багатьма об'єктами класу баз даних.

OLE DB - це сукупність інтерфейсів OLE, які спрощують доступ до даних, збереженим додатками, які не є СУБД, наприклад, що зберігаються в поштових скриньках електронної пошти або лінійних файлах.

Додаток, що використовує OLE DB, може інтегрувати інформацію з таких СУБД, як Oracle, SQL Server і Access, з інформацією з систем, які не є СУБД, але використовують можливості OLE.

Для використання цього потужного інструменту ви повинні впевнено відчувати себе при роботі з інтерфейсами OLE. Якщо вам раніше доводилося створювати додатки OLE (ActiveX) тільки за допомогою MFC і майстри App-Wizard, вас може шокувати знайомство з тим, що Microsoft вважає "спрощеним". Ви зустрінетеся з безліччю викликів функції Querylnterface () і безліччю змінних з іменами на зразок pIColslnfo і rgCol Info. Все ж, розібравшись у всіх інтерфейсах і всіх установках, ви зможете викликати таку функцію, як GetData (), і отримати інформацію з програми, яка не є СУБД, як ніби це база даних. У результаті виходить істотний виграш у часі.

 

КОНТРОЛЬНІ ЗАПИТАННЯ

 

1. Наведіть основні етапи створення екранної форми для відображення вмісту БД?

2. Як забезпечити в програмі операції видалення, редагування, додавання записів в БД?

3. Як здійснити операції сортування і фільтрації записів з БД?

4. Що ви знаєте про стандарт ODBC і DAO?


 

ПРИЛОЖЕНИЕ А

 



Поделиться:


Последнее изменение этой страницы: 2016-12-12; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.182.249 (0.006 с.)