Создает временную таблицу, которая существует только до момента ее закрытия.

CREATE CURSOR alias_name 
...[CODEPAGE=nCodePage]
   (fname1 cFieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] 
   [CHECK lExpression [ERROR cMessageText]] 
   [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]]
   [DEFAULT eExpression] [UNIQUE [COLLATE cCollateSequence]]
   [NOCPTRANS] [, fname2 ...]) 
   | FROM ARRAY ArrayName

Параметры

alias_name

Указывает имя создаваемой временной таблицы. Параметр alias_name может быть выражением, оцениваемым в имя.

nCodePage

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

fname

Указывает имя поля временной таблицы. Каждый fname может представлять собой выржание, оцениваемое в имя.

cFieldType

Указывает одну букву или длинное имя, определяющие тип данных, которые будут храниться в поле.

nFieldWidth

Определяет ширину поля, указанного в fname. Некоторые типы данных требуют, чтобы вы указали значение для nFieldWidth. Для некоторых типов данных это значение устанавливается автоматически

nPrecision

Определяет число десятичных мест для указанного типа данных. Некоторые типы данных требуют указания этого значения, для некоторых типов данных, например, символьных, это значение абсурдно.

В приведенной ниже таблице показаны возможные значения для параметров cFieldType, nFieldWidth и nPrecision.

cFieldType nFieldWidth nPrecision Описание

W, Blob

-

-

Blob

C, Char, Character

n

Character поле с длиной n

Y, Currency

Currency

D, Date

Date

T, DateTime

DateTime

B, Double

d

Double

G, General

General

I, Int, Integer

Integer

L, Logical

Logical

M, Memo

Memo

N, Num, Numeric

n

d

Numeric поле с длиной n, имеющее d десятичных мест

F, Float

n

d

Поле Numeric длиной n имеющее d десятичных мест с плавающей запятой

Q, Varbinary

n

-

Varbinary поле с длиной n

V, Varchar

n

-

Varchar поле с длиной  n

Параемтры nFieldWidth и nPrecision игнорируются для типов W, Y, D, T, G, I, L и M. Если nPrecision не указана для типов данных N, F или B, то nPrecision установливается в значение по умолчанию равное zero (нет десятичных мест).

NULL | NOT NULL

Определяет - будут ли допустимы для хранения в поле null-значения. NULL разрешает зранение null-значений, а NOTNULL запрещает.

CHECK lExpression

Указывает правило проверки для поля. Параметр lExpression должен оцениваться в логическое выражение и может быть пользовательской функцией или хранимой процедурой.

ERROR cMessageText

Определяет сообщение об ошибке, которое будет выведено пользователю в случае,  когда правило проверки возвращает значение .F. и генерируется соответствующая ошибка. Сообщение отображается только в случае, когда данные изменены в окнах Browse или Edit.

AUTOINC [NEXTVALUE NextValue [STEP StepValue]]

Разрешает автоувеличение для поля.

NextValue указывает начальное значение и может быть как положительным, так и отрицательным числом в диапазоне от 2,147,483,647 до -2,147,483,647. Значение по умолчанию для этого параметра равно единице (1). Вы можете установить NextValue используя бокс Next Value на закладке Fields в табличном дизайнере.

StepValue указывает значение, на которое будет увеличиваться значение поля, которо может быть положительным, не равным нулю,  в диапазоне от 1 до 255. Значением по умолчанию является 1. Вы можете установить значение StepValue используя бокс Step на закладке Fields табличного редактора.

Значения поля автоувеличения не могут хранить null-значения (.NULL.). Автоувеличение включается, когда размер шага автоувеличения больше чем 0.

NoteЗамечание

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

DEFAULT eExpression

Указывает значение по умолчанию для поля. Тип данных выражения eExpression должен быть того же самого типа, что и тип данных, которое ьудет храниться в этом поре.

Если вы используете опцию AUTOINC для разрешения автоувеличения значений поля и указываете значение по умолчанию, Visual FoxPro хранит введенное вами значение в таблице, но не использует его. Visual FoxPro использует значение по умолчанию, если вы используете команду ALTER TABLE - SQL для удаления автоувеличения для поля.

UNIQUE

Создает индекс-кандидат для поля. Тэг индекса-кандидата имеет тоже самое имя, что и имя поля. Для получения более подробной информации об индексах-кандидатах смотрите Типы индексов Visual FoxPro.

COLLATE cCollateSequence

Определяет последовательность сопоставления, если она отличается от используемой по умолчанию MACHINE. Параметр cCollateSequence должен быть поддерживаемой и действительной последовательностью сопоставления Visual FoxPro. Для получения более подробной инофрмации смотрите описания  Оптимизация международных приложений и Команда SET COLLATE.

NOCPTRANS

Предотвращает трансляцию между разными кодовыми страницами для полей типа Character, Memo и Varchar. Вы можете указать NOCPTRANS только для полей этих типов.

FROM ARRAY ArrayName

Указывает имя существующего массива, который содержит всю необходимую для создания временной таблицы информацию - имена полей, их тип, точность и размер. Вы можете использовать опцию FROM ARRAY вместо указания индивидуальных полей. Для точного формата содержания массива смотрите описание функции AFIELDS().

 

Expand imageПримечания

Вы можете управлять временной таблицей, созданной с помощью  CREATE CURSOR в той же манере, что и любой другой таблицей — вы можете просматривать ее и индексировать, вы можете добавлять и изменять записи. Временная таблица открывается в ближайшей свободной рабочей области и на нее можно ссылаться с помощью псевдоимени. Каждое поле временной таблица определено по всем правилам, как и для обычной таблицы. Эти определения могут  быть получены как из команды, так и из массива. Временная таблица открывается эксклюзивно (в монопольном режиме) независимо от значения установки SET EXCLUSIVE.

Если вы опустити опции NULL и NOT NULL, то будет или нет разрешено хранение в поле null-значений, определяется текущей установкой SET NULL. Однако, если вы опустите в команде опции NULL и NOT NULL, но включите в команду ключевое выражение PRIMARY KEY или ключевое слово UNIQUE, Visual FoxPro не будет обращать внимания на значение установки SET NULL и поле, по умолчанию, получит NOT NULL.

Null-значения и дублированные записи не разрешены в поле, используемом для индекса-кандидата. Однако, Visual FoxPro не сгенерирует ошибки, если вы создаете индекс-кандидат для, которое уже поддерживает null-значения. Visual FoxPro сгенерирует ошибку, если вы попытаетесь ввести null или диблирующее значение в поле, используемое для индекса-кандидата.

NoteЗамечание

Индексы-кандидаты, созданные с помощью включения ключевого слова UNIQUE  (предоставляемого для совместимости с ANSI) в команду CREATE TABLE – SQL или ALTER TABLE – SQL, не являются теми же самыми, которые создаются командой INDEX с ключевым словом UNIQUE. Индекс, созданный с помощью команды INDEX с ключевым словом UNIQUE позволяют дублирование индексных ключей, тогда как индекс-кандидат - нет. Для получения более подробной информации об ключевом слове UNIQUE в команде INDEX смотрите ее описание в Команда INDEX.

Если таблица сконвертирована в другую кодовую страницу, поля, для которых было опрелено NOCPTRANS не транслируются.

CREATE CURSOR...FROM ARRAY распознает все типы полей, доступные в функции AFIELDS() и включает автоувеличение в курсоре, если значение Step указано большим чем ноль (zero).

Expand imageПример

Приведенный ниже пример создает курсор с псевдоименем "employee." В него добавляется чистая запись, заполняется и отображается при выдаче команды BROWSE.

  CopyCode imageСкопировать код
CLOSE DATABASES
CLEAR
CREATE CURSOR employee ;
 (EmpID N(5), Name Character(20), Address C(30), City C(30), ;
  PostalCode C(10), OfficeNo C(8) NULL, Specialty Memo)
DISPLAY STRUCTURE
WAIT WINDOW "Press a key to add a record."

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

ПРиведенный ниже пример использует ключевое слово NOCPTRANS для предотвращения трансляции в другую кодовую страницу. Пример создает курсор с именем "mycursor", который содержит два символьных поля и два мемо-поля. Второе символьное поле, "char2," и второе мемо-поле, "memo2," включают NOCPTRANS для предотвращения трансляции.

  CopyCode imageСкопировать код
CREATE CURSOR mycursor (char1 C(10), char2 C(10) NOCPTRANS,;
   memo1 M, memo2 M NOCPTRANS)

Expand imageСмотрите также