回复 楼主 ybxiaohu
BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize]]
[STYLE cFontStyle] [FOR lExpression1 [REST]] [FORMAT]
[FREEZE FieldName] [KEY eExpression1 [, eExpression2]] [LAST | NOINIT]
[LOCK nNumberOfFields] [LPARTITION] [NAME ObjectName] [NOAPPEND]
[NOCAPTIONS] [NODELETE] [NOEDIT | NOMODIFY] [NOLGRID] [NORGRID]
[NOLINK] [NOMENU] [NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT]
[PARTITION nColumnNumber [LEDIT] [REDIT]]
[PREFERENCE PreferenceName] [SAVE] [TIMEOUT nSeconds]
[TITLE cTitleText] [VALID [:F] lExpression2 [ERROR cMessageText]]
[WHEN lExpression3] [WIDTH nFieldWidth] [WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN] [Color Scheme nSchemeNumber]
参数
FIELDS FieldList
指定显示在浏览窗口中的字段。这些字段以 Fieldlist 指定的顺序显示。在该字段列表中可包含其他相关表中的字段。在包含一个相关表的字段时,应在字段名前面放一个句号及相关表的别名。
如果忽略 FIELDS 子句,表中的所有字段按其在表结构中出现的顺序显示。
FONT cFontName [, nFontSize]
指定浏览窗口的字体及字体大小。字符型表达式 cFontName 指定字体,数值型表达式 nFontSize 指定字体大小。例如,下列子句指定显示于浏览窗口的字段为 16 磅 Courier 字体:
FONT 'Courier',16
如果在包含 FONT 子句的同时省略了字体大小 nFontSize,则浏览窗口采用 10 磅字体。如果省略 FONT 子句,则采用 8 磅 MS Sans Serif 字体。
如果用户指定的字体不可用,则用具有相似字体特征的字体代替。
STYLE cFontStyle
指定浏览窗口的字形。如果省略 STYLE 子句,则采用常规字形。
如果指定的字形不可用,则使用具有相似特征的字形代替,或使用Normal字体。 字符 字形
B 粗体
I 斜体
N 常规
O 轮廓线
Q 不透明
S 阴影
– 删除线
T 透明
U 下划线
可用多个字符的组合来指定字形。下例打开一个浏览窗口,并采用下划线字形:
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
IF _WINDOWS
BROWSE FIELDS contact FONT 'System', 15 STYLE 'NU'
ENDIF
IF _MAC
BROWSE FIELDS contact FONT 'Geneva', 14 STYLE 'NU'
ENDIF
FOR lExpression1
指定一个条件,只有 lExpression1 为“真”的记录才显示于浏览窗口。
若 lExpression1 是一个可优化表达式,则 Rushmore 优化由 BROWSE FOR 指定的查询。为达到最佳性能,需在 FOR 子句中采用可优化表达式。其它相关信息,请参阅 SET OPTIMIZE 和 用 Rushmore 查询优化数据访问速度。
包含 FOR 子句使记录指针移向符合该条件的第一条记录。包含 REST 子句使记录指针处于当前位置。
REST
防止在 FOR 子句打开浏览窗口时,记录指针从当前位置移向表顶部。若不包含 REST,默认情况下,BROWSE 将记录指针放置在表顶部。
FORMAT
使用格式文件来控制浏览窗口的显示和输入数据的格式。首先应用 SETFORMAT 打开格式文件。以下是从格式文件中提取的、应用于浏览窗口的信息:
要浏览的字段列表
所有 VALID 子句
所有 WHEN 子句
所有 RANGE 子句
字段大小(如 PICTURE 子句所指定)
所有 SAY 表达式(包含 BROWSE 计算结果字段)
下例采用格式文件检查输入到浏览窗口中的数据,忽略由 @ ... GET 指定的位置。
第一行创建一个浏览字段 (cust_id),该字段为 5 个字符宽,并且只允许输入字母和数字。第二行创建一个浏览字段 (company),该字段不能包含空 (blank) 值,且最多只能包含 20 个字母字符。
第三行创建一个浏览字段 (contact),只在该字段为空 (blank) 时才输入数据。
以下是 CUSTENTR.FMT 格式文件的内容,用于检查输入到 customer 表中的数据:
@ 3,0 GET cust_id PICTURE 'NNNNN'
@ 3,0 GET company VALID company != SPACE(40) ;
PICTURE 'AAAAAAAAAAAAAAAAAAAA'
@ 3,0 GET contact WHEN contact = SPACE(40)
* 这是使用格式文件的程序
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
SET FORMAT TO custentr.fmt
BROWSE FORMAT
FREEZE FieldName
允许在浏览窗口中只修改一个字段。使用 FieldName 指定该字段,其他字段可显示但不能编辑。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE FIELDS phone :H = '电话号码:' , ;
company :H = '公司:' ;
FREEZE phone
KEY eExpression1 [, eExpression2]
限制浏览窗口显示的记录范围。用 KEY 指定浏览窗口显示的记录的一个索引关键字值(eExpression1) 或关键字值的范围 (eExpression1,eExpression2)。所浏览的表必须已建立索引,并且索引关键字值或 KEY 子句的值必须与主索引文件或标识的索引表达式具有相同的数据类型。
例如,customer 表包含一个保存邮政编码的字符字段。如果该表已建立邮政编码字段索引,则可在 KEY 子句指定邮政编码的范围。
下例中,只有在 10,000 到 30,000 范围内的邮政编码记录才显示在浏览窗口:
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
SET ORDER TO postalcode
BROWSE KEY '10000', '30000'
LAST | NOINIT
保存浏览窗口外观的任何变更。这些变更可保存于 FOXUSER 文件中,包括字段列表、浏览窗口的位置及尺寸等内容的变更。
如果用户发出带有 LAST 或 NOINIT 子句的 BROWSE 命令,在 SET RESOURCE 为 ON的情况下,以最后保存于 FOXUSER 文件中的配置打开浏览窗口,恢复最后一个BROWSE 命令创建的浏览窗口。如果在命令窗口中最后发出的 BROWSE 命令带有一长串子句,那么使用包含 LAST 或 NOINIT 选项的 BROWSE 命令,可以避免重新键入命令。有关 FOXUSER 文件的详细内容,请参阅 SET RESOURCE。
如果最后一个浏览窗口是由一个包含 PREFERENCE 子句的 BROWSE 命令打开的,BROWSE LAST 将不再恢复原配置。
如果用户按 CTRL+Q 退出浏览,则当前工作区中的浏览窗口配置的任何变更,都不会被保存。
LAST与 NOINIT 作用相同。NOINIT 是为与 dBASE 兼容而提供的。
LOCK nNumberOfFields
指定一个正数, 指明你想在“浏览”窗口左边分区不需要卷动或按 TAB 键就可以看见的字段, 或一个负数, 指明在“浏览”窗口中按 TAB 键右移时保持锁定的字段数。
左边分区大小自动显示你在 nNumberOfFields 中指定的字段数。一个比其它列分隔线宽一象素的列分隔线, 指明锁定列结束的普通列开始的位置。
LPARTITION
指定光标位置在浏览窗口左分区的第一个字段。默认情况下,打开浏览窗口时,光标位于右分区的第一字段。
NAME ObjectName
为浏览窗口创建一个对象引用,允许在操作浏览窗口时使用表格控件的面向对象属性。有关在 Visual FoxPro 中的面向对象编程的其他信息,请参阅 面对对象编程。 有关您能够为使用 NAME 子句创建的“浏览”窗口指定的表格控件属性的内容,请参阅 Grid 控件。
NOAPPEND
禁止用户通过如下方式添加表记录:按 CTRL+Y 键,或选择“表”菜单的“追加记录”命令。
注意 包含 NOAPPEND 并不禁止用户在程序中向浏览窗口中添加记录(由 VALID、WHEN 或 ON KEY LABEL 等命令创建)。
NOCAPTIONS
指定总是使用表或视图的字段名作为列标标题, 即使数据库中包含了字段的友好标题。该子句仅适用于数据库中的表或视图。
NODELETE
禁止在浏览窗口中为记录作删除标记。默认情况下,按 CTRL+T 键、选择 Visual FoxPro 中的表菜单或 FoxPro 早期版本浏览菜单的切换删除标记项,或单击要删除的记录的最左边一列,可为记录作删除标记。包含 NODELETE 不禁止用户在程序中为浏览窗口中的记录作删除标记。
NOEDIT | NOMODIFY
禁止用户修改表。NOEDIT 等同于 NOMODIFY。包含其中任何一个子句,用户可以浏览或搜索表,可以添加或删除记录,但不能编辑。
NOLGRID
删除浏览窗口左分区中字段的网格线。
NORGRID
删除浏览窗口右分区中字段的网格线。
NOLINK
将浏览窗口的左右两部分断开联系。默认情况下,浏览窗口的左分区和右分区链接在一起,即滚动其中一区时,另一区也随之滚动。
NOMENU
从系统菜单栏中删除“表”菜单标题,防止访问“浏览”菜单。
NOOPTIMIZE
禁止 BROWSE 进行 Rushmore 优化。有关详细内容,请参阅 SET OPTIMIZE 和 用 Rushmore 查询优化数据访问速度。
NOREFRESH
禁止对浏览窗口进行刷新。浏览窗口以 SET REPRESH 确定的速度进行刷新。NOREPRESH 对只读文件非常有用,并且可以改进性能。
NORMAL
使用正常的默认设置打开浏览窗口,如颜色、尺寸、标题、位置和控件选项(如 GROW、FLOAT、ZOOM 等等)。如果省略 NORMAL,而当前输出窗口为用户自定义窗口,浏览窗口使用用户自定义设置。
NOWAIT
打开浏览窗口之后继续运行程序。程序不必等待浏览窗口关闭,而是继续执行BROWSE NOWAIT 之后的程序行。若在程序中发出 browse 命令时省略 NOWAIT,则浏览窗口打开后,暂停执行程序,直至浏览窗口关闭。
NOWAIT 只用于程序中。在命令窗口中发出 browse 命令时包含 NOWAIT 无此作用。
PARTITION nColumnNumber
将浏览窗口拆分为左右分区,nColumnNumber 指定拆分条所在的列。例如,nColumnNumber 为 20,则拆分条放置于浏览窗口的第 20 列。
LEDIT
指定浏览窗口的左分区以编辑方式显示。
REDIT
指定浏览窗口的右分区以编辑方式显示。下例打开浏览窗口,使拆分条位于第 20 列,并以编辑方式打开右分区。
若同时包含 LEDIT、REDIT 两个关键字,以编辑方式打开两个分区。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE PARTITION 20 REDIT
PREFERENCE PreferenceName
保存浏览窗口的属性和选项供以后使用。PREFERENCE 不像 LAST 以先前工作区中出现的方式打开浏览窗口,而是将浏览窗口的属性随时存储于FOXUSER 资源文件中。PREFERENCE 可在任何时候恢复。
在第一次发出带有指定设置的 browse 命令时,在 FOXUSER 文件中创建一个保存浏览窗口配置的数据项。以后用同样的状态名发出 browse 命令时,恢复浏览窗口该状态。在浏览窗口关闭时,更新该状态。
状态名可为 10 个字符长,必须以字母或下划线开头,可包括字母、数字或下划线的任意组合。
如果您喜爱某种状态,可禁止其被更改。关闭浏览窗口,发出 SET RESOURCE OFF 命令,将 FOXUSER 作为一个表打开,并将逻辑字段 READONLY 的值更改为“真”(.T.),可将包含状态的记录改为只读记录。
有关 FOXUSER 资源文件的详细内容,请参阅 SET RESOURCE。
若按 CTRL+Q 键退出浏览窗口,则资源文件不保存任何对浏览窗口的更改。
SAVE
保持浏览窗口及其所有备注字段的文本编辑窗口为活动和可视(打开)的。用键盘或鼠标访问其他打开的窗口后,可以返回浏览窗口。
SAVE 仅用于程序中。在命令窗口中发出 browse 命令时包含 SAVE,则无此作用。在默认情况下,BROWSE SAVE 以交互方式工作。
TIMEOUT nSeconds
指定浏览窗口等待输入的时间。数值型表达式 nSeconds 指定在没有任何输入的情况下,浏览窗口保持多少秒后才自动关闭。
TIMEOUT 仅用于程序中。在命令窗口中发出 browse 命令时包含 TIMEOUT,则无此作用。下例中,如果在 10 秒内没有输入,则关闭浏览窗口:
DEFINE WINDOW wBrowse FROM 1,1 TO 24,40 ;
CLOSE ;
GROW ;
Color Scheme 10
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
“浏览”窗口 wBrowse ;
FIELDS phone :H = '电话号码:' , ;
company :H = '公司:' ;
TIMEOUT 10
RELEASE WINDOW wBrowse
TITLE cTitleText
以 cTitleText 指定的标题改写显示于浏览窗口标题栏中的默认表名或别名。否则,要浏览的表的名称或别名显示于标题栏中。
如果发出 BROWSE WINDOW 命令将浏览窗口置于用户自定义窗口中,则浏览窗口的标题替换用户自定义窗口的标题:
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE;
TITLE 'My “浏览”窗口' ;
FIELDS phone :H = '电话号码' , ;
company :H = '公司:'
VALID lExpression2
在浏览窗口中执行记录级有效性检查。VALID 子句仅在记录已被更改并且试图将光标移至另一记录时执行。如果只是对备注字段的更改,不执行 VALID子句。
如果 VALID 返回值为“真”(.T.),用户可将光标移向另一记录;如果 VALID 返回值为“假”(.F.),光标停留在当前记录上,Visual FoxPro 产生一条错误信息。如果VALID 返回值为 0,光标停留在当前记录上,但不显示错误信息。
不要把 VALID 子句和启用字段级有效性的检验选项 (:V) 相混淆。
:F
在用户将光标移至下一个记录之前,强制执行 VALID 子句。这种情况下,即使记录没更改,也执行 VALID。
ERROR cMessageText
指定一条错误信息来替换系统默认的错误信息。在 VALID 返回值为“假”(.F.) 时,Visual FoxPro 显示 cMessageText。
WHEN lExpression3
在用户把指针移到另一条记录时做出评估,若评估为真,则用户可以修改将要移到的记录,若评估为假,则该记录为只读或用户不能修改它。指定一条错误信息来改写系统默认的错误信息。在 VALID 返回值为“假”(.F.) 时,Visual FoxPro 显示 cMessageText。
在激活另一窗口时,不执行 WHEN 子句。
WIDTH nFieldWidth
将浏览窗口中所有字段的字符数限制为 nFieldWidth,使用左右箭头或水平滚动栏,可水平滚动字段内容。使用 WIDTH 子句并不会修改表中字段的大小,而只修改字段在浏览窗口中的显示方式。如果已由 FIELDS 子句指定一个字段的宽度,它将替换 WIDTH 子句所指定的该字段的宽度。
WINDOW WindowName1
指定一个用户自定义窗口,浏览窗口将采用此窗口的特性。例如,如果该用户自定义窗口是由 FLOAT 子句创建的,则浏览窗口可移动。所指定的窗口不需要是活动的和可见的,但必须是已定义的。
IN [WINDOW] WindowName2
指定打开浏览窗口的父窗口,该浏览窗口并不采用父窗口的特性。在父窗口内激活的浏览窗口不能移出该父窗口。如果父窗口移动,则浏览窗口随之移动。
要访问浏览窗口,必须首先用 DEFINE WINDOW 定义父窗口,而且父窗口必须是活动的和可见的。
IN SCREEN
在用户自定义窗口为活动窗口时,将浏览窗口放置在 Viusal FoxPro 主窗口中。
Color Scheme nSchemeNumber
指定用于浏览窗口的配色方案的编号。
浏览窗口假定配色方案已由 Windows 的颜色控制面板建立。
备注
浏览窗口允许查看、编辑表中的记录,并追加额外的记录。Visual FoxPro 允许同时打开多个浏览窗口.
若按 Esc 键退出浏览窗口,则放弃对最后一个字段所做的更改。然而,若在修改一个字段后移向另一记录,则可保存对此字段所做的更改。
字段列表可以指定为字段或计算结果字段的任意组合。字段列表的语法是:
FieldName1
[:R]
[:nColumnWidth]
[:V = lExpression1 [:F] [:E = cMessageText]]
[:P = cFormatCodes]
[:B = eLowerBound, eUpperBound [:F]]
[:H = cHeadingText]
[:W = lExpression2]
[, FieldName2 [:R]...]
计算结果字段 字段列表可包含创建计算结果字段的语句。计算结果字段包含由表达式创建的只读数据。该表达式可以是任何格式,但必须是有效的 Visual FoxPro 表达式。
用于创建计算结果字段的语句格式为:
CalculatedFieldName = eExpression
下面的示例创建一个名为 location 的计算结果字段:
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE FIELDS location = ALLTRIM(city) + ', ' + country
city 和 country 都是当前选定表的字段名。
FIELDS 子句的字段列表包含对显示于浏览窗口中的字段进行特殊处理的选项:
:R
指定字段为只读字段,可显示但不可编辑字段包含的数据。
下例中打开的浏览窗口包含 cust_id 和 company 字段。Cust_id 字段为只读字段,不可更改。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE FIELDS cust_id:R, company
:nColumnWidth
指定列中字段显示的大小,:nColumnWidth 值不影响表中字段的大小,只影响字段在浏览窗口中显示的方式。
:V = lExpression1 [:F] [:E = cMessageText]
检验选项 (:V) 在浏览窗口中执行字段级数据有效性检查。若从一个字段移去光标时,lExpression1 值为“真” (.T.),则认为输入到该字段的数据正确,光标移向下一字段。
若 lExpression1 值为“假” (.F.),则认为所输入数据不正确,光标停留在当前字段并显示一条错误信息。若 lExpression1 值为 0,则认为所输入数据不正确,光标仍停留在当前字段但不显示错误信息。
对于备注字段不执行此检验选项。
默认情况下,lExpression1 只在修改字段时求值。欲强制执行检验,需包括 :F 选项。用户可包含下面所述的 :E 选项来显示自己定义的错误信息。
:F
决定当从一个字段移去光标或激活另一个窗口时,是否对检验选项中的表达式求值。若不包括 :F,则 lExpression1 仅在修改字段时求值。若包括 :F,则即使没有修改字段也对 lExpression1 求值。
:E = cMessageText
如果有效性检测表达式 :V = lExpression1 值为“真”,则允许光标移动。如果该表达式值为“假”,光标停留在当前字段,Visual FoxPro 产生一个错误信息。
如果包含错误选项 (:E),cMessageText 代替系统错误信息出现。CMessageText 仅在 SETNOTIFY 为 ON 时出现。若 SET BELL 为 ON,则响铃。
如果 :V = lExpression1 值为 0,则不出现错误信息,光标停留于当前有效字段。这使得用户可以在有效性检测例程中显示自己定义的错误信息。
下例打开 products 表并显示 product_id 和 prod_name 字段。Product_id 字段是一个可接收 5 个数字的数值型字段。在该例中,假定大于 100 的 product_id 是无效的。
:V 指定有效性准则。 不论数据是否更改,:F 都强制执行有效性检查。:E 使用用户自定义错误信息来代替 Visual FoxPro 系统错误信息。在 Visual FoxPro、ForPro for Windows和 FoxPro for Macintosh 中,错误信息显示于 Visual FoxPro 主窗口底部的状态栏中。
按下 ESC 键可关闭浏览窗口。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products && 打开 products 表
IF _WINDOWS OR _MAC
SET状态栏R ON
ENDIF
USE products
BROWSE FIELDS in_stock :V = in_stock < 100 ;
:F ;
:E = '库存数必须小于 100'
:P = cFormatCodes
如果包含 FIELDS 子句,用户也可为列表中的每一字段指定一个图片选项(:P)。图片选项可创建一个代码列表,该列表控件浏览窗口中每一字段的显示和数据输入。CFormatCodes 即为代码列表。
下例采用图片选项,只允许以指定格式的数值型数据输入到 unit_price 字段中:
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products && 打开 products 表
BROWSE FIELDS unit_price :P = '99,999.99'
有关图片选项代码的详细内容,请参阅 format 属性 和 inputmask 属性。
:B = eLowerBound, eUpperBound [:F]
指定一对边界,字段数据必须处于边界范围内。边界表达式 eLowerBound 和eUpperBound 必须与字段的数据类型匹配,并且不能是用户自定义函数。如果数据不处在 eLowerBound 和 eUpperBound 之间,则出现一条系统错误信息,指出数据允许的范围。默认情况下,仅在修改字段内容时对输入的数据作边界值检查。要想强制执行边界值检查,需包含强制有效性选项 (:F)。下例确保 in_stock 字段值处于 1 和 100 之间。按 ESC 键可关闭浏览窗口。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products && 打开 products 表
BROWSE FIELDS in_stock :B = 1, 100 :F
:H = cHeadingText
用 cHeadingText 指定的自定义标头替换默认字段名。默认情况下,在浏览窗口中用字段名作列标头。
下例为所显示的字段提供自定义列标头。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products && 打开 products 表
BROWSE FIELDS prod_name :H = '产品名:', ;
unit_price :H = '单价:'
:W = lExpression2
根据逻辑表达式 lExpression2 的值,用户可以禁止光标移向某一字段。如果lExpression2 值为“假” (.F.),则禁止光标移向该字段。如果 lExpression2 值为“真” (.T.),光标可移向该字段。LExpression2 支持用户自定义函数。
如果禁止光标移向所有字段,则当前记录标记为只读记录。只有在每一字段均包含一个值为“假”的 WHEN 子句时,这种情况才出现。
SET SKIP 支持 允许用户在两表之间建立一对多关系。对于父表中的每一条记录,均可在子表中有多个相关记录。如果创建一对多关系,那么使用 BROWSE 命令可以查看父表和子表中的记录。
一旦显示父记录,子表的第一条匹配记录接着显示。随后的任何匹配记录均在父记录和第一条匹配记录之后显示。
如果记录指针位于一个父记录上,可以在浏览窗口中,按 CTRL+DOWN ARROW 可以将记录指针移动到后一个父记录,按 CTRL+UP ARROW 可以将记录指针移动到前一个父记录。有关一对多关系,请参阅稍后的 SET SKIP命令。
FIELDS 子句的字段列表包含父表和子表的记录。字段名前应加上表别名(orders 或 customer)和句点分隔符。
CLEAR
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer ORDER cust_id IN 0 && 父表
USE orders ORDER cust_id IN 0 &&子表
SELECT customer && 回到父工作区
SET RELATION TO cust_id INTO orders && 建立关系
SET SKIP TO orders && 一对多关系
WAIT WINDOW '卷动来看各客户的发运日期' NOWAIT
BROWSE FIELDS customer.cust_id :H='客户编号', ;
customer.city :H='客户城市', orders.shipped_on