Копирует данные из текущей записи в набор переменных, в масив, или в объект.
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 в переменные или масив, используйте следующие строки программы:
Copy Code
SCATTER FIELDS LIKE A*,P* TO myArray
Выражение LIKE может быть объединено с выражением EXCEPT clause:
Copy Code
SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myArray
- MEMO
-
Определяет, что cписок полей включает одно или более мемо поле.
Note
Ваш компьютер должен иметь достаточно памяти для копирования больших мемо полей в переменные или масив. Visual FoxPro генерирует сообщение об ошибке, если ваш компьютер испытывает недостаток в памяти. SCATTER не копирует данные с мемо полей если они слишком большие для помещения в память также непроизводится копирование из любых дополнительных мемо полей в списке полей. Если SCATTER для мемо полей не выполняется, значениям переменных или масива присваивается значение False (.F.).
- TO ArrayName
-
Определяет массив в который копируется содержимое записей. Начинаясь с первого поля, SCATTER копирует содержимое каждого поля в каждый элемент массива в последовательном порядке.
Если массив, заданный вами, содержит больше элементов чем число полей, лишние элементы массива остаются неизменными. SCATTER автоматически создает новый массив, если массив еще не существует, или если он содержит меньше элементов чем число полей. Элементы массива имеют тот же самый размер и типы данных что и скопированные поля.
- TO ArrayName
-
Создает массив с пустыми элементами, которые имеют тот же размером и тип что и поля таблици.
- MEMVAR
-
Копирует данные в набор переменных вместо масива. SCATTER создает одну переменную для каждого поля таблици и наполняет каждую переменную данными из связанного поля текущуй записи, задавая переменной тоже имя, размер и тип данных что и поле.
Если включен список полей, то SCATTER создает переменную для каждого поля из списке.
Для ссылки на переменную которая имеет тоже имя что и поле в текущей таблице, помещайте спецификатор
m.
перед именем переменной.Caution
Невключайте ключевое слово 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 опускает значения для существующих свойств которые имеют соответствующие имена полей.
Примечания
Если свойства, соответствующие именам полей не существуют для объекта, 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
:
![]() | |
---|---|
USE Customer SCATTER NAME Customer ? Customer.Company && Returns the table value ? m.Customer.Company && Returns the object property value |
Примеры
Пример 1
Этот пример использует SCATTER чтобы создать ряд переменных основанных на полях тестовой таблици. Каждому полю назначается значение и пустая запись добавляется в таблицу. Данные копируются в таблицу используя команду GATHER.
![]() | |
---|---|
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.
![]() | |
---|---|
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
или создает соответствующие свойства если они не существуют.
![]() | |
---|---|
SELECT Customer SCATTER NAME oCustomer SELECT CreditHistory SCATTER FIELDS ReportDate, Rating NAME oCustomer ADDITIVE SELECT MySessionTable SCATTER FIELDS CookieText, SessionId NAME oCustomer ADDITIVE |
Смотрите также
Справочное руководство
Функция ALINES( )Команда APPEND FROM ARRAY
Команда DECLARE
Команда DIMENSION
Команда GATHER