В Visual FoxPro с помощью курсоров-адаптеров вы можете извлекать данные из местных (local) и удаленных (remote) источников данных следующих типов:

Класс CursorAdapter расширяет поддержку работы с различными типами источников данных, как если бы это были собственные курсоры Visual FoxPro. Объекты CursorAdapter objects provide the following capabilities:

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

Замечание:
Visual FoxPro не поддерживает использование отношений (relations) с объектами CursorAdapter. Однако, вы можете использовать отношения между курсорами, связанными с курсорами-адаптерами.

Для получения подробной информации о классах CursorAdapter, DataEnvironment и Cursor смотри Класс Class, Объект DataEnvironment и Объект Cursor.

Взаимодействие с функциями TABLEUPDATE( ) и TABLEREVERT( )

Функция TABLEUPDATE( ) распознает объекты CursorAdapter и может с ними работать. TABLEUPDATE( ) делегирует свои операции курсору-адаптеру, связанному с курсором. TABLEREVERT( ) оперирует на объектах CursorAdapter тем же самым образом, что и прочих буфферированных курсорах.

За подробной информацией о том, как объекты CursorAdapter objects воздействуют на поведение функций TABLEUPDATE( ) и TABLEREVERT( ) смотри TABLEUPDATE( ) функция и TABLEREVERT( ) функция.

Автоматическое обновление и CursorAdapter'ы

Visual FoxPro автоматически генерирует SQL INSERT, UPDATE и DELETE команды для местных (local) и удаленных (remote) представлений. При работе с объектами CursorAdapter, вы можете настраивать и управлять тем, как Visual FoxPro генерирует эти SQL INSERT, UPDATE и DELETE команды.

Когда свойства InsertCmd, UpdateCmd и DeleteCmd объекта CursorAdapter ничего не содержат, Visual FoxPro генерирует соответствующие SQL команды автоматически. Вы должны сами опрделиться с тем - будет ли автоматическая генерация этих команд пригодна для используемого вами источника данных. Для автоматической генерации SQL INSERT, UPDATE и DELETE команд, вы должны установить следующие CursorAdapter-специфичные свойства:

К свойствам Tables и UpdateNameList применимы следующие общие правила:

  • Tables

    Чтобы разрешить автоматическое обновление, вы должны предоставить список имен таблиц именно в том порядке, в каком вы желаете видеть их в командах SQL INSERT, UPDATE и DELETE.

  • UpdateNameList

    Вы должны указать разделенный запятыми список, состоящий из пар местных (local) и полных удаленных (remote) имен полей. Каждая пара имен состоит локального имени поля со следующим за ним полным именем удаленного поля. Полное имя удаленного поля (remote field name) показывается как <remote table name>.<remote field name>, где <remote table name> соответствует имени из списка значений свойства Tables.

Вы должны, кроме того, установить соответствующие ключевые поля, если вы установили в True (.T.) следующие свойства CursorAdapter'а:

Для получения подробной информации о SQL командах, используемых для автоматического обновления смотри статьи INSERT - SQL команда, UPDATE - SQL команда, and DELETE - SQL команда.

Пакетные обновления (Batch Updates)

Объекты CursorAdapter используют пакетное обновление, если свойство BatchUpdateCount установлено в значение большее, чем 1, и верно одно из следующих условий:

  • Объект CursorAdapter установлен для использования одного и того хэндла ODBC декларации для всех разрешенных операций, а именно, INSERT, UDPATE и DELETE, что определено свойствами AllowInsert, AllowUpdate и AllowDelete.

  • Объект CursorAdapter установлен для использования одного и того же объекта ADODB Command для всех разрешенных операций.

  • Объект CursorAdapter использует "XML" в качестве источника данных для всех разрешенных операций.

Если используется пакетное обновление, то не происходят приведенные ниже события CursorAdapter:

  • BeforeInsert

  • AfterInsert

  • BeforeUpdate

  • AfterUpdate

  • BeforeDelete

  • AfterDelete

Если пакетное обновление не получилось, Visual FoxPro пытается послать отдельные обновления для каждой строки входящей в пакет; однако, перечисленные события так и не будут происходить.

Для получения подробной информации смотри статью Свойство BatchUpdateCount.

Автоматическое обновление и объекты ActiveX Data Objects (ADO)

При работе с ADO, вы можете посылать обновления используя два разных метода:

  • Использовать объект CursorAdapter для посылки обновлений с объектом ADO RecordSet используемого методом CursorFill CursorAdapter'а.

    Когда производится автоматическое обновление с использованием ADO RecordSet, при установке свойств InsertCmdDataSource, UpdateCmdDataSource и DeleteCmdDataSource объекта CursorAdapter применяются следующие правила:

    • ADO RecordSet должен быть редактируемым (read/write) и иметь доступные закладки (bookmarks). Закладки всегда доступны при использовании объекта RecordSet на стороне клиента. Закладки могут быть доступны при использовании Keyset или Static server-side курсоров, если это поддерживается OLE DB провайдером.

    • Обновления производятся по принципу "field-by-field". Для каждой обновляемой записи, объект CursorAdapter ищет оригинальную запись в ADO RecordSet, изменяет значение в обновляемом поле и вызывает метод Update ADO RecordSet'а. Объект CursorAdapter не вызывает метод UpdateBatch ADO RecordSet'а; вследствие чего ваше приложение при необходимости должно открыто вызвать UpdateBatch.

    При использовании этого метода, вы должны сконфигурировать объект CursorAdapter следующим образом:

      Скопировать код
    THIS.DataSourceType="ADO"
    THIS.UpdateCmdDataSourceType=""
    Кроме того, вы можете использовать построители DataEnvironment и CursorAdapter для строительства обновляемых форм или библиотеки классов DataEnvironment и CursorAdapter и использовать возможности, предоставляемые на закладке "AutoUpdate" построителя CursorAdapter'а для указания ключевых полей, обновляемых полей и прочей необходимой информации.

  • Использовать объект CursorAdapter для прямой посылки обновлений в базу данных, используя пользовательские или автоматичски генерируемые команды обновления.

    При производстве прямого автоматического обновления объекту CursorAdapter требуется объект ADO Command, у которого его свойство ActiveConnection установлено на открытый объект ADO Connection.

    При использовании этого метода, вы должны сконфигурировать объект CursorAdapter следующим образом:

      Скопировать код
    THIS.UpdateCmdDataSourceType="ADO"
    THIS.UpdateCmdDataSource=NewADODBCommandObject
    При использовании этого метода установка THIS.DataSourceType="ADO" не используется.

Автоматическое обновление и XML

Когда в качестве источника данных используется XML объекты CursorAdapter не генерируют автоматически команды SQL INSERT, UPDATE или DELETE, как они делают это для других источников данных, вследствие разнообразия существующих способов для генерации XML. Однако, вы можете использовать объект CursorAdapter для генерации XML UpdateGram и присвоения полученного значения свойству UpdateGram CursorAdapter'а.

Хотя объект CursorAdapter может генерировать XML UpdateGram, вы должны you встроить реальную операцию обновления с использованием подходящих протоколов, таких как SQL XML using HTTP, SQL XML OLE DB или XML Web service в .NET.

При работе с XML источниками данных и генерации XML UpdateGrams применяются следующие правила:

  • Вы должны указать текст команд для свойств InsertCmd, UpdateCmd и DeleteCmd объекта CursorAdapter, которые Visual FoxPro может исполнить при соответствующих операциях вставки, обновления или удаления. Если используется пакетное обновление, что определяется установкой свойства BatchUpdateCount в значение большее, чем 1, UpdateCmd исполняется только один раз на пакет обновления.

  • В значение "XML" должны быть установлены следующие свойства объекта CursorAdapter:

    Если же этого не сделано, то есть перечисленные свойства не установлены в значение "XML", Visual FoxPro исполняет текст команд, занесенный в свойства UpdateCmd, InsertCmd или DeleteCmd, но не генерирует XML UpdateGram.

  • Для корректного создания XML UpdateGram, CursorAdapter требует, чтобы свойства Tables, UpdatableFieldList и UpdateNameList содержали действительные, корректные значения. CursorAdapter может генерировать многотабличный UpdateGram путем определения таблиц и полей в свойствах Tables, UpdatableFieldList и UpdateNameList. Поэтому, вы можете обновить курсор, который представляет многтабличное объединение с помощью функции XMLUPDATEGRAM( ). Для получения подробной информации смотри статью XMLUPDATEGRAM( ) функция.

  • CursorAdapter использует свойство WhereType для генерации секции before в XML UpdateGram. Вследствие этого, когда вы проводите операцию обновления или удаления, свойства KeyFieldList и UpdatableFieldList должны содержать соответствующие ключевые поля. Для получения подробной информации смотри статью Свойство WhereType.

  • Если разрешено строчное буфферирование или свойство BatchUpdateCount установлено равным 1, Visual FoxPro создает XML UpdateGram для каждой операции обновления, вставки или удаления.

    Если разрешено табличное буфферирование и если используется пакетное обновление, что опрелеляется установкой свойства BatchUpdateCount в значение большее, чем 1, Visual FoxPro создает XML UpdateGram для целого пакета изменений. В этом режиме, вы должны вызвать функцию TABLEUPDATE( ), что ожидается для инициализации обновления и генерации XML UpdateGram.

Смотри также