Команда COPY TO ARRAY

Копирует данные в массив из таблицы, выбранной в данный момент.

Синтаксис:

COPY TO ARRAY ArrayName
	[FIELDS FieldList]
	[Scope] [FOR lExpression1] [WHILE lExpression2]
	[NOOPTIMIZE]

Параметры:
ArrayName
Задает массив, в который нужно скопировать данные из таблицы.
FIELDS FieldList
Указывает, что в массив следует скопировать только поля, включенные в список FieldList. Если опустить предложение FIELDS FieldList, все поля будут скопированы в массив, если у него достаточно столбцов.
Scope
Задает диапазон записей, копируемых в массив. В копировании будут участвовать только записи указанного диапазона. Он может задаваться следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. Подробнее о предложениях диапазона см. тему Предложения диапазона или главу 2 "Оптимизация приложений" Руководства разработчика.
По умолчанию в команде COPY TO ARRAY используется диапазон ALL.
FOR lExpression1
Задает копирование только записей, удовлетворяющих логическому условию lExpression1. Предложение FOR позволяет выполнять условное копирование записей в массив, отфильтровывая ненужные записи.
Технология Rushmore допускает оптимизацию запроса COPY TO ARRAY с предложением FOR lExpression1, если lExpression1 является оптимизируемым выражением. Для повышения производительности рекомендуется пользоваться в предложении FOR оптимизируемым выражением. Подробнее о выражениях, оптимизируемых по технологии Rushmore, см. темы SET OPTIMIZE и Основы технологии Rushmore и главу 17 "Оптимизация приложений" Руководства разработчика. WHILE lExpression2
Задает условие, согласно которому записи будут копироваться в массив, пока логическое выражение lExpression2 остается истинным (.T.).
NOOPTIMIZE
Блокирует оптимизацию выполнения команды COPY TO ARRAY по технологии Rushmore. Подробнее об этом см. темы SET OPTIMIZE и Основы технологии Rushmore, а также главу 17 "Оптимизация приложений" Руководства разработчика.

Комментарии:
Команда COPY TO ARRAY аналогична команде SCATTER. Команда COPY TO ARRAY копирует несколько записей в массив, а SCATTER только одну запись в массив или в набор переменных памяти. Обе команды, COPY TO ARRAY и SCATTER, создают новый массив, если массива с заданным именем не существует.

Чтобы скопировать одну запись в массив, можно задать одномерный массив. В состав такого массива должно входить столько же элементов, сколько полей входит в таблицу, не считая memo-полей. Memo-поля команда COPY TO ARRAY игнорирует.

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

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

Каждая запись сохраняется в одной строке массива, а каждое поле записи сохраняется в одном столбце массива. В каждой записи первое поле сохраняется в первом столбце массива, второе поле во втором столбце и т.д. Если в массиве оказалось больше столбцов, чем полей в таблице, все оставшиеся столбцы не изменяются. Если в массиве меньше столбцов, чем полей в таблице, лишние поля не сохраняются в массиве.

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

Содержимое массива можно скопировать в новые табличные записи командой APPEND FROM ARRAY. Кроме того, с помощью команды GATHER можно скопировать данные из массива или из набора переменных памяти в записи таблицы.

Пример:

* В следующем примере открывается таблица customer. Затем создается
* двумерный массив, в него копируются первые три записи таблицы
* customer. Команда DISPLAY MEMORY показывает данные, сохраненные в
* массиве.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer	&& Opens Customer table

DIMENSION gaTemp(3,10)
COPY NEXT 3 TO ARRAY gaTemp
DISPLAY MEMORY LIKE gaTemp

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 04.12.2002