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

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

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

SCATTER [FIELDS FieldNameList | FIELDS LIKE Skeleton
   | FIELDS EXCEPT Skeleton] [MEMO] [BLANK]
   TO ArrayName | TO ArrayName | MEMVAR
   | NAME ObjectName [ADDITIVE]

Параметры

FIELDS FieldNameList

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

SCATTER игнорирует мемо поля по умолчанию; однако, Вы можете включить мемо поля в cписок полей следующим за cписком полей с ключевым словом MEMO. Однако, SCATTER игнорирует поля типа general даже если вы включаете ключевое слово MEMO.

Опускание FIELDS FieldNameList копирует значения со всех полей.

FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton

Копирует поля включяя или исключяя Skeleton в переменные или масив. Вы можете включить выражение LIKE или EXCEPT или оба.

Чтобы скопировать значения полей соответствующих Skeleton в переменные или масив, используйте выражение LIKE Skeleton. Чтобы скопировать значения всех полей кроме тех, которые соответствуют Skeleton в переменные или масив, используйте выражение EXCEPT Skeleton. Skeleton поддерживает групповые символы. Например, чтобы скопировать значения всех полей , которые начинаются с символов A и P в переменные или масив, используйте следующие строки программы:

  CopyCode imageCopy Code
SCATTER FIELDS LIKE A*,P* TO myArray

Выражение LIKE может быть объединено с выражением EXCEPT clause:

  CopyCode imageCopy Code
SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myArray
MEMO

Определяет, что cписок полей включает одно или более мемо поле.

NoteNote

Ваш компьютер должен иметь достаточно памяти для копирования больших мемо полей в переменные или масив. Visual FoxPro генерирует сообщение об ошибке, если ваш компьютер испытывает недостаток в памяти. SCATTER не копирует данные с мемо полей если они слишком большие для помещения в память также непроизводится копирование из любых дополнительных мемо полей в списке полей. Если SCATTER для мемо полей не выполняется, значениям переменных или масива присваивается значение False (.F.).

TO ArrayName

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

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

TO ArrayName

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

MEMVAR

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

Если включен список полей, то SCATTER создает переменную для каждого поля из списке.

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

Caution noteCaution

Невключайте ключевое слово TO c MEMVAR. Visual FoxPro создаст масив с именем MEMVAR если вы включите ключевое слово TO.

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

NAME ObjectName [ADDITIVE]

Создается объект чьи свойства имеют те же имена что и поля таблици.

Чтобы скопировать значение каждого поля таблици в каждое свойство объекта, невключайте ключевое слово BLANK. Чтобы оставлять свойства пустыми, включите ключевое свойство BLANK. Для описания того, что содержат пустые свойства, основанный на соответствующем типе поля, смотрите Функция EMPTY( ). Свойства не создаются для полей типа general существующих в таблице.

Для обновления значений свойств существующего и правильного обекта Visual FoxPro определенного ObjectName, но не COM объекта, значениями из текущей записи, включите ключевое слово ADDITIVE. Если объект несуществует, Visual FoxPro создаст его автоматически. Вы не можете использовать ключевое слово ADDITIVE без выражения NAME. Такое выражение генерирует ошибку.

Использование BLANK с ADDITIVE опускает значения для существующих свойств которые имеют соответствующие имена полей.

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

Если свойства, соответствующие именам полей не существуют для объекта, SCATTER...NAME ADDITIVE автоматически создает их. Однако, SCATTER не может создавать все необходимые свойства, потому что некоторые могут бы быть помечены как Hidden или Protected. Если Visual FoxPro неможет создать или установить свойство, генерируется ошибка. Например, вы можете иметь имя поля, которое соответствует имени свойства объекта Visual FoxPro, имеет такую же длину и тип данных. Однако, Visual FoxPro генерирует ошибку если иммя поля соответствует методу, событию, или имени объекта.

Вы можете избежать проблем при использовании объекта, созданного SCATTER...NAME в отличии от других классов VFP. В отличие от того, когда SCATTER используется только с NAME, Visual FoxPro не перезаписывает существующий объект создавая новый объект.

SCATTER...NAME ADDITIVE не генерирует ошибку когда свойство доступное для чтения неможет быть установлено для поля в таблице. Однако, значение свойства остается неизменным.

Для ссылки на свойство в объекте, которое имеет то же имя что и открытая таблица, помещайте спецификатор m. перед именем свойства. Следующий пример отображает значение поля Company в таблице Customer далее значение свойства Company объекта Customer:

  CopyCode imageCopy Code
USE Customer
SCATTER NAME Customer
? Customer.Company  && Returns the table value
? m.Customer.Company  && Returns the object property value

Expand imageПримеры

Пример 1

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

  CopyCode imageCopy Code
CREATE TABLE Test FREE ;
   (Object C(10), Color C(16), SqFt n(6,2))

SCATTER MEMVAR BLANK
m.Object="Box"
m.Color="Red"
m.SqFt=12.5
APPEND BLANK
GATHER MEMVAR
BROWSE

Пример 2

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

  CopyCode imageCopy Code
CREATE TABLE Test FREE ;
   (Object C(10), Color C(16), SqFt n(6,2))

SCATTER NAME oTest BLANK
oTest.Object="Box"
oTest.Color="Red"
oTest.SqFt=12.5
APPEND BLANK
GATHER NAME oTest
RELEASE oTest
BROWSE

Пример 3

Предположим, что вы имеете две или больше таблици или курсора и желаете создать объект, который комбинирует данные из этих курсоров. Следующий пример выбирает Таблицу Customer и использует SCATTER...NAME для создания объекта oCustomer и его свойства из полей таблици Customer. Потом SCATTER...NAME...ADDITIVE обновляет значения из полей ReportDate и Rating таблици CreditHistory и полей CookieText и SessionId таблици MySessionTable в объекте oCustomer или создает соответствующие свойства если они не существуют.

  CopyCode imageCopy Code
SELECT Customer
SCATTER NAME oCustomer
SELECT CreditHistory
SCATTER FIELDS ReportDate, Rating NAME oCustomer ADDITIVE
SELECT MySessionTable
SCATTER FIELDS CookieText, SessionId NAME oCustomer ADDITIVE

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