Выполняет команду, заданную в свойстве SelectCmd для загрузки данных из источника, определенного в свойстве CursorAdapter DataSource, создает курсор, загружает непосредственно данные, и выполняет необходимые преобразования данных согласно значениям свойств объекта CursorAdapter DataSourceType и  CursorSchema .

CursorAdapter.CursorFill( [ lUseCursorSchema [, lNoData [, nOptions [, Source ] ] ] ] )

Параметры

lUseCursorSchema

В таблице приводится список возможных значений для lUseCursorSchema.

lUseCursorSchema Описание

True (.T.)

Используется схема данных, заданная в свойстве CursorSchema для создания курсора.

NoteПримечание

Visual FoxPro генерирует ошибку для неверного или пустого значения свойства CursorSchema.

False (.F.) или
пустое

Схема данных из свойства CursorSchema не используется при создании курсора.

Вместо этого, метод CursorFill создает курсор в соответствии с обычными правилами по согласованию типов данных для источника, заданного в свойстве CursorAdapter DataSourceType.

lNoData

Возможные значения параметра lNoData.

lNoData Описание

True (.T.)

Создание курсора, но данные не загружаются.

Если значение свойства CursorAdapter DataSourceType = "ADO", и свойство SelectCmd имеет непустое значение, метод CursorFill пытается вычислить значения заданных параметров из свойства SelectCmd. Если метод CursorFill не может определить данные параметры, то используются значения =  (.NULL.) для этих параметров .

Если значение свойства CursorAdapter DataSourceType = "XML", метод CursorFill создает курсор используя схему, заданную в свойстве CursorSchema, независимо от значения параметра  lUseCursorSchema. Если CursorSchema - пустая или неверная, то Visual FoxPro генерирует сообщение об ошибке.

False (.F.) или
пустое

Создание курсора и загрузка в него данных.

Если Вы задаете данный параметр lNoData для метода CursorFill, и свойство SelectCmd содержит команду выборки в соответствие с SELECT - SQL, которая является параметризованной, то система Visual FoxPro уточняет значения данных параметров в соответствие с общими правилами. Данное действие эквивалентно следующей команде:

  CopyCode imageКопировать Код
SELECT * FROM "customers in specific country" WHERE 1=0
nOptions

Определяет числовое данное как флаг создания курсора. Это значение nOptions используется также в методе CursorRefresh.

В таблице представлены возможные значения параметра nOptions для различных источников данных CursorAdapter DataSourceType.

DataSourceType nOptions

"ADO"

целое число, определяющее тип команд Command или Execution Enum, определенных для объекта ActiveX Data Object (ADO) RecordSet в методе Open. Значение по-умолчанию =  -1.

"XML"

Числовая комбинация, описанная в функции XMLTOCURSOR( )  , исключая значение = 8192, устанавливается автоматически при задании параметра  lUseCursorSchema = True (.T.).

Source

Определяет ссылку на объект  ADO Command или на открытый объект RecordSet.

Объект ADO Command должен иметь заданное свойство ActiveConnection, которое описывает открытие соответствующего объекта  ADO Connection. Когда объект ADO Command загружается в данный параметр Source, Visual FoxPro устанавливает значение свойства ADO Command CommandText из ранее описанного CursorAdapter SelectCmd. Visual FoxPro заранее уточняет все необходимые параметры в свойстве SelectCmd, и передает данные команды объекту ADO Command. Метод CursorFill выполняется по следующей схеме:

  CopyCode imageКопировать Код
CursorAdapter.DataSource.Open( Source,,,,Options )

В данном контексте DataSource - есть объект ADO RecordSet, заданный в свойстве CursorAdapter DataSource, а Source - есть соответствующий объект ADO Command, передаваемый как параметр.

Объект ADO RecordSet должен быть открыт до его использования в методе Source -> CursorFill, который загружает данные в соответствие с правилами ADO RecordSet. В этом случае, значение свойства CursorAdapter DataSourceType должно быть установлено как = "ADO". Свойства  CursorAdapter SelectCmd и DataSource - не используются.

Если Вы не задаете данный параметр Source, метод CursorFill выполняется по следующей схеме:

  CopyCode imageКопировать Код
CursorAdapter.DataSource.Open( CursorAdapter.SelectCmd,,,,Options )

В данном случае: DataSource - есть объект ADO RecordSet, описанный в свойстве CursorAdapter DataSource. Тем не менее, объект ADO RecordSet выполняет команду выборки, заданную в свойстве CursorAdapter SelectCmd вместо использования непосредственно объекта ADO Command. Объект ADO RecordSet должен содержать актуальное свойство ActiveConnection, которое описывает соответствующий объект ADO Connection.

Expand imageВозвращаемое значение

Логического типа. Метод CursorFill возвращает = True (.T.), если курсор с данными успешно создан; = False (.F.), если курсор не создан.

NoteПримечание

Если метод CursorFill возвращает = False (.F.), то курсор не создается. В этом случае событие BeforeCursorClose и событие AfterCursorClose  не выполняются. Для получения подробной информации о выполнении метода CursorFill Вы можете использовать функцию AERROR( )  Другие варианты обработки ошибочных ситуаций: команда ON ERROR, событие Error, и команда TRY...CATCH...FINALLY - не обеспечивают механизм получения дополнительной информации об аварийном завершении выполнения метода, = False.

Expand imageКомментарии

Применяется в: Класс CursorAdapter

Следующая таблица описывает различные варианты поведения данного метода CursorFill при свойстве CursorAdapter DataSourceType .

DataSourceType SelectCmd property behavior

"Native"

CursorFill выполняет SelectCmd, которая содержит выполнимую команду Visual FoxPro SQL SELECT.

"ADO"

CursorFill выполняет SelectCmd как команду открытия курсора ADO RecordSet Open. Вам предварительно нужно определить значение свойства CursorAdapter DataSource как правильный объект ADO RecordSet. Если SelectCmd содержит параметры, Вы должны указать правильный объект ADO Command в параметре метода Source .

Созданные курсоры закрываются вместе с соответствующим объектом ADO RecordSet. Тем не менее,это не касается тех курсоров, которые создаются при использовании метода CursorAttach .

CursorFill не устанавливает значение свойства ADO RecordSet MaxRecords как свойство MaxRecords .

"ODBC"

CursorFill выполняет SelectCmd используя хэндл соединения (connection handle), заданный в свойстве DataSource объекта CursorAdapter. Visual FoxPro возвращает курсор по аналогии с выполнением соответствующих функций SQL Pass-Through. Имя курсора определяется соответствующим свойством  This.Alias.

NoteПримечание

Если несколько объектов типа CursorAdapter используют один хэндл ODBC-соединения, CursorFill может завершиться аварийно по причине занятости используемого соединения (например другим аналогичным объектом). В этом случае задайте значение свойства FetchSize = 1 для всех объектов CursorAdapter , использующих одно соединение , или для каждого объекта создавайте свое соединение.

"XML"

Возможны следующие варианты:

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

  • SelectCmd является командой или функцией, возвращаемой из XML. CursorFill использует функцию XMLTOCURSOR( ) для преобразования XML в курсор. См. дополнительно соответствующие разделы.

Дополнение, Если DataSourceType = "XML", и SelectCmd - является командой или функцией, возвращаемой парсером XML:

  • Параметры XML являются такими же как и для функции XMLTOCURSOR( ). Вы можете определить соответствующие параметры для функции XMLTOCURSOR( ) nFlags как значения параметра CursorFill nOptions. Вы можете также указать дополнительные параметры в функции XMLTOCURSOR( ), или их комбинации для функции XMLTOCURSOR( ).

  • CursorFill варьирует межу выбором  eExpression и cXMLFile для функции XMLTOCURSOR( ) для определения параметра nOptions:

    • если nOptions = 0, CursorFill вычисляет XMLSource как eExpression и ожидает переменную памяти как допустимую строку XML или выражение, результатов вычисления которого является допустимая строка XML.

    • если nOptions = 512, CursorFill вычисляет XMLSource как cXMLFile и ожидает символьную строку, дополнительно заключенную в кавычки ("") или переменную памяти, содержащую допустимое имя файла.

  • Параметр cCursorName в функции XMLTOCURSOR( ) - всегда есть значение свойства Alias для объекта CursorAdapter.

  • Если lUseCursorSchema = True (.T.), CursorFill автоматически добавляет влаг =  8192, для существующего курсора XML.

Когда система Visual FoxPro выполняет метод CursorFill, то уже существующий курсор закрывается, рабочая область с создаваемым курсором становится текущей рабочей областью.

NoteПримечание

Если Вы хотите сохранить уже существующий курсор, то выполните метод  CursorDetach перед запуском метода CursorFill.

Когда система Visual FoxPro подсоединяет курсор (attaches a cursor), Вы не можете изменить структуру командой MODIFY STRUCTURE или  командой ALTER TABLE - SQL  .

Expand imageСм. также