Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

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:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]