Поделиться через


Набор записей (ODBC)

Этот раздел относится к классам ODBC библиотеки MFC.

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

  • Таблица.

  • запрос;

  • хранимая процедура, обращающаяся к одной или нескольким таблицам.

Пример набора записей, основанного на таблице, называется "все клиенты", который обращается к таблице "Клиенты". Пример запроса — "все накладные для Джо Смита". Пример набора записей на основе хранимой процедуры (иногда называемого предопределенным запросом) — это "все просроченные счета", которые извлекаются с помощью хранимой процедуры в серверной базе данных. В наборе записей могут объединяться две или несколько таблиц из одного источника данных, но не из разных.

Примечание.

Некоторые драйверы ODBC поддерживают представления базы данных. В этом смысле представление — это запрос, изначально созданный с помощью инструкции SQL CREATE VIEW.

Возможности набора записей

Все объекты наборов записей имеют перечисленные ниже возможности.

  • Если источник данных доступен не только для чтения, набор записей можно определить как допускающий обновление, допускающий добавление или доступный только для чтения. Если набор записей допускает обновление, можно выбрать метод пессимистической или оптимистической блокировки при условии, что он поддерживается драйвером. Если источник данных доступен только для чтения, набор записей также будет доступен только для чтения.

  • Путем вызова функций-членов можно прокручивать выбранные записи.

  • Можно фильтровать выбираемые записи для их ограничения.

  • Записи можно сортировать по одному или нескольким столбцам в порядке возрастания или убывания.

  • Набор записей можно параметризовать, чтобы уточнять выборку записи во время выполнения.

Моментальные снимки и Dynasets (динамические наборы данных)

Существует два основных типа наборов записей: моментальные снимки и динамические подмножества данных. Оба поддерживаются классом CRecordset. Каждый из них обладает общими свойствами всех наборов записей, но по-своему расширяет общие возможности. Моментальные снимки обеспечивают статическое представление данных и полезны для отчетов и в других ситуациях, когда нужно получить представление данных на определенный момент времени. Динамические подмножества данных полезны, когда нужно, чтобы изменения, вносимые другими пользователями, отражались в наборе записей без необходимости выполнять повторный запрос или обновление набора. Моментальные снимки и динамические подмножества данных могут допускать обновление или быть доступными только для чтения. Чтобы отразить записи, добавленные или удаленные другими пользователями, вызовите CRecordset::Requery.

CRecordset поддерживает еще два типа наборов записей: динамические и с однонаправленным доступом. Динамические наборы записей похожи на динамические подмножества данных, однако добавление и удаление записей отражается в них без вызова CRecordset::Requery. По этой причине динамические наборы записей, как правило, требуют больших затрат на обработку в СУБД, и многие драйверы ODBC не поддерживают их. Напротив, последовательные наборы записей обеспечивают наиболее эффективный доступ к данным, если набор записей не требует обновления или обратной прокрутки. Например, набор записей, доступный только для последовательного перебора вперед, можно использовать для переноса данных из одного источника данных в другой, когда необходимо перемещаться по данным только вперед. Для использования набора записей с последовательным доступом необходимо выполнить следующие два действия.

  • Передать параметр CRecordset::forwardOnly в качестве параметра nOpenType функции-члена Open.

  • Указать CRecordset::readOnly в параметре dwOptionsOpen.

    Примечание.

    Сведения о требованиях к драйверу ODBC для поддержки динамических подмножеств данных см. в статье Основы ODBC. Список драйверов ODBC, включенных в эту версию Visual C++, и сведения о получении дополнительных драйверов см. в статье Список драйверов ODBC.

Наборы записей

Для каждой таблицы, представления или хранимой процедуры, к которой требуется доступ, обычно определяется класс, производный от CRecordset. (Исключением является соединение базы данных, в котором один набор записей представляет столбцы из двух или нескольких таблиц.) При наследовав класс набора записей, можно включить механизм обмена полями записей (RFX) или механизм обмена полями массовой записи (Bulk RFX), который аналогичен механизму обмена данными диалоговых окон (DDX). RFX и Bulk RFX упрощают передачу данных из источника данных в набор записей. Кроме того, RFX передает данные из набора записей в источник данных. Дополнительные сведения см. в разделе "Обмен полями записей" (RFX) и Recordset: Извлечение записей массово (ODBC).

Объект набора записей предоставляет доступ ко всем выбранным записям. Прокрутка выбранных записей осуществляется с помощью функций-членов CRecordset, таких как MoveNext и MovePrev. В то же время объект набора записей представляет только одну из выбранных записей, которая является текущей. Просматривать поля текущей записи можно путем объявления переменных-членов в классе набора записей, которые соответствуют столбцам таблицы или записей, полученных в результате запроса к базе данных. Дополнительные сведения о элементах данных набора записей см. в разделе Recordset: Архитектура (ODBC).

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

Статьи о принципах открытия, чтения и закрытия наборов записей

Статьи о принципах изменения наборов записей

Темы о некоторых более продвинутых техниках

Статьи о принципах работы наборов записей

См. также

открытая технология для подключения к базам данных (ODBC)
Использование MFC ODBC
Транзакция (ODBC)