Шаг 13 - Типы CDaoRecordset и функция Open()

Объект CDaoRecordset объединяет набор данных. Он объект может быть трех типов:

  1. Dynaset-type - Динамический
  2. Table-type - Табличный
  3. Snapshot-type - Статический

С помощью динамического набора есть возможность получить доступ ко всей таблице или к ее части. Создавая динамический набор Вы не создаете новую таблицу в базе данных. Вы создаете виртуальную таблицу в памяти компьютера. Это не ведет к увеличению базы данных, но зато расходует оперативную память. Работа с динамическим набором производится так. Сначала выбираются записи в соответствии с тем, что Вы попросили. После этого из набора формируется таблица с временными ключами и именно она передается на ваш компьютер или в Вашу программу. В зависимости от того, что Вы делаете Вам передаются физические записи. Например, перешли на последнюю запись набора и содержание этой записи полностью Вам передается. Кто все это делает ??? Microsoft Jet. За все это отвечает она и Вам нет до этого дела. От программиста требуется только понимание процесса. Ну, например, если при динамическом наборе таблица очень большая, а мне нужно будет просто просматривать записи. Хватит памяти ???? Скорее всего да, так как мы не помещаем в память всю таблицу, а только записи с которыми работаем. Влияет передвижение на трафик в сети, если база данных на сервере ??? Да, вначале при передаче ключей и потом по мере передвижений по записям.

Табличный объект дает Вам доступ непосредственно к физической таблице. Что это дает ??? Ну, например, при табличном объекте открытом у нескольких пользователей изменения будут сразу видны. Но здесь есть недостатки. Создавая объект такого типа вы не можете делать выборку, то есть создать часть таблицы, только всю и при этом нельзя объединять таблицы, сортировать. Кроме того этот тип нельзя использовать при работе с ODBC. Так как при работе с динамическим набором передаются указатели, а сами данные только в случае необходимости.

Статический объект полностью идентичен динамическому за исключением того, что все данные хранятся на рабочей станции и этот объект используется только для чтения, это моментальный снимок таблицы. Для того, чтобы увидеть изменения надо сделать новый запрос.

Тип объекта указывается при открытии набора в функции Open():

virtual void Open( int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
	LPCTSTR lpszSQL = NULL, int nOptions = 0 );
throw( CDaoException, CMemoryException );

virtual void Open( CDaoTableDef* pTableDef, 
	int nOpenType = dbOpenTable, int nOptions = 0 );
throw( CDaoException, CMemoryException );

virtual void Open( CDaoQueryDef* pQueryDef,
	int nOpenType = dbOpenDynaset, int nOptions = 0 );
throw( CDaoException, CMemoryException );

В переменной nOpenType указывается как будет открыта таблица с помощью констант:

Пример:

CDaoRecordset rs(&db); 
rs.Open(dbOpenDynaset, _T("Select [Student Name], AVG([Test Score]) AS AvgScore FROM SCORES GROUP BY [Student Name]"));

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.03.2001