edit 命令

请参阅

显示要编辑的字段。

语法

EDIT
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FREEZE FieldName]
[KEY eExpression1 [, eExpression2]]
[LAST | NOINIT]
[LPARTITION]
[NAME ObjectName]
[NOAPPEND]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NORMAL]
[NOWAIT]
[PARTITION nColumnNumber [LEDIT] [REDIT]]
[PREFERENCE PreferenceName]
[REST]
[SAVE]
[TIMEOUT nSeconds]
[TITLE cTitleText]
[VALID [:F] lExpression3 [ERROR cMessageText]]
[WHEN lExpression4]
[WIDTH nFieldWidth]
[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN
[COLOR SCHEME nSchemeNumber]

参数

FIELDS FieldList

指定出现在编辑窗口中的字段。这些字段按照 FieldList 中指定的顺序显示。在字段列表中可以包含其他相关表的字段。当包含相关表的字段时,应在字段名前加上表别名和一个句点。

如果省略 FIELDS,将按照字段在表结构中出现的顺序显示表的所有字段。

字段列表可以指定字段或计算结果字段的任意组合,包括其他工作区中打开表的字段。字段列表的语法是:

FieldName1 
   [:R] 
   [:nColumnWidth]
   [:V = lExpression1 [:F] [:E = cMessageText]]
   [:P = cFormatCodes] 
   [:B = eLowerBound, eUpperBound [:F]]
   [:H = cHeadingText]
   [:W = lExpression2]
   [, FieldName2 [:R]...]

计算字段

字段列表中可以包含语句,来创建计算结果字段。计算结果字段中包含用表达式创建的只读数据。表达式可以是任何形式,但它必须是一个有效的 Visual FoxPro 表达式。用于创建计算结果字段的语法是:

以下示例创建一个名为 location 的计算结果字段:

CalculatedFieldName = eExpression

This example creates a calculated field called location:

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer  && Open customer table
EDIT FIELDS location = ALLTRIM(city) + ', ' + country

FIELDS 子句的字段列表包含有 8 个选项,可以对编辑窗口中显示的字段进行特殊处理。

:nColumnWidth

以列为单位指定字段的显示宽度。nColumnWidth 的值并不影响表中该字段的大小,只是改变此字段在编辑窗口中的显示。

:R

下面的示例打开编辑窗口,并显示 cust_id 和 company 这两个字段。其中,字段 cust_id 是只读的,不能更改。

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer  && Open customer table
EDIT FIELDS cust_id:R, company

:V = lExpression1

指定在编辑窗口内执行字段级数据有效性检查的选项。当把光标从此字段上移走时,如果 lExpression1 计算为“真”(.T.),则说明向此字段输入的数据是正确的,光标将移动到下一字段。

如果 lExpression1 取值为“假”(.F.),则输入的数据不正确,光标仍停留在此字段上并显示错误信息。如果 lExpression1 取值为 0,则所输入的数据不正确,光标仍停留在此字段上,但不显示任何错误信息。

默认情况下,只有当修改此字段时,才计算 lExpression1 的值。要强制进行检查,可加入 :F 选项。

如果加入 :E 选项,则可以显示自己定义的错误信息。

对于备注字段,不执行此检验选项。

:F

指定强制有效性检查选项,此选项决定从一个字段移走光标或另一个窗口被激活时,是否计算检验选项表达式 (lExpression1) 的值。如果不包含 :F 选项,则只有修改此字段时,才计算 lExpression1 的值。如果包含 :F 选项,即使此字段未作修改,也要计算 lExpression1 的值。

:E = cMessageText

显示由 cMessageText 指定的错误信息而不是默认的系统信息。

如果有效性检查表达式:V= lExpression1 计算为“真”(.T.),则光标从字段中正常移出。如果该表达式计算为“假”(.F.),则光标仍停留在字段上,并显示错误信息。

如果有效性检查表达式:V= lExpression1 计算为 0,则不显示错误信息,且光标仍停留在被检查的字段上,允许您在有效性检查例程中显示自定义的错误信息。

只有当 SET NOTIFY 为 ON 时,才能显示此错误信息。当 SET BELL 为 ON 时,将会响铃。

下面的示例打开 products 表并显示 product_id 和 prod_name 这两个字段。在 product_id字段中输入一个大于 100 的值来执行字段有效性检验。

:V 指定了有效性检验准则。:F 说明无论数据是否更改,都要强制进行有效性检查。:E把 Visual FoxPro 的系统错误信息替换为用户自定义的错误信息。

在 Visal FoxPro 中,错误信息都显示在主窗口底部的状态栏上。

按 ESC 键关闭编辑窗口。

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products  && Open products table
IF _WINDOWS OR _MAC
   SET STATUS BAR ON
ENDIF
USE products
EDIT FIELDS in_stock :V = in_stock < 100 ;
   :F ;
   :E = 'The stock amount must be less than 100'

:P = cFormatCodes

指定一个模板选项,允许您创建由 cFormatCodes 指定的编辑模板,模板控制编辑窗口中各个字段数据的显示和输入。

有关使用模板编辑代码的详细内容,请参阅 FormatInputMask

下面的示例使用了模板选项,从而在 unit_price 字段上只允许输入特定格式的数值型数据:

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products  && Open products table
EDIT FIELDS unit_price :P = '99,999.99'

:B = eLowerBound, eUpperBound [:F]

指定一组边界值,数据应在这两个边界值之间取值。边界值表达式eLowerBound 和 eUpperBound 应该与此字段的数据类型相匹配,并且不能是用户自定义函数的函数名。如果输入的数据没有落在 eLowerbound 和eUpperBound 之间,将会显示一条系统信息,指明数据的取值范围。

默认情况下,只有当更改字段的内容时,才用边界值检查输入的数据。要强制进行边界值检查,应选用强制检验项 (:F)。

下面的示例保证 in_stock 字段的值在 1 到 100 之间。按 ESC 键关闭编辑窗口。

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products  && Open products table
EDIT FIELDS in_stock :B = 1, 100 :F

:H = cHeadingText

指定标题选项,允许用户用 cHeadingText 指定的标题替换默认的字段名称。默认情况下,编辑窗口中字段名放置在字段左边。

下面的示例为所显示的字段提供用户自定义标题。

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products  && Open products table
EDIT FIELDS prod_name :H = 'Product Name:', ;
   unit_price :H = 'Price per Unit:'

:W = lExpression2

指定 WHEN 选项,根据逻辑表达式 lExpression 的值有条件地禁止光标移动到某个字段上。(:W) 计算 lExpression 的值。如果 lExpression2 取值为“假”(.F.),则不能把光标移到该字段上。如果 lExpression2 取值为“真”(.T.),则可以把光标移到该字段上。lExpression2 也支持用户自义函数。

如果当前字段标记为只读,则禁止向任一字段移动光标。仅当每一字段都包含计算为“假”的 WHEN 子句时,才发生这种情况。

Scope

指定在编辑窗口中显示记录的范围。说明范围的子句有:ALL、NEXTnRecords、RECORD nRecordNumber 以及 REST。edit 命令默认的作用范围是所有记录 (ALL)。

详细内容,请参阅帮助中的Scope 子句 主题。

FOR lExpression1

规定只有满足逻辑条件 lExpression1 的记录才能在编辑窗口中显示。这有助于用户筛选出不需要的记录。

如果 lExpression1 是可优化的表达式,Rushmore 将优化 EDIT FOR 查询。为达到最佳性能,应在 FOR 子句中使用可优化表达式。有关Rushmore 可优化表达式的详细内容,请参阅稍后的 SET OPTIMIZE 命令与《Microsoft Visual FoxPro 6.0 中文版程序员指南》第十五章“优化应用程序”中的“掌握 Rushmore 技术”。

WHILE lExpression2

指定条件,只要逻辑表达式 lExpression2 计算为“真”(.T.),记录就显示在编辑窗口中。

FONT cFontName [, nFontSize]

指定编辑窗口的字体和字体大小,其中字符表达式 cFontName 指定字体名,数值表达式 nFontSize 指定字体大小。例如,下面子句为编辑窗口中显示的字段指定了 16 磅的 Courier 字体:

FONT 'Courier',16 

如果包含了 FONT 子句,但省略了字体大小 nFontSize,编辑窗口将使用 10 磅的字体。

如果省略了 FONT 子句,则将使用 9 磅的 Arial 字体。如果指定的字体无效,则用类似的字体代替。

STYLE cFontStyle

指定在编辑窗口的字形。如果省略了 STYLE 子句,将使用常规字形。

如果您所指定的字形无效,则使用类似的字形代替。

字符 字形
B 粗体
I 斜体
N 常规
O 轮廓
Q 不透明
S 阴影
- 删除线
T 透明
U 下划线

可以包含一个以上的字符以指定组合字形。下面的示例打开编辑窗口,并使用加下划线的字形:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表
IF _WINDOWS
EDIT FIELDS contact FONT 'System', 15 STYLE 'NU'
ENDIF
IF _MAC
EDIT FIELDS contact FONT 'Geneva', 14 STYLE 'NU'
ENDIF


FREEZE FieldName

在编辑窗口中只允许更改 FieldName 中指定的一个字段。其余字段能够显示,但不能编辑。

KEY eExpression1 [, eExpression2]

限制在编辑窗口中所显示记录的范围。使用 KEY 子句,可以指定能够在编辑窗口中显示的记录的索引关键字值 (eExpression1) 或关键字值的范围 (eExpression1,eExpression2)。此表应已建立索引,并且 KEY 子句中包含的索引关键字值的数据类型应该与主控索引文件或主控索引标识中索引表达式的数据类型一致。
在下面的示例中,编辑窗口只显示邮政编码在 10000 到 30000 范围内的记录:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表
SET ORDER TO postalcode
EDIT KEY '10000', '30000'


LAST | NOINIT

保存对编辑窗口外观设置所做的更改。这些更改将保存在 FOXUSER 文件中,其中包括对字段列表、每个字段的大小以及编辑窗口的位置和大小的更改。有关此文件的详细内容,请参阅 SET RESOURCE。
如果在 edit 命令中包含 LAST 子句,编辑窗口按照最近一次保存在 FOXUSER 文件中的配置打开。这将还原最近一次用 edit 命令创建的编辑窗口的配置。如果最近一次在命令窗口中发出的 edit 命令包含一长串子句,使用 EDIT LAST 命令可以避免重复键入这些命令。
如果按 CTRL+Q 退出编辑窗口,则不会保存当前工作期中对编辑窗口配置的更改。

LPARTITION

把光标放置在编辑窗口左分区的第一个字段上。使用 PARTITION 子句,可以把编辑窗口拆分为左、右两个分区。默认情况下,编辑窗口打开时光标放置在右分区的第一个字段上。
如果包含 LPARTITION 子句而无 PARTITION 子句,则光标将放置在编辑窗口的右分区内。

NAME ObjectName

仅用于 Visual FoxPro。
创建编辑窗口的对象引用,允许使用表格控制面向对象的属性操作编辑窗口。有关在 Visual FoxPro 中进行面向对象程序设计的详细内容,请参阅《开发指南》的第三章“面向对象程序设计”。有关为 NAME 子句所创建的编辑窗口指定表格控制属性的详细内容,请参阅表格控制主题。

NOAPPEND

禁止用户通过按 CTRL+Y 或从“查看”菜单中选择“追加方式”向表中添加记录。

重要内容
包含 NOAPPEND 并不禁止用户在编辑窗口中通过例程(用 VALID、WHEN 或 ON KEY LABEL 创建)追加记录。

NODELETE

禁止在编辑窗口中为记录作删除标记。默认时,可以通过按 CTRL+T、从“表”菜单中选择“切换删除标记”,或单击待删除记录最左边的一列为记录作删除标记。

重要内容
包含 NODELETE 并不禁止用户在编辑窗口中通过例程(用 VALID、WHEN 或 ON KEY LABLE 创建)为记录作删除标记。

NOEDIT | NOMODIFY

禁止用户修改表。NOEDIT 与 NOMODIFY 是等价的。无论包含哪一个子句,都可以浏览或搜索此表,但不能编辑。不过,可以追加或删除记录。

NOLINK

解除编辑窗口中左、右分区的链接。默认时,编辑窗口中的左、右分区是链接的;当在某一分区滚动时,另一分区也相应滚动。

NOMENU

从系统菜单栏中移去 Visual FoxPro 的“表”菜单标题以及 FoxPro 早期版本的“浏览”菜单标题,禁止访问“编辑”菜单。

NOOPTIMIZE

关闭 Rushmore 对 edit 命令的优化。有关详细内容,请参阅 SET OPTIMIZE,或《开发指南》的第十七章“优化应用程序”。

NORMAL

按照正常默认设置打开编辑窗口,这些设置包括颜色、大小、位置、标题和控制选项(GROW、FLOAT、ZOOM 等等)。如果省略 NORMAL,并且当前输出窗口是有其自己设置的用户自定义窗口,编辑窗口将使用这些自定义设置。

NOWAIT

编辑窗口打开后,立刻继续程序的执行。程序并不等待关闭编辑窗口,而是继续执行 EDIT NOWAIT 所在程序行下面的程序行。如果省略 NOWAIT,则在程序中发出 edit 命令时,将打开编辑窗口并暂停执行程序,直到编辑窗口关闭为止。
NOWAIT 只用于程序中。从命令窗口发出 edit 命令时,加入 NOWAIT 将不起作用。

PARTITION nColumnNumber

把编辑窗口拆分成左、右两个分区,nColumnNumber 指定拆分条所在的列。例如,如果 nColumnNumber 等于 20,则拆分条放置在编辑窗口的第 20 列上。

LEDIT

指定编辑窗口的左分区处于浏览方式。

REDIT

指定编辑窗口的右分区处于浏览方式。下面的示例将打开一个编辑窗口,拆分条放置在第 20 列上,并且右分区在打开时处于浏览方式。
同时包含两个关键字可以使左、右分区在打开时均处于“浏览”方式。

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表

EDIT PARTITION 30 REDIT


PREFERENCE PreferenceName

保存编辑窗口的属性和选项供以后使用。LAST 能够还原前一工作期中出现的编辑窗口,与此不同,PREFERENCE 在 FOXUSER 资源文件中保存编辑窗口的属性而没有时间限制,可随时获取。有关 FOXUSER 资源文件的详细内容,请参阅 SET RESOURCE。
第一次发出带有特定参数设置名称 PreferenceName 的 edit 命令时,将在 FOXUSER 文件中创建一个数据项,保存编辑窗口的配置。此后若发出带有相同参数设置名称的 edit 命令,则把编辑窗口还原为此参数设置名称所表示的状态。当编辑窗口关闭时,将更新该参数设置。

参数设置名称最多可包含 10 个字符,并应以字母或下划线开头,可包含字母、数字和下划线的任意组合。
如果您刻意要使用某个参数设置,可以禁止对其进行更改。关闭编辑窗口,发出 SET RESOURCE OFF 命令,并以表的方式打开 FOXUSER,然后把逻辑字段 READONLY 的值改为“真”(.T.),就可以把包含参数设置的字段改为只读字段。
有关 FOXUSER 资源文件的详细内容,请参阅 SET RESOURCE。

REST

禁止记录指针从当前位置移动到表的头部。默认情况下,edit 命令把记录指针定位于表的头部。

SAVE

使编辑窗口和所有备注字段的文本编辑窗口处于活动状态并可见(打开)。在使用鼠标或键盘循环遍历其他打开的窗口后,即返回到编辑窗口。
SAVE 只可用在程序中。在命令窗口中,使用 edit 命令时包含 SAVE 不起作用,因为 EDIT SAVE 在交互方式时总是默认的。

TIMEOUT nSeconds

指定编辑窗口等待输入的时间。数值表达式 nSeconds 指定经过多少秒仍没有输入,编辑窗口就自动关闭。
TIMEOUT 只在程序中可用。从命令窗口中发出带此子句的 edit 命令时没有什么作用。下面的示例中,如果 10 秒钟内没有输入,则编辑窗口关闭。

DEFINE WINDOW wEdit FROM 1,1 TO 24,40 ;
CLOSE ;
GROW ;
COLOR SCHEME 10
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表
EDIT WINDOW wEdit ;
FIELDS phone :H = 'Phone Number:' , ;
company :H = 'Company:' ;
TIMEOUT 10
RELEASE WINDOW wEdit 


TITLE cTitleText

用 cTitleText 指定的标题改写编辑窗口标题栏中出现的默认表名或别名。否则,正被浏览的表的名称或别名将出现在标题栏上。
如果发出 EDIT WINDOWS 命令把编辑窗口放在某个用户自定义窗口中,则编辑窗口的标题将替换用户自定义窗口的标题。

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表
EDIT;
TITLE 'My Edit Window' ;
FIELDS phone :H = 'Phone Number' , ;
company :H = 'Company:'


VALID lExpression3

在编辑窗口中执行记录级有效性检查。只有在更改了记录,并且把光标移到另一个记录上时才执行 VALID 子句。如果只是对备注字段作了更改,则不执行 VALID 子句。
如果 VALID 子句返回“真”(.T.),那么可以把光标移到另一个记录上。如果 VALID 子句返回“假”(.F.),则光标仍停留在当前字段上,Visual FoxPro 显示错误信息。如果包含 ERROR 
子句,则可以在 VALID 子句返回“假”值时显示自定义的错误信息。字符表达式 cMessageText 作为错误信息显示。如果 VALID 子句的返回值为 0,则光标仍然停留在当前字段上,但不显示错误信息。

不要把 VALID 子句与启用字段有效性检查的检验选项 (:V) 混淆起来。

:F

在用户把光标移到下一个记录之前强制执行 VALID 子句。在这种情况下,即使当前记录未作更改,也执行 VALID 子句。

ERROR cMessageText

用 cMessageText 定义错误信息的内容,并指定用此错误信息改写系统默认信息。当 VALID 子句返回“假”(.F.) 时,Visual FoxPro 显示自定义的错误信息。

WHEN lExpression4

当用户把光标移到另一个记录上时,计算某个条件是否被满足。如果 lexpression4 为“真”(.T.),则用户可以修改光标所在的记录。如果 lexpression4 为“假”(.F.) 或 0,则光标所在的记录成为只读记录,不能修改。
当激活另一个窗口时,不执行 WHEN 子句。

WIDTH nFieldWidth

限制编辑窗口每个分区中所有字段所能显示的字符数不超过 nFieldWidth。包含 WIDTH 子句并不更改表中字段的大小,只改变字段在编辑窗口中的显示方式。如果已经用 FIELDS 子句指定了某个字段的宽度,则此宽度值将忽略由 WIDTH 子句为这个字段指定的宽度值。

WINDOW WindowName1

指定一个用户自定义窗口,编辑窗口具有与之相同的特征。例如,如果创建此用户自定义窗口时使用了 FLOAT 子句,则编辑窗口也可以移动。所指定的窗口不一定要活动或可见,但必须已定义。

IN [WINDOW] WindowName2

指定一个父窗口,编辑窗口在其中打开。编辑窗口并不继承父窗口的特征。在父窗口中激活的编辑窗口不能移出父窗口外。如果父窗口移动,则编辑窗口也随之移动。
要访问编辑窗口,必须首先用 DEFINE WINDOW 定义其父窗口,并且父窗口应该活动并可见。

IN SCREEN

当一个用户自定义窗口活动时,把编辑窗口明确地放置在 Visual FoxPro 主窗口中。

COLOR SCHEME nSchemeNumber

指定编辑窗口颜色的配色方案编号。在 FoxPro for MS-DOS 中,默认时编辑窗口选用配色方案 10(浏览)指定的颜色。
在 Visual FoxPro 中,编辑窗口选用由控制面板的“颜色”程序建立的配色方案。

说明

edit 命令有助于在一个窗口内编辑选定表。edit 命令在功能上与 CHANGE 命令等价。
如果按 ESC 键退出编辑窗口,则放弃对字段所做的最近一次修改。但是,如果在修改完某个字段后,把光标移动到了另一个记录上,则保存对此字段所做的修改。
在程序中,可使用 DEACTIVATE WINDOW 命令保存所做的修改并关闭编辑窗口。在 DEACTIVATE WINDOW 命令中应包含编辑窗口的名称。有关编辑窗口名的详细内容,请参阅 WTITLE( )。

SET SKIP 支持

使用 SET SKIP 命令可以在两个表之间建立一对多关系(请参阅示例)。对于父表中的每个记录,在子表中都可能有多个相关记录。如果创建了一个一对多关系,则可以使用 edit 命令查看父表和子表的记录。
父记录只出现一次,子表中第一个匹配的记录显示在旁边,余下的匹配记录则显示在父记录和第一个匹配子记录之后。在 Visual FoxPro 中,由编辑窗口的当前字体决定重复父记录信息的填充字符。

有关详细内容,请参阅 SET SKIP。

COL( ) 和 ROW( ) 支持

函数 COL( ) 和 ROW( ) 返回编辑窗口光标在屏幕上的当前行、列坐标。如果编辑窗口在 Visual FoxPro 主窗口中打开,则返回的光标位置是相对于 Visual FoxPro 主窗口,而不是编辑窗口。如果编辑窗口在某个用户自定义窗口中打开,则 COL( ) 和 ROW( ) 返回的光标位置相对于这个用户自定义窗口。