- •О.С. Зеленський
- •Розділ 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. Перевірка значень змінних під час виконання програми
- •Контрольні питання
- •Список літератури
- •Додатки
Void cAdo6Doc::OnMsaccess()
{
tip_bd = 1;
CAdo6Dlg dlg;
dlg.Doc = this;
dlg.DoModal();
}
Void cAdo6Doc::OnMysql()
{
if(pConn==0)return;
CString str_con;
str_con = "Provider=MSDASQL; DRIVER=MySQL ODBC 3.51 Driver; UID=root; SERVER=localhost";
::MessageBox(0,str_con,"Начальная строка подключения",
MB_ICONINFORMATION);
try
{
//Виклик функції підключення
Connect_Baza(str_con);
}
catch(_com_error &ce)
{
ErrMessage(ce);
return;
}
::MessageBox(0,pConn->GetConnectionString(),
"Полная строка подключения",MB_ICONINFORMATION);
tip_bd = 2;
CAdo6Dlg dlg;
dlg.Doc = this;
dlg.DoModal();
}
Void cAdo6Doc::OnXmlRead()
{
if(pConn==0)return;
CString str_con;
str_con = "Provider = MSPersist";
::MessageBox(0,str_con,"Начальная строка подключения",MB_ICONINFORMATION);
try
{
//Вызов функции подключения
Connect_Baza(str_con);
}
catch(_com_error &ce)
{
ErrMessage(ce);
return;
}
::MessageBox(0,pConn->GetConnectionString (),"Полная строка подключения",MB_ICONINFORMATION);
tip_bd = 3;
CAdo6Dlg dlg;
dlg.Doc = this;
dlg.DoModal();
}
//Функція підключення Connection (MySQL и ACCESS)
//Вхід str – рядок підключення
Void cAdo6Doc::Connect_Baza(cString str)
{
if(pRecordset->GetState()) pRecordset->Close();
if(pConn->GetState())pConn->Close();
pConn->Open((_bstr_t)str,"","",0);
// 1-й параметр - рядок підключення
// 2-й параметр – ім’я користувача (UserID)
// 3-й параметр - пароль користувача (Password)
// 4-й параметр - опція підключення у синхроному(0) або асинхроному режимі
}
У даному прикладі не використовуються можливості серіалізації, реалізовані в класі документа CADO6Doc. У зв'язку з цим доцільно видалити ресурси, пов'язані з сериалізацією даних, а саме: підменю <File> в ресурсі меню і кнопки відкриття та збереження даних в панелі інструментів (ресурс Toolbar).
Для роботи з цими об'єктами ADO, а також з іншими COM-об'єктами необхідно підключити відповідні бібліотеки. Робиться це в конструкторі класу документа за допомогою функції CoInitialize (NULL). В кінці роботи програми дані бібліотеки необхідно вивантажити за допомогою функції CoUninitialize(). Це зроблено у деструктор класу.
Крім того, в конструкторі класу обнуляються вказівки на об'єкти Connection і Recordset, а також змінним baza і table присвоюються порожні значення рядка "".
У конструкторі класу відбувається створення об’єктів pConn та pRecordset за допомогою функції CreateInstance. Крім того, за допомогою властивостей ConnectionTimeout і CommandTimeout об’єкта Connection встановлюється відповідно, максимальний час з'єднання і максимальний час виконання команди в мілісекундах. У даному фрагменті вказується величина 15000, що відповідає 15 секундам. Потім встановлюється режим відкриття (властивість Mode) для читання і запису.
У деструкторs класу, перед вивантаженням бібліотек необхідно закрити об'єкти Recordset та Connection та видалити їх за допомогою методу Release.
У функціях відгуку OnMsaccess() і OnMysql(), викликається діалог, відповідно для роботи з базами даних типу MS ACCESS або MySQL. У функції відгуку OnXmlRead() передбачена можливість відкриття файлу з розширенням xml. У даний діалог передається вказівка на клас документа Doc, а також змінній документа tip_bd присвоюється відповідний тип бази даних. Для роботи з БД ACCESS tip_bd дорівнює 1, для роботи з MySQL tip_bd дорівнює 2, для роботи з xml-файлом tip_bd дорівнює 3.
Вся реалізація прикладу ADO6 наведена в класі діалогу CADO6Dlg.
Опис класу CADO6Dlg наведено у файлі ado6Dlg.h.
//{{AFX_INCLUDES()
#include "datagrid.h"
//}}AFX_INCLUDES
#if !defined(AFX_ADO6DLG_H__9E69A617_5804_4897_80D7_434B3365BFD2__INCLUDED_)
#define AFX_ADO6DLG_H__9E69A617_5804_4897_80D7_434B3365BFD2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Ado6Dlg.h: header file
//
#include "Ado6Doc.h"
/////////////////////////////////////////////////////////////////////////////
// CAdo6Dlg dialog
class CAdo6Dlg: public CDialog
{
// Construction
public:
CAdo6Dlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
CAdo6Doc* Doc;
//{{AFX_DATA(CAdo6Dlg)
enum {IDD = IDD_DIALOG_BAZA};
CEdit m_editquery;
CListBox m_baza;
CListBox m_tab;
CListBox m_pol;
CDataGrid m_datagrid1;
_ConnectionPtr PConn;
_RecordsetPtr PRecordset;
FieldsPtr fields;
int tip_bd;
CString baza;
CString table;
//}} AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAdo6Dlg)
protected: