Распечатать страницу

Управление свойствами таблиц и курсоров в Visual FoxPro

« Назад

Курсор – это временная таблица, уничтожаемая после ее закрытия.

Команда CREATE CURSOR – SQL

CREATE CURSOR alias_name
                  
[CODEPAGE = nCodePage]
                   (FieldName1 FieldType [(nFieldWidth [, nPrecision])]

                   [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]]
                   [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]]
                   [DEFAULT eExpression1] [UNIQUE [COLLATE cCollateSequence]]
                   [NOCPTRANS] [, FieldName2...]) | FROM ARRAY ArrayName

создает по списку полей или из массива ArrayName временную таблицу с именем alias_name. Параметр alias_name может быть выражением с именем.

Смысл опций и параметров см. в описании команды CREATE TABLE – SQL.

Пример:

close databases

clear

create cursor Employee ;

(EmpID N(5), Name C(20), Address C(30), City C(30), ;

PostalCode C(10), OfficeNo C(8) NULL, Specialty M)

&&

display structure

wait window "После нажатия на клавишу в курсор будет добавлена запись"

&&

insert into Employee (EmpId, Name, Address, City, PostalCode, ;

OfficeNo, Specialty) ;

values (1002, "Dr. Bonnie Doren", "University of Oregon", "Eugene", ;

"98403", "", "Secondary Special Education")

&& Просмотр добавленной записи

browse

&&

&& Здесь данные могут быть перенесены в постоянную таблицу

&&

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

close all

clear

Функция

CURSORSETPROP(cProperty [, eExpression] [, nWorkArea | cTableAlias])

устанавливает значение свойства текущей или заданной параметром nWorkArea | cTableAlias таблицы или курсора VFP.

CURSORSETPROP( ) определяет, в том числе, как обновляются удаленные таблицы источника данных курсора.

Возвращает .T., если значение свойства установлено, или .F. – в противном случае.

Параметры:

cProperty – изменяемое свойство. Для таблицы VFP может быть изменено только значение свойства Buffering.

eExpression – устанавливаемое значение свойства. Если параметр eExpression опущен, то свойство получает значение по умолчанию.

Имена свойств и их возможные значения приведены в табл. 15.11.

Таблица 15.11

Свойства курсора VFP

cProperty

Значения eExpression

"AllowSimultaneousFetch"

  • .T. – курсоры схожей конфигурации, разделяющие соединение, могут обновлять записи одновременно;
    ·              .F. – не могут.
    Применяется с удаленными видами, разделяемыми соединениями и ODBC-курсорами

"AutoIncError"

  • .T. – генерируется ошибка при попытке вставить или обновить значение поля типа Integer (AutoInc);
    ·              .F. – ошибка не генерируется; поставляемое значение, однако, не используется, а берется соответствующая величина

"BatchUpdateCount"*

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

"Buffering"

  • 1 – (по умолчанию для таблиц) отключает буферизацию записи и таблицы;
    ·              2 – пессимистическая буферизация записи;
    ·              3 – (по умолчанию для видов) оптимистическая буферизация записи;
    ·              4 – пессимистическая буферизация таблицы;
    ·              5 – оптимистическая буферизация таблицы.
    SET MULTILOCKS должен быть установлен в ON для всех значений свойства, кроме 1

"CompareMemo"

  • .T. – (по умолчанию) memo- и general-поля, а для удаленного вида timestamp-поля включаются в опцию WHERE для обновления;
    ·              .F. – не включаются.
    Применяется при автоматическом обновлении таблиц источника данных

"FetchAsNeeded"

  • .T. – данные доставляются, когда это необходимо, например когда выполняется перемещение на запись, данные которой не доставлены;
    ·              .F. – дополнительные данные доставляются во время бездействия.
    Свойство не используется, когда прогрессивная выборка отключена (FetchSize = –1)

"FetchMemo"*

  • .T. – (по умолчанию) доставляются memo- и general-поля вида;
    ·              .F. – не доставляются

"FetchSize"*

Число записей, доставляемых единовременно удаленной таблице. По умолчанию равно 100. Установка FetchSize = –1 означает получение полного результата, ограниченного величиной MaxRecords
Замечание. Единовременная выборка захватывает соединение на все время доставки данных. Это надо учитывать, задавая FetchSize при работе с разделяемым соединением (ShareConnection = .T.)

"KeyFieldList"

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

"MapBinary"

  • .T. – при SQL-передаче данных SQL_BINARY, SQL_VARBINARY и SQL_LONGVARBINARY ODBC-типы данных приводятся к типу данных Varbinary или Blob.
    Для удаленных видов команда CREATE SQL VIEW тип данных ODBC SQL_LONGVARBINARY обрабатывает как тип данных Blob, а типы данных ODBC SQL_BINARY и SQL_VARBINARY – как Varbinary, если длина поля источника данных не более 254 байт, и как Blob – в противном случае;
    ·              .F. – (по умолчанию) при SQL-передаче данных SQL_BINARY и SQL_VARBINARY ODBC-типы данных приводятся к типу данных Character.
    Для удаленных видов команда CREATE SQL VIEW обрабатывает типы данных ODBC SQL_BINARY и SQL_VARBINARY как Memo.
    Замечание. Свойство MapBinary доступно как для чтения, так и для записи, когда рабочая область nWorkArea установлена в 0; доступно только для чтения в случае SQL-курсоров и не применяется для таблиц (параметр nWorkArea равен или больше 1)

"MapVarchar"

  • .T. – при SQL-передаче данных SQL_WVARCHAR и SQL_VARCHAR ODBC-типы данных приводятся к типу данных Varchar. То же осуществляет и CREATE SQL VIEW для удаленных видов;
    ·              .F. – (по умолчанию) при SQL-передаче данных SQL_WVARCHAR и SQL_VARCHAR ODBC-типы данных приводятся к типу данных Character. То же осуществляет и CREATE SQL VIEW для удаленных видов.
    Для свойства MapVarchar справедливо замечание, сделанное при рассмотрении свойства MapBinary

"MaxRecords"*

Максимальное число записей в возвращаемом результате. По умолчанию –1 – возвращаются все записи. MaxRecords = 0 означает, что вид выполняется, но результаты не доставляются

"ParameterList"

Параметры опции WHERE. Формат списка следующий: ''ParameterName1, 'Type1'; ParameterName2, 'Type2'; ...'', где Type – это символ C, Y, D, T, B, I, L, N, F, Q или V, означающий тип данных параметра (см. табл. 15.2)

"Prepared"

  • .T. – SQL-оператор подготовлен для вызовов функции REQUERY( );
    ·              .F. – (по умолчанию) не подготовлен.
    Функция REQUERY( ) используется для повторной выборки данных для SQL-вида. Детали см. в описании функции SQLPREPARE( )

"Refresh"

Задает частоту обновления курсора в текущей сессии данных (устанавливается командой SET DATASESSION). Чтобы задать значение свойства Refresh для всех вновь открытых курсоров, параметр nWorkArea устанавливается в 0. При этом значение свойства Refresh ранее открытых курсоров не изменится.
По умолчанию свойство Refresh равно –2 – используется глобальное refresh-значение, заданное параметром nSeconds2 команды SET REFRESH.
Замечание. Установка свойства Refresh функцией CURSORSETPROP( ) будет проигнорирована, если параметр nSeconds2 команды SET REFRESH имеет значение 0

"SendUpdates"

  • .T. – SQL-обновление посылается таблицам-источникам данных (обновленные в виде данные будут доставлены таблицам-источникам);
    ·              .F. – (по умолчанию) не посылается

"Tables"

Список разделенных запятыми имен удаленных обновляемых таблиц. Должен быть задан при автоматическом обновлении таблиц источника данных

"UpdatableFieldList"

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

"UpdateNameList"

Список разделенных запятыми имен полей удаленных и локальных таблиц, употребляемых в курсоре. Параметр используется для задания VFP-корректных имен полей курсора, когда имена полей в таблице-источнике являются недопустимыми для VFP (например содержат пробелы)

"UpdateType"

Тип обновления:
·              1 или DB_UPDATE – (по умолчанию) старые данные обновляются новыми;
·              2 или DB_DELETEINSERT– старые данные удаляются, а новые добавляются.
Константы DB_UPDATE и DB_DELETEINSERT могут быть использованы, если имеется ссылка на файл FoxPro.h

"UseMemoSize"*

Размер результата (в байтах), превышение которого приводит к тому, что данные для столбца курсора возвращаются как memo-поле. Может изменяться от 1 до 255. По умолчанию равен 255

"WhereType"

Тип опции WHERE в SQL-обновлении удаленных таблиц. Опция WHERE состоит, если значение свойства WhereType равно:
·              1 или DB_KEY – из первичных полей (первичные поля задаются свойством KeyFieldList);
·              2 или DB_KEYANDUPDATABLE – из первичных и обновляемых полей;
·              3 или DB_KEYANDMODIFIED (по умолчанию) – из первичных и изменяемых полей;
·              4 или DB_KEYANDTIMESTAMP – из первичных полей и полей, выявляемых в результате сравнения времени их обновления.
Константы DB_KEY и пр. доступны, если в приложении имеется ссылка на файл FoxPro.h

*Свойство используется для удаленных видов. На локальные виды изменение его значения влияния не оказывает. Если свойство указано для локального вида в функции CURSORGETPROP( ), то она вернет значение по умолчанию.

Функция CURSORSETPROP( ) может быть употреблена для изменения значения свойства FetchSize, установленного функцией SQLSETPROP( ), которое наследуется из свойств SQL-соединения.

Функция

CURSORGETPROP(cProperty [, nWorkArea | cTableAlias])

возвращает значение свойства cProperty текущей или заданной таблицы или курсора VFP. Тип результата – Character, Numeric, Logical, Object или Variant определяется типом свойства cProperty.

Значения параметра cProperty описаны в табл. 15.11 и 15.12.

Таблица 15.12

Свойства курсора VFP, не описанные в табл. 15.11

cProperty

Тип

Что возвращает

"ADOBookmark"

Variant

Значение, отвечающее ActiveX Data Object (ADO) ссылке для текущей записи в ADO-курсоре

"ADOCodePage"

N

Кодовую страницу ADO-курсора, хранимую свойством ADOCodePage курсора

"ADORecordset"

O

Ссылку на ADO-набор записей, ассоциированный с курсором. Доступно только для курсоров, основанных на ADO-наборах записей

"ConnectHandle"

N

Идентификатор соединения; свойство доступно, когда источник данных содержит удаленную таблицу

"ConnectName"

C

Имя соединения, использованное при создании курсора; доступно, когда источник данных содержит удаленную таблицу

"Database"

C

Имя базы данных, содержащей таблицу или вид; если таблица является свободной, то функция вернет пустую строку

"FetchIsComplete"

L

.T., если процесс доставки данных для ODBC- или ADO-курсора завершился, или .F. – в противном случае.
Свойство не поддерживается для таблиц, локальных видов и на уровне окружения (рабочая область 0)

"RecordsFetched"

N

Содержит число доставленных от источника данных записей для ODBC- или ADO-курсора. Это число может не совпадать с числом записей курсора, если они удалялись или добавлялись пользователем. Свойство не поддерживается для таблиц и локальных видов

"SourceName"

C

Длинное имя SQL-вида или таблицы базы данных или полное имя свободной таблицы

"SourceType"

N

Вид источника данных вида:
·              1 – источник данных – это локальный SQL-вид;
·              101 (1 + 100) – курсор создан методом CursorFill;
·              201 (1 + 200) – курсор связан с объектом CursorAdapter методом CursorAttach;
·              2 – вид использует удаленные таблицы;
·              102 (2 + 100) – курсор создан методом CursorFill;
·              3 – источником данных является таблица;
·              103 (3 + 100) – курсор создан методом CursorFill;
·              203 (3 + 200) – курсор связан с объектом CursorAdapter методом CursorAttach;
·              4 – курсор основан на ADO-наборе записей и связан с объектом CursorAdapter;
·              104 (4 + 100) – курсор создан методом CursorFill;
·              204 (4 + 200) – курсор связан с объектом CursorAdapter методом CursorAttach

"SQL"

C

SQL-оператор, выполняемый при создании курсора

Все перечисленные в таблице свойства доступны только для чтения.