Команда APPEND FROM ARRAY

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

Синтаксис:

APPEND FROM ARRAY ArrayName
	[FOR lExpression]
	[FIELDS FieldList]

Параметры:
ArrayName
Задает имя массива, содержащего данные, которые следует копировать в новые записи. Новые записи добавляются в таблицу до тех пор, пока не будут добавлены все строки массива.

Одномерные массивы
Если массив одномерный, команда APPEND FROM ARRAY добавляет в таблицу одну запись. Содержимое первого элемента массива заносится в первое поле вновь добавленной записи, содержимое второго элемента массива ѕ во второе поле записи и т.д.
Если в одномерном массиве больше элементов, чем полей в таблице, лишние элементы игнорируются. Если в таблице больше полей, чем элементов в массиве, лишние поля инициализируются "пустыми" значениями, принимаемыми по умолчанию. Ниже приведены такие значения для каждого типа поля:

Тип поля	Значение по умолчанию
Character	Пробелы
Numeric		0
Currency	0
Float		0
Integer		0
Double		0
Date		Пустая дата (CTOD(''))
DateTime	Пустая дата.время ( CTOT(''))
Logical		Пусто (/ /)
Memo		Пусто (нет содержимого)

Двумерные массивы
Если в команде участвует двумерный массив, новая запись добавляется к таблице для каждой строки массива. Например, если в массиве четыре строки, к таблице будут присоединены четыре новые записи.
Содержимое первого столбца массива заносится в первые поля вновь добавленных записей, содержимое второго столбца во вторые поля новых записей и т.д. Например, если массив состоит из четырех строк и трех столбцов, элементы первого столбца заполнят первые поля каждой из четырех новых записей, присоединенных к таблице.
Если в двумерном массиве больше столбцов, чем полей в таблице, лишние столбцы игнорируются. Если в таблице больше полей, чем столбцов в массиве, лишние поля инициализируются "пустыми" значениями (см. выше).
FOR lExpression
Задает условие добавления записей из массива. Выражение lExpression должно содержать имя поля назначения в его условном выражении.
Перед добавлением строки массива к записи в таблице проверяется элемент массива, который соответствует полю назначения, заданному выражением lExpression. Если элемент массива удовлетворяет условию lExpression, запись добавляется.
Если элемент массива не удовлетворяет этому условию, строка массива не добавляется и проверяется следующая строка массива удовлетворяет она условию или нет.
FIELDS FieldList
Указывает, что обновлять данными из массива следует только поля, приведенные в списке FieldList. Первое поле в списке обновляется содержимым первого элемента массива, второе поле содержимым второго элемента и т.д.

Несоответствие типов данных
Команда APPEND FROM ARRAY может заполнить поле даже в том случае, если тип данных соответствующего элемента массива не совпадает с типом данных поля, но при условии, что данные элемента совместимы с типом данных этого поля. Если данные несовместимы, поле инициализируется пустым значением.

Комментарии:
Memo-поля и поля типа General игнорируются командой APPEND FROM ARRAY. Когда таблица открыта для совместного использования, команда APPEND FROM ARRAY блокирует заголовок таблицы на время добавления записей.

Пример:

* Данный пример иллюстрирует процесс добавления записи в таблицу
* Открывается таблица customer, и команда SCATTER создает массив
* gaCustArray, содержащий пустой элемент для каждого поля в таблице.
* Цикл FOR ... ENDFOR отображает каждое поле на экране. Команда READ
* активизирует команды @ ... GET.
* Если редактирование не будет прекращено клавишей Esc, команда
* APPEND FROM ARRAY присоединит к таблице новую запись. После этого
* данные из массива переменных памяти gaCustArray заменят
* содержимое каждого поля.

SET TALK OFF
CLEAR
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer	&& Open customer table
SCATTER TO gaCustArray BLANK		&& Create a blank array
FOR gnCount = 1 TO ALEN(gaCustArray)	&& Number of rows in array
	@ gnCount, 2 SAY FIELD(gnCount);
		GET gaCustArray(gnCount)		&& Display fields and get info
ENDFOR
READ
IF READKEY( ) != 12			&& If ESC isn't pressed
	APPEND FROM ARRAY gaCustArray	&& Append a record, fill from array
	GOTO BOTTOM
	BROWSE
	DELETE
	PACK
ENDIF
USE
CLEAR

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