Классы для работы с базами данных
Класс 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-обмен данными для реализации обмена между тремя наборами данных: элементами управления, полями результирующего набора и записями источника данных. На следующей схеме проиллюстрировано взаимодействие этих трех наборов данных.
Класс 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. Это также закроет все наборы записей.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Почему стероиды повышают давление?: Основных причин три... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (342)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |