Классы CRecordset и CDaoRecordset

   
На этом шаге мы рассмотрим классы CRecordset и CDaoRecordset.

   
Эти объекты инкапсулируют набор записей, выбранных из базы данных. Он похож на документ в архитектуре
"документ/вид", в том смысле что он содержит данные, отображаемые объектом представления записей.

   
Наборы позволяют просматривать записи по отдельности, изменять их (добавлять, редактировать и удалять), задавать
фильтры, сортировать, а также заполнять их информацией времени выполнения. Переменные-члены объекта набора
записей соответствуют выбранным из БД столбцам и заполняются данными конкретных строк по мере просмотра
набора записей пользователем.

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

   
Примечание. Обратите внимание: в DAO RFX носит имя DFX -
сокращение от DAO Record Field Exchange (обмен полями записи в DAO).

   
При создании объект набора записей связывается с объектом базы данных, адрес которого передается конструктору.
Это проиллюстрировано в следующем примере для ODBC-класса:

  CDatabase db;
  db.OpenEx("DSN=pubs;UID=sa;PWD=password",0);
  CRecordset rs(&db);

   
Создавая производный от CRecordset или CDaoRecordset класс допустимо перегрузить функции-члены и
задать сведения о подключении, а при создании объекга этого класса передавать в конструктор NULL. Если Вы
выберете такой способ, то на основе этих сведений MFC создаст временный объект базы данных, связанный с Вашим набором записей.

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

  rs.Open(CRecordset::dynaset,   "SELECT * FROM authors", CRecordset::none);

   
Первый параметр функции CRecordset::Open() указывает на тип курсора, создаваемого для выбранных данных (таблица 1).

Таблица 1. Типы курсора в функции-члене CRecordset::Open()

ПараметрНазначение
CRecordset::dynasetСоздает динамический набор записей, который можно прокручивать вперед и назад. Порядок сортировки данных
фиксируется при его создании. Динамические наборы вполне пригодны для большинства операций с базами данных,
так как они экономят память, храня только ключи полученной выборки, а также отображают большинство изменений,
внесенных другими пользователями (кроме вставки записей)
CRecordset:snapshotСнимок - набор записей, не отображаюший изменений в источнике данных, сделанных другими пользователями, но
который можно прокручивать в обе стороны. Такие наборы полезны, когда нужна гарантия неизменности набора в процессе
работы с ним, например при генерации отчетов
CRecordset::dynamicСоздает полностью динамический набор записей. Его можно прокручивать в обоих направлениях, а все исправления,
сделанные пользователями, моментально отображаются в нем. Такой динамический курсор наиболее ресурсоемок, его применяют,
когда набор должен постоянно отражать состояние источника данных в настоящий момент
CRecordset::forwardonlyСоздает набор записей только для чтения с прокруткой только в одном направлении. Такой курсор наиболее быстр и требует минимума ресурсов.
Часто бывает достаточно однократного последовательного просмотра выборки, и именно для таких случаев предназначен этот курсор

   
Второй параметр функции Ореn() - строка SQL-команд, а последний - битовая маска, позволяющая задать
режим созданного набора записей: только для добавления, только для чтения, допустима ли обработка нескольких строк и т.д.
Значение CRecordset::none указывает, что ни один из этих режимов не устанавливается. Полный список режимов
Вы получите, проведя в справочной системе Visual C++ поиск по ключевому слову "CRecordset::Open".

   
CDaoRecordset::Open() похожа на CRecordset::Open(). Класс CDaoRecordset позволяет создавать только наборы типа
dynaset, snapshot или table. Последний тип представляет собой обновляемый набор записей из одной таблицы базы данных.
Наборы типа snapshot в классе CDaoRecordset предназначены только для чтения.

   
Закончив работать с набором записей, закройте его вызовом функции-члена Close(). Это надо сделать до
закрытия связанного с ним объекта базы данных.

   
На следующем шаге мы рассмотрим классы CRecordView и CDaoRecordView.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий