scatter 命令

示例 请参阅

从当前记录中把数据复制到一组内存变量或数组中。

语法

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

参数
FIELDS FieldNameList

指定字段,命令将其内容传送到内存变量或数组中。如果省略 FIELDS FieldNameList,则传送所有字段。如果在字段列表后放一个关键字 MEMO ,则字段列表中可以包含备注字段。SCATTER 总是忽略通用和图片字段,即使包括了 MEMO 关键字也是如此。

FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton

通过 LIKE 和 EXCEPT 子句,有选择地把字段中的内容传送到内存变量或数组中。如果包括 LIKE 子句,那么与 Skeleton 相匹配的字段被传送到内存变量或数组中。如果包括 EXCEPT Skeleton,那么除了与 Skeleton 相匹配的字段外,其他所有字段都传送到内存变量或数组中。
Skeleton 支持通配符。例如,如果要把所有以 A 和 P 字母开头的字段传送到内存变量或数组中去,可以使用如下命令:

SCATTER FIELDS LIKE A*,P* TO myarray

可以同时使用 LIKE 和 EXCEPT 子句,如:


SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myarray


MEMO

指定字段列表中包含了备注字段。默认情况下,SCATTER 
不处理备注字段。
将很大的备注字段传送到内存变量或数组时,必须有足够的内存。如果缺乏足够的内存,Visual FoxPro 将产生相应的错误信息。如果某一备注字段太大,内存中装不下,那么该字段及字段列表中的其他备注字段的内容都不会传送。如果没有传送备注字段,那么对应的内存变量或数组元素设置为“假”(.F.)。

TO ArrayName

指定接受记录内容的数组。从第一个字段起,SCATTER 按顺序将每个字段的内容复制到数组的每个元素中。
如果指定数组的元素比字段数多,则多余数组元素的内容不发生变化。如果指定数组不存在,或者它的元素个数比字段数少,则系统自动创建一个新数组,数组元素与对应字段具有相同的大小和数据类型。

TO ArrayName BLANK

创建一个数组,它的元素与表中字段具有相同大小和数据类型,但没有内容。

MEMVAR

把数据传送到一组内存变量而不是数组中。SCATTER 为表中每个字段创建一个内存变量,并把当前记录中各个字段的内容复制到对应的内存变量中。新创建的内存变量与对应字段具有相同的名称、大小和数据类型。
如果 scatter 命令中包括字段列表,则为字段列表中每个字段都创建一个内存变量。
要引用与当前表中字段有相同名称的内存变量,应在内存变量名前加上限定符 M.。

重要内容 
不要在使用 MEMVAR 时加入 TO。如果加入了 TO, Visual FoxPro 创建一个名为 MEMVAR 的数组。

MEMVAR BLANK

创建一组空内存变量,每个内存变量与相应的字段有相同的名称、数据类型以及相同的大小。如果 SCATTER 中包含一字段列表,则为字段列表中的每一个字段创建一个内存变量。

NAME ObjectName

仅用于 Visual FoxPro ,它创建一个对象,对象的属性与表中字段具有相同名称。每个对象属性的值都是表中对应字段的内容。对于表中的备注或通用字段不能创建属性。
要引用与打开的表同名的对象属性,应在对象名前加上限定符 M. 。例如:

USE customer
SCATTER NAME customer

? customer.company && 返回表的值
? M.customer.company && 返回对象属性的值


说明

SCATTER 和 COPY TO ARRAY 相似。所不同的是 COPY TO ARRAY 把多个记录复制到一个数组,而 SCATTER 只将一个记录复制到数组或一组内存变量,并且在数组或内存变量不存在时,SCATTER 能自动创建。
使用 GATHER 命令可以将内存变量或数组元素中的内容复制到表记录中。