Мегаобучалка Главная | О нас | Обратная связь


Классы для работы с базами данных



2019-07-03 316 Обсуждений (0)
Классы для работы с базами данных 0.00 из 5.00 0 оценок




Класс CDATABASE

Класс CDatabase предоставляет средства подключения к источнику данных. В приложении может использоваться несколько активных объектов CDatabase.

Для использования класса CDatabase следует подключить заголовочный файл afxdb.h.

Член класса CDatabase::m_hdbc является указателем на подсоединенный ODBC источник данных. Он может использоваться как дескриптор соединения при непосредственном вызове функций ODBC.

Например:

// Использование m_hdbc для непосредственного вызова // ODBC API.// m_db – объект типа CDatabase,// m_hdbc – член класса CDatabasenRetcode = ::SQLGetInfo( m_db.m_hdbc,                         SQL_ODBC_SQL_CONFORMANCE,                   &nValue, sizeof( nValue ),                         &cbValue );

Класс CDatabase имеет один конструктор без параметров и набор методов, включая следующие:

· OpenEx (LPCTSTR lpszConnectString, DWORD dwOptions = 0);throw (CDBException, CMemoryException ); - метод, выполняющий открытие базы данных. Первый параметр определяет ODBC строку подключения, описывающую источник данных, и некоторую дополнительную информацию, такую как идентификатор пользователя и пароль.

Например: "DSN=SQLServer_Source;UID=Us1;PWD=pwd1".

Второй параметр по умолчанию равен нулю, что предполагает открытие базы данных с разделяемым доступом и с правами записи, без загрузки ODBC Cursor Library DLL и без принудительного отображения диалога ODBC, определяющего информацию для подключения к базе данных. Этот параметр может быть задан как битовая маска, определяемая комбинацией следующих значений:

o CDatabase::openReadOnly – открытие источника данных только для чтения;

o CDatabase::useCursorLib – указывает загрузку библиотеки ODBC Cursor Library DLL, маскирующей некоторую функциональность ODBC-драйвера;

o CDatabase::noOdbcDialog – предотвращает появление диалога для подсоединения источника данных;

o CDatabase::forceOdbcDialog – обеспечивает отображение диалога с целью определения информации для ODBC-соединения.

Например:

// Объявление объекта типа CDatabase CDatabase m_db1;// Объект CDatabase: открытие источника данных // "только на чтение"m_db1.OpenEx( _T( "DSN=MYDATASOURCE;UID=U1" ),          CDatabase::openReadOnly |                CDatabase::noOdbcDialog ) );

· Close – метод, закрывающий соединение с базой данных. После закрытия соединения объект типа CDatabase можно использовать для открытия другого источника данных;

· IsOpen – метод, определяющий, установлено ли соединение с базой данных для объекта CDatabase ;

· GetConnect – метод, который возвращает строку подключения, использованную для открытия источника данных;

· GetDatabaseName – метод, возвращающий имя текущей подсоединенной базы данных (это не источник данных DSN, указываемый для методов OpenEx и Open, и зависит от ODBC);

· CanTransact – метод, позволяющий определить, можно ли использовать транзакции для базы данных;

· SetLoginTimeout – метод, устанавливающий интервал времени, по истечении которого попытка подсоединения к источнику данных будет отменена;

· BeginTrans – метод, открывающий транзакцию. Не все ODBC-драйверы поддерживают применение транзакций;

· CommitTrans – метод, выполняющий завершение транзакции;

· Rollback – метод, выполняющий откат транзакции;

· ExecuteSQL – метод, выполняющий SQL-оператор без возвращения результирующего набора.

Например:

CString strCmd = "UPDATE TBL1 SET F1 = 124";TRY{ m_db1.ExecuteSQL( strCmd );}CATCH(CDBException, e){ // Код ошибки в e->m_nRetCode}END_CATCH

Класс CRECORDSET

Класс CRecordset реализует операции над результирующим набором, получаемым из источника данных при выполнении SQL-оператора SELECT.

Результирующий набор может использоваться в двух режимах:

· динамический набор записей (dynasets), состояние которого синхронизируется с изменениями, сделанными другими пользователями;

· статический набор записей (snapshots), не отражающий изменения, производимые другими пользователями.

Класс CRecordset позволяет:

· просматривать записи результирующего набора;

· изменять записи;

· выполнять блокировку записей;

· сортировать записи;

· определять фильтр для выбора записей.

Для использования набора записей из базы данных следует:

1. Создать объект класса CRecordset, передав конструктору в качестве параметра указатель на объект CDatabase или NULL ;

2. Вызвать метод Open и определить режим использования набора данных: динамический или статический.

Метод Open создает (открывает) результирующий набор.

Член класса CRecordset::m_hstmt содержит указатель на структуру данных типа HSTMT (дескриптор оператора).

Класс CRecordset содержит переменные и методы для работы с результирующим набором, включая следующие:

· CRecordset::m_nFields – переменная, содержащая количество полей в результирующем наборе.

· CRecordset::m_nParams – переменная, содержащая количество параметров, используемых в запросе.

· CRecordset::m_pDatabase – переменная, содержащая указатель на объект CDatabase посредством которого для данного результирующего набора было установлено соединение с базой данных.

· CRecordset::m_strFilter – переменная, содержащая условие, указываемое во фразе WHERE SQL-оператора (условие должно быть определено до создания результирующего набора вызовом метода Open ).

Например:

CMySet rsMySet( NULL ); // Класс CMySet наследуется от CRecordset// Определение фильтра (условия во фразе WHERE) rsMySet.m_strFilter = "field2 > 123";// Выполнение запроса – открытие результирующего набора rsMySet.Open( CRecordset::snapshot, "MyTbl1" );

· CRecordset::m_strSort – переменная, содержащая значение, указываемое во фразе ORDER BY SQL-оператора;

· CRecordset ( CDatabase* pDatabase = NULL); – конструктор;

· Open – метод, создающий результирующий набор;

· CanAppend – метод, определяющий, разрешено ли в данный открытый набор записей добавлять новые записи;

· GetSQL – метод, возвращающий SQL-оператор, использованный для получения открытого в данный момент результирующего набора;

· IsEOF – метод, определяющий, достигнут ли конец результирующего набора;

· IsBOF – метод, определяющий, достигнуто ли начало набора записей.

Например:

rsSet.Open( ); // Результирующий набор открыт:                // текущая запись - перваяif( rsSet.IsBOF( ) ) return; // Результирующий набор пустwhile ( !rsSet.IsEOF( ) )       // Просмотр всех                                   // записей от начала до конца rsSet.MoveNext( );rsSet.MoveLast( );       // Переход к последней записиwhile( !rsSet.IsBOF( ) ) // Просмотр всех                           // записей от конца до начала rsSet.MovePrev( );rsSet.MoveFirst( );        // Переход к первой записи

· AddNew – метод, используемый для добавления новой записи (только для режима выборки по одной записи);

· CancelUpdate – метод, используемый для отмены изменений, произведенных операциями Edit или AddNew с момента последнего вызова метода Update ;

· Delete – метод, используемый для удаления текущей записи;

· Edit – метод, вызываемый для включения режима редактирования текущей записи. В режиме редактирования можно выполнять методы AddNew и Delete. Для внесения изменений, сделанных этими методами, в базу данных следует вызвать метод Update.

Например:

rsSet.Edit( );   // Начало операций изменения записиrsSet.m_dwF1 = 123;rsSet.m_strF1 = "abc";if( !rsCustSet.Update( ) ) // Внесение изменений

· Update – метод, возвращающий ненулевое значение в том случае, если запись источника данных была успешно обновлена;

· MoveFirst – метод, перемещающий указатель текущей записи на первую запись результирующего набора;

· MoveLast – метод, перемещающий указатель текущей записи на последнюю запись результирующего набора;

· MoveNext – метод, перемещающий указатель текущей записи на следующую запись результирующего набора;

· MovePrev – метод, перемещающий указатель текущей записи на предыдущую запись результирующего набора;

· DoFieldExchange – метод, вызываемый для автоматического обмена данными между членами класса – полями результирующего набора (текущей записи) и соответствующими полями текущей записи в источнике данных. Метод DoFieldExchange доступен только для объектов класса, производного от класса CRecordset. Если набор записей создан непосредственно как объект класса CRecordset, то следует использовать метод GetFieldValue. Обмен данными с источником данных, называемый RFX-обменом (record field exchange), работает в двух направлениях: из полей объекта "результирующий набор" в поля источника данных и обратно. Для того чтобы использовать этот метод, достаточно в производном классе результирующего набора определить имена и тип полей данных – членов класса. ClassWizard самостоятельно вставит код в переопределяемый метод DoFieldExchange.

Например:

void CSet::DoFieldExchange(CFieldExchange* pFX){ pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Int(pFX, "F1", m_wF1); // Вызов RFX-метода RFX_Text(pFX, "F2", m_strF2);}

Класс CRECORDVIEW

Объект "отображение" типа CRecordView предоставляет средства для просмотра полей базы данных в элементах управления.

Отображение создается на основе шаблона документа, используя элементы управления, добавленные в ресурс шаблона диалога.

Объект CRecordView использует DDX-обмен данными и RFX-обмен данными для реализации обмена между тремя наборами данных: элементами управления, полями результирующего набора и записями источника данных. На следующей схеме проиллюстрировано взаимодействие этих трех наборов данных.

Элементы управления (определяются как ресурсы) DDX-методы Поля результирующего набора (определяются как переменные члены класса, наследуемого от CRecordset ) RFX-методы Поля источника данных (указываются оператором SELECT )

Класс CRecordView по умолчанию поддерживает реализацию просмотра набора записей и перехода к первой, последней, следующей и предыдущей записям в текущем отображении.

При использовании для создания шаблона приложения MFC Application Wizard автоматически будут созданы ресурс меню и панели инструментов, содержащей кнопки прокрутки набора записей. При программировании вручную, используя ClassWizard, эти ресурсы надо создавать самостоятельно в редакторе меню и в редакторе битовых изображений.

Класс CRecordView имеет два конструктора и набор методов, включая следующие:

· CRecordView – конструктор, параметр которого указывает используемый ресурс шаблона диалога;

· OnGetRecordset – метод, возвращающий указатель на "объект результирующий набор", ассоциированный с отображением, при его успешном создании, и NULL — в противном случае;

· OnMove – метод, используемый для перехода к другой записи результирующего набора. Направление перехода задается параметром, который может принимать следующие значения: ID_RECORD_FIRST ; ID_RECORD_LAST ; ID_RECORD_NEXT ; ID_RECORD_PREV. По умолчанию, OnMove обновляет текущую запись источника данных, если пользователь внес изменения в отображение записи (элементы управления);

· IsOnFirstRecord – метод, возвращающий ненулевое значение, если текущей записью является первая запись результирующего набора.

Для использования базы данных следует:

1. Создать объект класса, наследуемого от CDatabase.

2. Установить соединение, открыв базу данных (вызвав метод CDatabase::OpenEx или CDatabase::Open ).

3. Создать объект класса, наследуемого от CRecordset, для операций над подсоединенным источником данных, передав конструктору указатель на CDatabase. Как любой класс, реализующий визуализацию данных, этот класс связывается с шаблоном диалога (шаблон диалога – это ресурс, описывающий диалоговое окно и все располагаемые в нем элементы управления). Используя DDX-механизм (Dialog Data eXchange) обмена данными между результирующим набором и элементами управления, класс CRecordView реализует отображение и изменение данных.

4. Для завершения работы закрыть базу данных, вызвав метод CDatabase::Close. Это также закроет все наборы записей.

 



2019-07-03 316 Обсуждений (0)
Классы для работы с базами данных 0.00 из 5.00 0 оценок









Обсуждение в статье: Классы для работы с базами данных

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (316)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)