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


Дайнасет

В этом разделе описываются dynasets и обсуждается их доступность.

Примечание.

Этот раздел относится к классам ODBC MFC, включая CRecordset. Сведения о dynaset в классах DAO см. в разделе CDaoRecordset. С помощью DAO можно открыть наборы записей типа dynaset.

Dynaset — это набор записей с динамическими свойствами. В течение своего существования объект набора записей в режиме dynaset (обычно называемый dynaset) остается синхронизированным с источником данных следующим образом. В многопользовательской среде другие пользователи могут изменять или удалять записи, которые находятся в вашем наборе dynaset или добавлять записи в таблицу, которую представляет dynaset. Записи, которые ваше приложение добавляет в набор данных или удаляет из него, отображаются в вашем динамическом наборе данных. Записи, которые другие пользователи добавляют в таблицу, не будут отражены в dynaset, пока вы не перестроите dynaset, вызвав метод Requery. Когда другие пользователи удаляют записи, код MFC игнорирует эти удаления в вашем наборе записей. Изменения редактирования других пользователей существующих записей отражаются в вашем наборе данных сразу после прокрутки до затронутой записи.

Аналогичным образом, изменения, внесенные в записи в набор данных dynaset, отражаются в наборах данных dynaset, используемых другими пользователями. Добавляемые записи не отражаются в dynasets других пользователей до тех пор, пока они не выполнят повторный запрос своих dynasets. Удаленные записи помечены как удаленные в наборах записей других пользователей. Если у вас несколько подключений к одной базе данных (несколько CDatabase объектов), наборы записей, связанные с этими подключениями, имеют то же состояние, что и наборы записей других пользователей.

Dynaset является наиболее ценным, когда данные должны быть динамическими, как, например, в системе резервирования авиакомпаний.

Примечание.

Чтобы использовать dynasets, необходимо иметь драйвер ODBC для источника данных, поддерживающий dynasets, и при этом не загружать библиотеку курсоров ODBC. Дополнительные сведения см. в разделе "Доступность Dynasets".

Чтобы указать, что набор записей является dynaset, передайте CRecordset::dynaset в качестве первого параметра функции-члена Open объекта набора записей.

Примечание.

Для обновляемых наборов данных ваш драйвер ODBC должен поддерживать либо позиционированные инструкции обновления, либо функцию API ODBC ::SQLSetPos. Если оба варианта поддерживаются, MFC выбирает ::SQLSetPos для эффективности.

Доступность Dynasets

Классы баз данных MFC поддерживают dynaset, если выполнены следующие требования:

  • Библиотека DLL курсоров ODBC не должна использоваться для этого источника данных.

    Если используется библиотека курсоров, она маскирует некоторые функции базового драйвера ODBC, необходимого для поддержки dynaset. Если вы хотите использовать динасеты (и ваш драйвер ODBC поддерживает функциональность, необходимую для работы с динасетами, как описано в остальной части этого раздела), вы можете сделать так, чтобы MFC не загружала библиотеку курсоров при создании объекта CDatabase. Дополнительные сведения см. в разделе ODBC, а также в функции OpenEx или Open класса CDatabase.

    В терминологии ODBC динамические наборы (dynasets) и моментальные снимки (snapshots) называются курсорами (cursors). Курсор — это механизм, используемый для отслеживания его положения в наборе записей.

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

    Курсоры, управляемые набором ключей, управляют данными из таблицы, получая и сохраняя набор ключей. Ключи используются для получения текущих данных из таблицы при прокрутке пользователя на определенную запись. Чтобы определить, предоставляет ли драйвер эту поддержку, вызовите функцию API ODBC с параметром ::SQLGetInfoSQL_SCROLL_OPTIONS .

    Если вы пытаетесь открыть dynaset без поддержки набора ключей, вы получите CDBException, соответствующий значению кода возврата AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.

  • Драйвер ODBC для источника данных должен поддерживать расширенную выборку.

    Расширенная выборка — это возможность прокрутки назад, а также вперед по результирующей записи SQL-запроса. Чтобы определить, поддерживает ли драйвер эту возможность, вызовите ::SQLGetFunctions функцию API ODBC с параметром SQL_API_SQLEXTENDEDFETCH .

Если вам нужны обновляемые наборы данных (или моментальные снимки, в данном случае), драйверу ODBC необходимо поддерживать ::SQLSetPos функцию API ODBC или обновления с позиционированием. Функция ::SQLSetPos позволяет MFC обновлять источник данных без отправки инструкций SQL. Если эта поддержка доступна, MFC предпочитает использовать её вместо обновления при помощи SQL. Чтобы определить, поддерживает ли драйвер ::SQLSetPos, вызовите ::SQLGetInfo с параметром SQL_POS_OPERATIONS.

Размещенные обновления используют синтаксис SQL (формы WHERE CURRENT OF<cursorname>) для идентификации определенной строки в таблице источника данных. Чтобы определить, поддерживает ли драйвер позиционированные обновления, вызовите ::SQLGetInfo с параметром SQL_POSITIONED_STATEMENTS.

Как правило, для dynasets MFC (но не наборов записей только для пересылки) требуется драйвер ODBC с соответствием API уровня 2. Если драйвер для источника данных соответствует набору API уровня 1, можно по-прежнему использовать обновляемые и доступные только для чтения моментальные снимки и наборы записей только для пересылки, но не dynaset. Однако драйвер уровня 1 может поддерживать dynasets, если он поддерживает расширенное извлечение данных и курсоры, управляемые набором ключей. Дополнительные сведения о уровнях соответствия ODBC см. в разделе ODBC.

Примечание.

Если вы хотите использовать и моментальные снимки, и наборы dynaset, их необходимо базировать на двух разных объектах (двух разных CDatabase подключениях).

В отличие от моментальных снимков, которые используют промежуточное хранилище, поддерживаемое библиотекой курсоров ODBC, dynasets извлекают записи непосредственно из источника данных, как только вы их прокрутите. Это обеспечивает синхронизацию записей, изначально выбранных динамическим набором, с источником данных.

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

См. также

открытая технология для подключения к базам данных (ODBC)