« Назад
Курсор – это временная таблица, уничтожаемая после ее закрытия.
Команда 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-оператор, выполняемый при создании курсора
|
Все перечисленные в таблице свойства доступны только для чтения.
|