Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Программирование на C / C++" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Классы CDatabase и CRecordset
Visual C++ Лучшие статьи с сайта www.p-lib.pp.ru |
Главная | Новости | Статьи | Каталог | Софт | Регистрация | Поиск |
Приглашаем авторов статей к сотрудничеству с сайтом. Для того чтобы разместить на сайте статью надо заполнить форму или связаться с нами по E-Mail Предлагаем владельцам сайтов добавить сабя в каталог на нашем сайте. |
Новые статьи на сайте |
1. События Событие является объектом, очень похожим на семафор, но в несколько видоизмененном виде. Рассмотрим функции для работы с событиями. 2. Критические секции Понятие критической секции позволяет уберечь определенные области программы так, чтобы в этой области программы в данный момент времени исполнялся бы только один поток. 3. Источники данных ODBC В статье рассмотрены функции по работе с ODBC. В конце приведен небольшой пример. 4. Всплывающие подсказки (ToolTip) В этой статье будет рассмотрен вопрос создания всплывающих подсказок (ToolTip) средствами MFC, а также рассмотрены некоторые возможности по управлению подсказками. 5. STL: Итераторы Библиотека STL содержит довольно большое количество средств и возможностей и конечно все я не смогу описать в одной статье. В этой же статье рассказывается об итераторах. 6. STL: Алгоритмы Алгоритмами в библиотеке STL называют функции-шаблоны. Функции параметризованы по типу итератора. Здесь важно не ошибиться с типом итератора. 7. STL: Адаптеры Адаптеры изменяют интерфейс существующих компонентов. Есть несколько видов адаптеров. 8. Объекты OLE OLE это сокращение от Objects Linking and Embedding, т. е. объекты связанные и внедренные. В статье описано использование таких объектов на примере MS Word. 9. Сериализация в MFC В статье очень подробно рассматривается механизм сериализации, реализованный в MFC. Автор дает полную информацию о работе макросов DECLARE IMPLEMENT_DYNAMIC, DECLARE/IMPLEMENT_SERIAL и DECLARE/IMPLEMENT_DYNCREATE. Также обсуждается поддержка версий схем сериализации. 10. Определение разрыва TCP-соединения В статье рассматривается один из способов контроля над работоспособностью TCP/IP-соединения под Windows ? создание keep-alive таймера. |
Классы CDatabase и CRecordset |
В одной из рассылок уже была затронута тема работы с базами данных. Там затрагивалось создание, изменение и получение источников данных ODBC. То есть мы можем без проблем создать нужный для нас источник данных. Но как же производить считывание или добавление записи в таблицу. На помощь приходят два класса CDatabase и CRecordset. Именно в этой рассылке мы и будем описывать их и разберем их методы и свойства. Класс CDatabaseЭтот класс предоставляет связь с источником данных. Вы можете соединиться с
Microsoft SQL Server, Microsoft Access или xBASE. Таким образом, можно
соединяться с несколькими источниками данных.
Теперь давайте по подробнее рассмотрим некоторые функции. virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T("ODBC;"), BOOL bUseCursorLib = TRUE ); Теперь рассмотрим каждый параметр функции Open:
Ниже приведен пример реализации этой функции. CDatabase m_dbCust; try { m_dbCust.Open(_T( " MS Access 97 Database " ), FALSE, FALSE, "ODBC;UID=name;PWD=pass"); if (dbCust.IsOpen()) { ... } } catch(CDBException cdbThrow) { AfxMessageBox(cdbThrow.m_strError); } На примере функции OpenEx расскажу, как можно подключиться к базе данных, не создавая источника данных. CDatabase m_dbCust; m_dbCust.OpenEx( "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=f:\\database.mdb", CDatabase::noOdbcDialog); Для выполнения, каких-либо действий, в базе данных, нужно воспользоваться функцией ExecuteSQL. Вот пример ее использования: m_dbCust.ExecuteSQL("CREATE TABLE Phone (Name char(50), Number int)"); В результате будет создана таблица Phone с двумя колонками Name и Number. Этой функцией можно не только создавать таблицы, но и создавать и изменять записи в таблице, а так же запускать хранимые процедуры и многое другое. Для закрытия соединения с базой данных служит функция Close dbCust.Close() Класс CRecordsetКласс CRecordset, как и CDatabase является производным от CObject. Он используется для получения данных из базы данных. К сожаления с использованием CRecordset нельзя вносить данные или изменять их. Об этом классе можно рассказывать очень долго, так как он имеет очень много полезных функции и возможностей для работы с базами данных. Затрону лишь самые нужные и необходимые функции и возможности. Создать объект можно на основе конструктора: CRecordset rs(&m_dbCust); или CRecordset rs; rs.m_pDatabase=& m_dbCust; Итак, функция Open выполняет запрос к базе данных. virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none ); Вот пример реализации этой функции: CRecordset rs(&m_dbCust); try { rs.Open(CRecordset::forwardOnly,"SELECT * FROM Phone", CRecordset::readOnly); rs.Close(); } catch(CDBException cdb) { AfxMessageBox(cdb.m_strStateNativeOrigin); } В результате выполнения этого кода мы получим все содержание таблицы Phone. Класс CRecordset имею такую же функцию, как и у класса CDatabase - IsOpen. Принцип её работы такой же, поэтому описывать ее буду. Так же абсолютной аналогией является функция Close. Кроме того, в класс CRecordset встроены функции GetODBCFieldCount и GetODBCFieldInfo. Первая возвращает количество полей (столбцов) в наборе записей, а вторая заполняет структуру CODBCFieldInfo информацией о заданном поле. Транзакция - это блок команд, которые выполняются как единое целое. Другими словами, они либо выполняются все, либо не выполняется ни одна. Транзакция начинается вызовом CDatabase::BeginTrans и завершается вызовом CDatabase::CommitTrans. Все операции по изменению, добавлению и удалению данных вступят в силу только после вызова CommitTrans, причём в любой момент до вызова этой функции транзакцию можно полностью отменить, вызвав функцию CDatabase::Rollback. Используйте CDatabase::CanTransact, чтобы определить, поддерживает ли используемый вами драйвер транзакции. Далее продемонстрирован код на основе функции IsEOF. С помощью этой функции вы сможете перечислить все отчеты, полученные в результате запроса. А функция GetFieldValue получает любое значение поля. CRecordset rs(&m_dbCust); CString varValue; try { rs.Open(CRecordset::forwardOnly,"SELECT * FROM Phone", CRecordset::readOnly); while(!rs.IsEOF) { rs.GetFieldValue((short)0, varValue); //переменна varValue приобрела значение соответствующего поля в таблице rs.MoveNext(); } rs.Close(); } catch(CDBException cdb) { AfxMessageBox(cdb.m_strStateNativeOrigin); } ЗаключениеИсходник этой статье я приводить не стал, так как в статье приведены простые примеры и их вполне хватит, чтобы создать свое собственное приложение. Более подробную информацию вы сможете найти в MSDN. Ну и в заключение скажу, что на основе этих двух классов можно работать и с базой данных расположенной на другом компьютере. Реализация этой возможности ни чем не отличается от реализации работы с базой данных на локальном компьютере. Надо просто создать источник данных ODBC и указать в качестве драйвера SQL Server. И абсолютно так же создавать подключение к базе данных на основе класса CDatabase и получать нужную из нее информацию на основе класса CRecordset. |
Книги с Озона |
Последнии статьи по Delphi |
Советую посетить |
Портал для Delphi программиста - Быстро развивающийся портал о программирование на языке Pascal/Delphi. Статьи, исходники, компоненты, справочники, мануалы, FaQ, программы. |
Дружественные рассылки |
![]() |
Замечания и предложения отправляйте на E-Mail указанный ниже. С уважением Ковязин Дмитрий (admin@p-lib.pp.ru). |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.visualc Архив рассылки |
Отписаться
Вебом
Почтой
Вспомнить пароль |
В избранное | ||