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


ODBC. Библиотека курсоров ODBC

В этом разделе описывается библиотека курсоров ODBC и объясняется, как использовать ее. Дополнительные сведения см. в разделе:

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

Библиотека курсоров и драйверы ODBC уровня 1

Библиотека курсоров ODBC предоставляет драйверы уровня 1 следующим новым возможностям:

  • Переадресация вперед и назад. Драйверы уровня 2 не нуждаются в библиотеке курсоров, так как они уже прокручиваются.

  • Поддержка моментальных снимков. Библиотека курсоров управляет буфером, содержащим записи моментального снимка. Этот буфер отражает удаление и изменение программы для записей, но не добавлений, удалений или редактирований других пользователей. Таким образом, моментальный снимок является текущим, как буфер библиотеки курсоров. Буфер также не отражает собственные дополнения до вызова Requery. Dynasets не используют библиотеку курсоров.

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

Размещенные обновления и столбцы метки времени

Примечание.

Источники данных ODBC доступны через классы ODBC MFC, как описано в этом разделе, или с помощью классов объектов ДОСТУПА к данным MFC (DAO).

Примечание.

Если драйвер ODBC поддерживает SQLSetPos, который MFC использует при наличии, этот раздел не применяется к вам.

Большинство драйверов уровня 1 не поддерживают размещенные обновления. Такие драйверы полагаются на библиотеку курсоров, чтобы эмулировать возможности драйверов уровня 2 в этом отношении. Библиотека курсоров эмулирует поддержку размещенных обновлений, выполняя поиск по изменяющимся полям.

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

Первая проблема связана с обновляемыми моментальными снимками в таблицах со столбцами метки времени. Если таблица, к которой привязан моментальный снимок, содержит столбец метки времени, необходимо вызвать Requery после вызова Edit и Update. Если нет, возможно, вы не сможете изменить ту же запись еще раз. При вызове Edit и последующем Updateвызове запись записывается в источник данных, а столбец метки времени обновляется. Если вы не вызываете Requery, значение метки времени для записи в моментальном снимке больше не соответствует соответствующей метке времени в источнике данных. При попытке повторного обновления записи источник данных может запретить обновление из-за несоответствия.

Вторая проблема касается ограничений класса CTime при использовании функции RFX_Date для передачи времени и даты в таблицу или из нее. CTime Обработка объекта накладывает некоторые издержки в виде дополнительной промежуточной обработки во время передачи данных. Диапазон дат объектов также может быть слишком ограничивающим для некоторых CTime приложений. Новая версия RFX_Date функции принимает параметр ODBC TIMESTAMP_STRUCT вместо CTime объекта. Дополнительные сведения см. в разделе RFX_Date "Макросы и глобальные" в справочнике по MFC.

Использование библиотеки курсоров

При подключении к источнику данных путем вызова CDatabase::OpenEx или CDatabase::Open можно указать, следует ли использовать библиотеку курсоров для источника данных. Если вы создадите моментальные снимки в этом источнике данных, укажите параметр в параметре или укажите CDatabase::useCursorLib значение TRUE для параметра OpenEx Open bUseCursorLib (значение по умолчанию — TRUE).dwOptions Если драйвер ODBC поддерживает dynasets и вы хотите открыть dynasets в источнике данных, не используйте библиотеку курсоров (она маскирует некоторые функции драйвера, необходимые для dynaset). В этом случае не указывайте CDatabase::useCursorLib значение OpenEx FALSE для параметра bUseCursorLib в Open.

См. также

Основы ODBC