- •О.С. Зеленський
- •Розділ 9. Структура створення додатків
- •9.1. Загальна структура додатків
- •9.2. Додатки без використання архітектури «Документ-вид»
- •9.2.1. Приклад додатку реєстрації wnd-класу вікна
- •9.2.2. Створення та видалення дочірніх вікон без використання архітектури «Документ-Вид»
- •9.2.3. Створення дочірніх вікон без використання архітектури «Документ-Вид» (переключення вікон з використанням функції ShowWindow)
- •9.3. Архітектура «Документ-Вид»
- •Idr_mainframe формат строкового ресурсу.
- •9.3.1. Приклад додатку з використанням архітектури «Документ-Вид»
- •9.3.2. Види у архітектурі «Документ-Вид»
- •9.3.3. Створення видів у архітектурі «Документ-Вид» (переключення видів з використанням функції ShowWindow)
- •9.3.4. Робота з документами та видами на прикладі додатку SingleTemplate
- •9.4. Додатки mdi, робота з шаблонами
- •9.4.1. Приклад додатку mdi з одним шаблоном
- •9.4.2. Приклад додатку mdi з декількома шаблонами
- •Контрольні питання
- •Розділ 10. Робота з базами даних з використанням об'єктів ado
- •10.1.1. Ініціалізація об'єктів com з використанням директиви #import
- •10.1.2. Підтримка класів сом
- •10.2. Об'єкт Connection
- •10.3. Об'єкт Command
- •10.4. Об'єкт Recordset
- •10.5. Об'єкт Field і колекція Fields
- •10.6. Об'єкт Error і колекція Errors
- •10.8. Коротка характеристика структури мови sql
- •10.9. Синтаксис оператора вибору Select
- •10.10. Приклад програмування об'єктів ado
- •10.11. Опис розробленого навчального пакету ado6 для роботи з базами даних access та MySql
- •Int tip_bd; // тип бд 1- ms access, 2- MySql, 3 - xml
- •Void Connect_Baza(cString str);
- •Void ErrMessage(_com_error &ce);
- •If(pConn.CreateInstance("adodb.Connection"))
- •If(pRecordset.CreateInstance("adodb.RecordSet"))
- •Void cAdo6Doc::ErrMessage(_com_error &ce)
- •Void cAdo6Doc::OnMsaccess()
- •Void cAdo6Doc::OnMysql()
- •Void cAdo6Doc::OnXmlRead()
- •Void cAdo6Doc::Connect_Baza(cString str)
- •Virtual void DoDataExchange(cDataExchange* pDx);
- •Void cAdo6Dlg::DoDataExchange(cDataExchange* pDx)
- •Void cAdo6Dlg::Struct_MySql()
- •Void cAdo6Dlg::OnSelchangeListBaza()
- •Void cAdo6Dlg::OnVibor_bd()
- •Void cAdo6Dlg::AccessOpen()
- •Void cAdo6Dlg::xmlOpen()
- •Void cAdo6Dlg::Structura_bd()
- •Void cAdo6Dlg::OnSelchangeListTab()
- •Void cAdo6Dlg::show(int kod, int kod_bd)
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cAdo6Dlg::OnClose()
- •10.11.2. Формування списку бд (MySql), відкриття бази даних (ms access), відкриття xml-файлу, формування списку таблиць (MySql і ms access) та полів (MySql, ms access, xml)
- •Void cAdo6Dlg::OnSelchangeListTab()
- •1. Обрану таблицю необхідно брати в зворотні лапки "`", щоб виключити помилку в тому випадку, якщо в імені таблиці будуть зустрічатися пробіли.
- •10.11.3. Робота з sql-запитами
- •Void cAdo6Dlg::OnZapros_Select()
- •If (str_query.Mid(0,6).Compare("select"))
- •If(!baza.Left(3).Compare("otl") &&
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cado6Dlg::OnZapros_Make()
- •Vr_zap.Format(" Запрос выполнен за %f сек ",conec - nach);
- •10.11.4. Видалення, сортування, пошук, фільтрація, оновлення набору записів
- •Void cado6Dlg::OnZapis_Delete()
- •Void cado6Dlg::OnCheck_Sort()
- •Void cado6Dlg::OnFind()
- •0L,adSearchForward,bb);
- •Void cado6Dlg::OnFilter()
- •Void cado6Dlg::OnVozvrat()
- •10.11.5. Переходи по записах
- •Void cado6Dlg::OnButtonFirst()
- •Void cado6Dlg::OnButtonLast()
- •Void cado6Dlg::OnButtonLeft()
- •Void cado6Dlg::OnButtonRight()
- •Void cado6Dlg::OnButtonRecno()
- •Void cado6Dlg::OnButtonPgup()
- •Void cado6Dlg::OnButtonPgdn()
- •Void cado6Dlg::OnButtonBookmark()
- •10.11.6. Запис даних до xml-файлу
- •Void cAdo6Dlg::OnButtonSave()
- •10.11.7. Кнопки, призначені тільки для роботи з otl_tab
- •Void cado6Dlg::OnZapis_Add1()
- •Void cado6Dlg::OnZapis_Add2()
- •Void cado6Dlg::OnZapis_Update1()
- •Void cado6Dlg::OnZapis_Update2()
- •Void cado6Dlg::OnFormir_bd()
- •Void cAdo6Dlg::OnValues_Fields()
- •10.12. Використання у якості джерела даних електронної таблиці Excel
- •Контрольні питання
- •Завдання
- •Розділ 11. Програмування для інтернет
- •11.1. Створення броузера
- •11.3. Використання протоколу http
- •If ((pInternetSession)
- •11.4. Використання протоколу ftp
- •Контрольні питання
- •Розділ 12. Створення елементів activex
- •12.1. Створення елементів ActiveX
- •Invalidate();
- •12.2. Тестування елемента ActiveX
- •12.4. Створення елемента ActiveX на базі стандартних елементів
- •12.5. Відображення елементів ActiveX
- •Контрольні питання
- •Розділ 13. Налагодження програм
- •Int data[5];
- •Invalidate();
- •13.3. Установка точки переривання
- •13.2. Покрокове виконання програми
- •13.4. Перевірка значень змінних під час виконання програми
- •Контрольні питання
- •Список літератури
- •Додатки
Контрольні питання
1. Яке призначення функцій AfxRegisterClass та AfxRegisterWndClass?
2. Яке призначення структури WNDCLASS?
3. Призначення константи AFX_IDW_PANE_FIRST при створенні дочірнього вікна.
4. Що функція SetDlgCtrlID дозволяє робити з дочірніми вікнами?
5. Для чого використовується строковий ресурс IDR_MAINFRAME?
6. Яке призначення функції GetActiveView?
7. Яке призначення функції GetActiveDocument?
8. Що роблять функції із класу документа AddView та RemoveView?
9. Призначення функції SetActiveView.
10. Яке призначення функцій GetFirstDocTemplatePosition та GetNextDocTemplate?
Розділ 10. Робота з базами даних з використанням об'єктів ado
10.1. Використання об'єктів ADO в Visual C++
В основі ADO лежить інтерфейс Common Object Model (COM). Це дозволяє використовувати об'єкти ADO в широкому спектрі різних програмних середовищ, включаючи Visual Basic, VBScript, а також Visual C++.
ADO містить тільки опис різних використовуваних об'єктів і не забезпечує їх спеціальною реалізацією. Проте компанія Microsoft включила реалізацію ADO для доступу до будь-яких наявних джерел даних OLE DB. Реалізація (провайдер) ADO для OLE DB отримала назву ADODB. Крім того, ADODB може забезпечити доступ до будь-яких наявних джерел даних ODBC. Реалізація (провайдер) ADO для ODBC отримала назву MSDASQL. Обидві реалізації (підключення до джерел даних) будуть розглянуті в даному розділі.
У цьому розділі розглядаються основні принципи використання ADO в додатках C++, а також специфіка виконання операцій з базами даних.
10.1.1. Ініціалізація об'єктів com з використанням директиви #import
Однією з найбільш важливих особливостей є директива препроцесора #import, яка при підключенні автоматично створює два файли msado15.tlh, msado15.tli, які генеруються у вихідному каталозі проекту і відповідно містять опис (хайдер) і реалізацію (бібліотеку) класів COM.
Директиву #import можна включати в файл заголовка stdafx.h або в поточний файл .cpp, де використовується база даних. Приклад підключення директиви #import і хайдера msado15.tlh:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "ADO_EOF")
#include "msado15.tlh"
using namespace ADODB;
Директива #import створює класи із бібліотеки типів MSADO15.DLL, яка встановлюється разом з ADO. Шлях до бібліотеки може бути різним, залежно від способу установки. Тут необхідний оператор rename, оскільки бібліотека типів ADO перевизначає константу EOF, визначену у файлах stdio.h, ios.h і stream.h, включених до afxwin.h. Таким чином, скрізь, де документація ADO вказує на необхідність використання EOF, слід застосовувати ADO_EOF. Потім підключається заголовок "msado15.tlh" і вказується область його використання ADODB.
Директиву #import слід застосувати тільки один раз (у даному разі, перші два рядки), щоб у поточному каталозі отримати файли msado15.tlh і msado15.tli. У подальшому для роботи з ADO, в тому числі і при роботі з іншими додатками достатньо скопіювати ці файли у поточну або в окрему папку. Для подальшої роботи з ADO необхідно підключити тільки файл msado15.tlh (3-й і 4-й рядки) з виділенням відповідної області ADODB.
Коли використовувалася директива #import, у файлі msado15.tlh автоматично формувався рядок підключення бібліотеки msado15.tli:
#include "c:\vccp\ado\msado15.tli"
Якщо обидва файли знаходяться в поточній папці, то заголовочний файл підключається, так:
#include "msado15.tlh"
а в кінці файлу msado15.tlh слід зазначити рядок:
#include "msado15.tli"
У тому випадку, якщо обидва файли знаходяться в окремій папці, скажімо d:\ado1, тоді заголовок підключається, як:
#include "d:\ado1\msado15.tlh", а в кінці файлу msado15.tlh слід зазначити рядок:
#include "d:\ado1\msado15.tli"