Отправляет email-рассылки с помощью сервиса Sendsay

Статьи по Visual C++

  Все выпуски  

Классы CDatabase и CRecordset


Информационный Канал Subscribe.Ru

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. Таким образом, можно соединяться с несколькими источниками данных.
Класс CDatabase является производным от класса CObject. В приведенной ниже таблице перечислены функции и свойства этого класса.

Open Устанавливает связь с источником данных через ODBC
OpenEx Устанавливает связь с источником данных через ODBC
Close Завершение связи с источником данных
IsOpen Возвращает значение отличное от нуля, если объект CDatabase в настоящее время связан с источником данных.
CanTransact Возвращает значение отличное от нуля, если объект CDatabase поддерживает транзакции. Не все драйвера ODBC имеют такую возможность.
CanUpdate Возвращает значение отличное от нуля, если объект CDatabase не только считывание.
GetConnect Возвращает строку CString, в которой перечислены все параметры, используемые при установке соединения.
GetDatabaseName Возвращает имя используемой в настоящий момент базы данных.
ExecuteSQL Выполняет SQL запрос. Никакие значения не возвращаются.

Теперь давайте по подробнее рассмотрим некоторые функции.

virtual BOOL Open(
   LPCTSTR lpszDSN,
   BOOL bExclusive = FALSE,
   BOOL bReadOnly = FALSE,
   LPCTSTR lpszConnect = _T("ODBC;"),
   BOOL bUseCursorLib = TRUE 
);

Теперь рассмотрим каждый параметр функции Open:

  1. lpszDSN ? имя источника данных. Как создавать источники данных, уже было рассмотрено. Если значение DSN определено в параметре lpszConnect ("DSN=<data-source> "), тогда это значение надо оставить равным NULL. Так же вы можете приравнять этот параметр NULL, если хотите, чтобы появилось окно выбора источника данных ODBC.
  2. bExclusive ? если этот параметр будет равен TRUE, то доступ для других программ к базе данных будет закрыт.
  3. bReadOnly ? TRUE, если вы хотите толь считывать данные из базы данных, и если FALSE, то вы сможете и считывать и изменять данные.
  4. lpszConnect ? определяет строку соединения. Вот пример значения этого параметра: "ODBC;UID=имя;PWD=пароль". То есть можно задавать имя и пароль для соединения с базой данных.
  5. bUseCursorLib ? TRUE, если вы хотите загрузить библиотеку курсоров. Библиотека курсоров улучшает функциональность ODBC, но нужна она не всегда.

Ниже приведен пример реализации этой функции.

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.

Книги с Озона

Visual C++.NET. Библия пользователя Visual C++.NET. Библия пользователя

Эта книга посвящена библиотеке MFC, a не только платформе .NET. Весь материал разбит на разделы, освещающие отдельные направления разработки, объединенные в логически упорядоченные категории, что позволит новичкам получить систематизированные знания, читая книгу шаг за шагом, а квалифицированный программист легко найдет интересующие разделы. Каждая глава начинается вводным разделом, содержащим краткую информацию по обсуждаемой теме, а затем следует пример довольно простого демонстрационного приложения. Книга предназначена для программистов средней и высокой квалификации.

Заказать на Озоне

Visual C++.NET. Класссика програмирования (+ CD-ROM) Visual C++.NET. Класссика програмирования (+ CD-ROM)

"Visual C++.Net. Классика программирования" - книга, необходимая как начинающему программисту, так и профессионалу, желающему познакомиться с новыми возможностями последней версии наиболее популярной системы программирования. Изучение этой книги не требует глубоких знаний языка C++, однако предполагается знание основ языка С. Поэтапное изучение предмета позволит человеку с любым уровнем начальных знаний о языке программирования C++ легко изучить самую современную его версию. Данная книга - не просто учебник по языку программирования, это первый шаг в создании удобных, профессиональных приложений, ориентированных на Internet.

Заказать на Озоне

Использование Microsoft Visual C++ .NET. Специальное издание Использование Microsoft Visual C++ .NET. Специальное издание

Эта книга фокусирует внимание читателя на использовании языка программирования Visual C++ при создании 32-разрядных Windows-приложений, включая приложения баз данных, Internet-приложения и СОМ-приложения. Помимо этого, здесь содержится описание технологии .NЕТ и способа применения языка Visual C++ при создании .NЕТ-приложений, использующих базы данных, взаимодействующих с Internet и т.д. Особое внимание автор книги уделяет совместному использованию технологий .NЕТ и СОМ. Эта книга будет полезна как начинающим, так и опытным программистам.

Заказать на Озоне


Последнии статьи по Delphi

   -  Бегущая строка (Метод III)
   -  Методика модификации программ для скрытия их от антивирусов
   -  Нестандартные заголовки
   -  Создание бегущей строки в Delphi
   -  Введение в реккурсию
   -  Перевод в Delphi-приложениях
   -  Сравнительный анализ технологий CORBA и COM - Часть 3
   -  Сравнительный анализ технологий CORBA и COM - Часть 2
   -  Сравнительный анализ технологий CORBA и COM - Часть 1
   -  Интерполяция изображения


Советую посетить

Портал для Delphi программиста - Быстро развивающийся портал о программирование на языке Pascal/Delphi. Статьи, исходники, компоненты, справочники, мануалы, FaQ, программы.

Дружественные рассылки

Visual Basic.NET
ASP.NET (new)
Рассылка сайта Delphi coding
Интернет для Delphi-программиста
 

Замечания и предложения отправляйте на E-Mail указанный ниже. С уважением Ковязин Дмитрий (admin@p-lib.pp.ru).


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.visualc
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное