从当前记录中复制数据到一组内存变量、一个数组或一个对象。
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 默认忽略备注字段;但是,可以在 MEMO 关键字后的字段列表中包含备注字段。但是,即使包含了 MEMO 关键字,SCATTER 命令也将忽略通用型字段。省略 FIELDS FieldNameList 时,从所有字段中复制值。
FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton
复制与 Skeleton 匹配或不匹配的字段到内存变量或数组。可以同时包含 LIKE 或 EXCEPT 子句。要复制与 Skeleton 匹配的字段的值到内存变量或数组中,请使用 LIKE Skeleton。要复制与 Skeleton 不匹配的所有字段的值到内存变量或数组,请使用 EXCEPT Skeleton。Skeleton 支持通配符。例如,要从以字母 A 和 P 开头的所有字段中复制值到内存变量或数组,可使用下面的代码行:
复制代码
SCATTER FIELDS LIKE A*,P* TO myArray
LIKE 子句可以与 EXCEPT 子句结合使用:
复制代码
SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myArray
MEMO
指定包含一个或多个备注字段的字段列表。注意:
您的计算机必须有足够的内存将很大的备注字段传递到内存变量或数组。如果您的计算机的内存不足,则 Visual FoxPro 将产生一个错误信息。如果某个备注字段太大,内存中装不下,则 SCATTER 不会复制该字段及字段列表中其它备注字段中的数据。如果 SCATTER 没能成功复制备注字段,则对应的内存变量或数组元素的值设置为假(.F.)。
TO ArrayName
指定接收记录内容的数组。从第一个字段起,SCATTER 顺序将每个字段的内容复制到对应的数组元素。如果指定数组所包含的元素比字段数量多,则多余的数组元素保持不变。如果指定的数组不存在,或数组所包含的元素比字段数量少,则 SCATTER 自动创建一个新数组。数组元素与对应字段具有相同的大小和数据类型。
TO ArrayName BLANK
创建一个数组,该数组中的元素与表中的字段具有相同大小和数据类型,但没有内容。
MEMVAR
把数据传送到一组内存变量而不是数组中。SCATTER 为表中每个字段创建一个内存变量,并将当前记录中每个字段的内容复制到相应的内存变量中。新创建的内存变量与对应字段具有相同的名称、大小和数据类型。如果 SCATTER 命令中包含字段列表,则为字段列表中的每个字段都创建一个内存变量。要引用与当前表中字段相同名称的内存变量,应在内存变量名前加上 m. 限定符。警告:
不要在带有 MEMVAR 时包含 TO 。如果包含了
TO,Visual FoxPro 将创建一个名为 MEMVAR 的数组。
包含 BLANK 关键字来创建一组空值的内存变量。每个变量指定为与字段相同的名称、数据类型和大小。如果包含字段列表,则为字段列表中的每个字段创建一个内存变量。
NAME ObjectName [ADDITIVE]
创建一个具有与表中字段名相同的属性的对象。要复制表中每个字段的值到对象属性,则不要包含 BLANK 关键字。若要保持属性为空,则包含 BLANK 关键字。关于基于相应字段类型的空属性包含了什么内容,请参见 EMPTY( ) 函数。不会为表中的通用型字段创建属性。要用当前记录内容更新 ObjectName 中指定的存在的和有效的 Visual FoxPro 对象而不是 COM 对象的属性值,请包含 ADDITIVE 关键字。如果对象不存在,则 Visual FoxPro 自动创建该对象。不能在不带 NAME 子句时使用 ADDITIVE 关键字。这样做将产生一条错误。使用带有 ADDITIVE 的 BLANK ,将忽略具有相同字段名的已存在的属性值。