Динамический набор
В этом разделе описываются dynasets и обсуждаются их доступность.
Примечание.
Этот раздел относится к классам ODBC MFC, включая CRecordset. Сведения о dynaset в классах DAO см. в разделе CDaoRecordset. С помощью DAO можно открыть наборы записей типа dynaset.
Dynaset — это набор записей с динамическими свойствами. В течение своего существования объект набора записей в режиме dynaset (обычно называемый dynaset) остается синхронизированным с источником данных следующим образом. В многопользовательской среде другие пользователи могут изменять или удалять записи, которые находятся в вашем наборе dynaset или добавлять записи в таблицу, которую представляет dynaset. Записи приложения, добавляемые в набор записей или удаленные из набора записей, отражаются в вашем dynaset. Записывает, что другие пользователи добавляют в таблицу, не будут отражены в dynaset, пока не перестроите dynaset, вызвав ее Requery
функцию-член. Когда другие пользователи удаляют записи, код MFC пропускает удаление в наборе записей. Изменения редактирования других пользователей существующих записей отражаются в вашем наборе данных сразу после прокрутки до затронутой записи.
Аналогичным образом изменения, внесенные в записи в dynaset, отражаются в dynasets, используемых другими пользователями. Добавляемые записи не отражаются в наборах dynaset других пользователей до тех пор, пока они не перезаписывают свои dynasets. Удаленные записи помечены как удаленные в наборах записей других пользователей. Если у вас несколько подключений к одной базе данных (несколько CDatabase
объектов), наборы записей, связанные с этими подключениями, имеют то же состояние, что и наборы записей других пользователей.
Dynaset являются наиболее ценными, если данные должны быть динамическими, как (например, в системе резервирования авиакомпаний).
Примечание.
Чтобы использовать dynasets, необходимо иметь драйвер ODBC для источника данных, поддерживающего dynasets и библиотеку курсоров ODBC, не нужно загружать. Дополнительные сведения см. в разделе "Доступность Dynasets".
Чтобы указать, что набор записей является dynaset, передайте CRecordset::dynaset
в качестве первого параметра Open
функцию-член объекта набора записей.
Примечание.
Для обновляемых dynaset драйвер ODBC должен поддерживать либо позиционированные инструкции обновления, ::SQLSetPos
либо функцию API ODBC. Если оба варианта поддерживаются, MFC используется ::SQLSetPos
для повышения эффективности.
Доступность Dynasets
Классы баз данных MFC поддерживают dynaset, если выполнены следующие требования:
Библиотека DLL курсоров ODBC не должна использоваться для этого источника данных.
Если используется библиотека курсоров, она маскирует некоторые функции базового драйвера ODBC, необходимого для поддержки dynaset. Если вы хотите использовать dynasets (и драйвер ODBC имеет функциональные возможности, необходимые для dynaset, как описано в остальной части этого раздела), то MFC не загружает библиотеку курсоров при создании
CDatabase
объекта. Дополнительные сведения см. в разделе ODBC и Функции OpenEx или Open member классаCDatabase
.В терминологии ODBC наборы и моментальные снимки называются курсорами. Курсор — это механизм, используемый для отслеживания его положения в наборе записей.
Драйвер ODBC для источника данных должен поддерживать курсоры, управляемые набором ключей.
Курсоры, управляемые набором ключей, управляют данными из таблицы, получая и сохраняя набор ключей. Ключи используются для получения текущих данных из таблицы при прокрутке пользователя на определенную запись. Чтобы определить, предоставляет ли драйвер эту поддержку, вызовите функцию API ODBC с параметром
::SQLGetInfo
SQL_SCROLL_OPTIONS .Если вы пытаетесь открыть dynaset без поддержки набора ключей, вы получите
CDBException
значение возвращаемого кода AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.Драйвер ODBC для источника данных должен поддерживать расширенную выборку.
Расширенная выборка — это возможность прокрутки назад, а также вперед по результирующей записи SQL-запроса. Чтобы определить, поддерживает ли драйвер эту возможность, вызовите
::SQLGetFunctions
функцию API ODBC с параметром SQL_API_SQLEXTENDEDFETCH .
Если вы хотите обновить обновляемые dynasets (или моментальные снимки, в этом случае), драйвер 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.