scatter 命令 用法
(2009-07-21 15:20:30)
标签:
内存变量数组nameblank子句杂谈 |
分类: vf学习 |
scatter 命令
从当前记录中复制数据到一组内存变量、一个数组或一个对象。
SCATTER [FIELDS FieldNameList | FIELDS LIKE Skeleton
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 。如果包含了
包含 BLANK
关键字来创建一组空值的内存变量。每个变量指定为与字段相同的名称、数据类型和大小。如果包含字段列表,则为字段列表中的每个字段创建一个内存变量。
NAME ObjectName [ADDITIVE]
创建一个具有与表中字段名相同的属性的对象。要复制表中每个字段的值到对象属性,则不要包含 BLANK
关键字。若要保持属性为空,则包含 BLANK 关键字。关于基于相应字段类型的空属性包含了什么内容,请参见 EMPTY( )
函数。不会为表中的通用型字段创建属性。要用当前记录内容更新 ObjectName 中指定的存在的和有效的 Visual FoxPro
对象而不是 COM 对象的属性值,请包含 ADDITIVE 关键字。如果对象不存在,则 Visual FoxPro
自动创建该对象。不能在不带 NAME 子句时使用 ADDITIVE 关键字。这样做将产生一条错误。使用带有 ADDITIVE 的
BLANK ,将忽略具有相同字段名的已存在的属性值。
示例 1
该例用 SCATTER 创建一组基于 test 表中字段的内存变量。然后为每个字段赋值并向表中添加一条新的空记录。
使用 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
该例用带有 NAME 子句的 SCATTER
命令,创建一个带有基于表中字段的属性的对象。然后为对象的属性赋值,并向表中添加一条新的空白记录。使用带有 NAME 子句的
GATHER 命令,将数据复制到表的新记录中。
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
假定您有 2 个或以上的表或临时表,并想创建一个包含这些临时表中的数据的对象。下例选择 Customer 表,并
使用 SCATTER...NAME 命令从 Customer 表中的字段创建 oCustomer 对象及其属性。然后用
SCATTER...NAME...ADDITIVE 在 oCustomer 对象中更新 CreditHistory 表中的 ReportDate 和 Rating 字段值,
以及 MySessionTable 表中的 CookieTex 和 SessionId
字段值,或在这些属性不存在时创建它们。
SELECT Customer
SCATTER NAME oCustomer
SELECT CreditHistory
SCATTER FIELDS ReportDate, Rating NAME oCustomer ADDITIVE
SELECT MySessionTable
SCATTER FIELDS CookieText, SessionId NAME oCustomer ADDITIVE