主题:关于菜单的一个小问题,请高手指点
chq8012
[专家分:0] 发布于 2008-06-11 10:02:00
有“文件”和“浏览”两个菜单,“文件”菜单中有”打开“命令,可以打开表文件, 要求:有打开的文件时,”浏览”可用,如果没有打开的文件时,“浏览”菜单显示为灰色的,不可用,请问,怎么写“浏览”的代码呢?
谢谢[em2]
回复列表 (共6个回复)
沙发
homayzh [专家分:7040] 发布于 2008-06-11 10:55:00
用browse 命令
use label.dbf &&打开表
browse &&浏览表
BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize [, nFontCharSet]]]
[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 [, nFontCharSet]] *NEW nFontCharSet
指定浏览窗口的字体及大小。字符表达式 cFontName 指定字体,数值表达式 nFontSize 指定字体大小。可以通过 nFontCharSet指定语言脚本。通过 GETFONT( ) 函数 可以列出可用的语言脚本值。例如,下列子句指定显示于浏览窗口中的字段为 16-磅 Courier 字体:
复制程序代码
FONT 'Courier',16
如果在包含 FONT 子句的同时省略了字体大小子句 nFontSize, 浏览窗口将采用 10-磅字体。如果省略了 FONT 子句,则采用 8-磅 MS Sans Serif 字体。如果指定的字体不可用,则用具有相似字体特征的字体代替。
STYLE cFontStyle
指定浏览窗口中的字体样式。如果省略 STYLE 子句,则采用常规字体样式。如果指定的字体样式不存在,则使用具有相似特征的字体样式或常规字体样式替代。
字符 字体样式
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 为真的记录才显示在浏览窗口中。如果if lExpression1 是一个可优化表达式,则 Rushmore 查询优化技术将优化 BROWSE FOR 命令。为了获得最佳性能,应在 FOR 子句中使用可优化表达式。有关 Rushmore 优化表达式的信息,请参见 SET OPTIMIZE 和 使用 Rushmore 查询优化数据访问速度。包含 FOR 子句使记录指针移向符合该条件的第一条记录。包含 REST 子句使记录指针处于当前位置。
REST
防止在 FOR 子句打开浏览窗口时,记录指针从当前位置移向表顶部。如果不包含,默认情况下 BROWSE 将记录指针放置在表顶部。
FORMAT
使用格式文件来控制浏览窗口的显示和输入数据的格式。必须首先使用 SET FORMAT打开格式文件。以下是从格式文件中提取的、应用于浏览窗口的信息:
要浏览的字段列表
所有的 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)
* This is the program that uses the format file
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 范围内的邮政编码记录才显示在浏览窗口:
板凳
homayzh [专家分:7040] 发布于 2008-06-11 10:56:00
复制程序代码
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
SET ORDER TO postalcode
BROWSE KEY '10000', '30000'
LAST | NOINIT
保存浏览窗口外观的任何变更。这些变更保存在 FoxUser.dbf 文件中,包括字段列表、浏览窗口的位置及尺寸等内容的变更。如果发出带有 LAST 或 NOINIT 子句的 BROWSE 命令,在 SET RESOURCE 为 ON 的情况下,以最后保存于 FoxUser.dbf 文件中的配置开打浏览窗口。恢复最后一个 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 键,或选择 Table(表) 菜单中的 Append Record(追加记录) 。
注意:
包含 NOAPPEND 并不禁止用户在程序中向浏览窗口中添加记录(由 VALID, WHEN, 或 ON KEY LABEL 等创建)。
NOCAPTIONS
指定总是使用表或视图的字段名作为列标题,即使数据库中包含了字段的友好标题。该子句尽适用于数据库中的表或视图。
NODELETE
禁止在浏览窗口中为记录作删除标记。默认情况下,按 CTRL+T, 选择 Table(表) 菜单中的 Toggle Delete(切换删除标记) , 或单击要删除的记录的最左边一列,可以给记录做删除标记。
NOEDIT | NOMODIFY
禁止用户修改表。 NOEDIT 等同于 NOMODIFY 。包含二者中的任何一个子句,用户可以浏览或搜索表,但是不能编辑表。但是,用户可以添加和删除记录。
NOLGRID
移去浏览窗口左分区中字段的网络线。
NORGRID
移去浏览窗口右分区中字段的网络线。
NOLINK
断开左右两个分区的联系。默认情况下,浏览窗口左分区和右分区链接在一起,即滚动其中一区时,另一区也随之滚动。
NOMENU
从系统菜单栏中移去表菜单(Table)标题,防止访问浏览菜单。
NOOPTIMIZE
禁止对 BROWSE 命令进行 Rushmore 查询优化。更详细的信息,请参见 SET OPTIMIZE 和 使用 Rushmore 查询优化数据访问速度。
NOREFRESH
禁止对浏览窗口进行刷新。浏览窗口以 SET REFRESH 确定的速度进行刷新。NOREFRESH 对只读文件非常有用,并且可以改进性能。
NORMAL
使用正常的默认设置打开浏览窗口,如颜色, 大小, 位置, 标题, 和控件选项 (如 GROW, FLOAT, ZOOM 等等)。如果省略 NORMAL,且当前输出窗口为用户自定义窗口,浏览窗口使用用户自定义的设置。
NOWAIT
打开浏览窗口之后继续运行程序。程序不必等待浏览窗口关闭,而是继续执行 BROWSE NOWAIT 之后的程序行。若在程序中发出 BROWSE 时省略 NOWAIT ,则浏览窗口打开后暂停执行程序,直至浏览窗口关闭。 NOWAIT 只可用于程序中。在命令窗口中发出 BROWSE 命令时包含 NOWAIT 子句无此作用。
PARTITION nColumnNumber
将浏览窗口拆分为左右分区, nColumnNumber 指定拆分条所在的列。例如,若 nColumnNumber 为 20,则拆分条放置在浏览窗口的第 20 列。
LEDIT
指定浏览窗口的左分区以编辑方式显示。
REDIT
指定浏览窗口的右分区以编辑方式显示。下例打开浏览窗口,使拆分条位于第 20 列,并以编辑方式打开右分区。如果同时包含两个关键字,则以编辑方式打开两个分区。
复制程序代码
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE PARTITION 20 REDIT
PREFERENCE PreferenceName
保存浏览窗口的属性和选项供以后使用。与 LAST 不同,以先前工作区中出现的方式打开浏览窗口,PREFERENCE 是将浏览窗口的属性随时存储于 FoxUser.dbf 资源文件中。Preferences 可以在任何时候恢复。第一次发出带有指定设置的 BROWSE 命令时,在 FoxUser.dbf 文件中创建一个保存浏览窗口配置的数据项。以后用同样的状态名发出 BROWSE 命令时,恢复浏览窗口该状态。当浏览窗口关闭时,更新该状态。PreferenceName 可为 10 个字符长,必须以字母或下划线开头,可包括字母、数字和下划线的任意组合。如果您喜欢某种状态,可禁止其被修改。关闭浏览窗口,发出 SET RESOURCE OFF,将 FoxUser.dbf 文件作为一个表打开,并将逻辑字段 READONLY 改为真 (.T.),可将包含状态的记录改为只读记录。有关 FoxUser.dbf 资源文件的更多信息,请参见 SET RESOURCE。如果您按 CTRL+Q 键退出浏览窗口,则资源文件不保存任何对浏览窗口的更改。
SAVE
保持浏览窗口及其所有备注字段的文本编辑窗口为活动和可见(打开)的。用键盘或鼠标访问其他打开的窗口后,可以返回浏览窗口。SAVE 仅可用于程序中。在命令窗口中发出包含 SAVE 子句的 BROWSE 命令时,则无此作用。因为默认情况下, BROWSE SAVE 总是以交互方式工作。
TIMEOUT nSeconds
指定浏览窗口等待输入的时间。数值型表达式 nSeconds 指定在没有任何输入的情况下,浏览窗口保持多少秒后才自动关闭。 TIMEOUT 仅可用于程序中;在命令窗口中发出 BROWSE 命令时包含此子句,则无此作用。在下面的例子中,如果 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 表
BROWSE WINDOW wBrowse ;
FIELDS phone :H = 'Phone Number:' , ;
company :H = 'Company:' ;
TIMEOUT 10
RELEASE WINDOW wBrowse
TITLE cTitleText
以 cTitleText 指定的标题改写显示于浏览窗口标题栏中的默认表名或别名。否则,要浏览的表名或别名将显示于标题栏中。如果发出 BROWSE WINDOW 命令将浏览窗口置于用户自定义窗口中,则浏览窗口的标题替换为用户自定义窗口的标题。
复制程序代码
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
BROWSE;
TITLE 'My Browse Window' ;
FIELDS phone :H = 'Phone Number' , ;
company :H = 'Company:'
VALID lExpression2
在浏览窗口中执行记录有效性(record-level)检查。VALID 子句仅在记录已被更改并且试图将光标移至另一记录时执行。如果只是对备注字段的更改,不执行 VALID 子句。如果 VALID 返回值为真(.T.),用户可将光标移向另一记录。如果 VALID 返回值为假(.F.),光标停留在当前记录上,同时 Visual FoxPro 产生一条错误信息。如果 VALID 返回 0,光标停留在当前记录上,当时不显示错误信息。不要把 VALID 子句和启用字段有效性(field-level)的检查选项(:V)混淆在一起。
:F
3 楼
homayzh [专家分:7040] 发布于 2008-06-11 10:56:00
在用户将光标移至下一条记录前,强制执行 VALID 子句。这种情况下,即使记录没有更改,也执行 VALID 。
ERROR cMessageText
指定一条错误信息来替换系统默认的错误信息。当 VALID 返回假 (.F.)时,Visual FoxPro 显示 cMessageText 。
WHEN lExpression3
当用户把指针移动到另一条记录时计算表达式的值。如果 lExpression3 值为真(.T.),用户可以修改将要移到的记录。如果 lExpression3 值为假(.F.) 或 0,该记录为只读且用户不能修改它。当激活另一个窗口时,不执行 WHEN 子句。
WIDTH nFieldWidth
将浏览窗口中所有字段的显示字符数限制为 nFieldWidth。使用左箭头和右箭头或水平滚动栏,可水平滚动字段内容。使用 WIDTH 子句并不会修改表中字段的大小;而只修改字段在浏览窗口中的显示方式。如果已由 FIELDS 子句指定一个字段的宽度,它将替换 WIDTH 子句所指定的该字段的宽度。
WINDOW WindowName1
指定一个用户自定义窗口,浏览窗口将采用此窗口的特性。录入,如果该用户自定义窗口是由 FLOAT 子句创建的,则浏览窗口可移动。所指定的窗口不需要是活动或可见的,但必须是已经定义的。
IN [WINDOW] WindowName2
指定打开浏览窗口的父窗口。浏览窗口并不采用父窗口的特性。在父窗口中激活的浏览窗口不能移出该父窗口。如果脯窗口移动,则浏览窗口随之移动。要访问浏览窗口,必须先用 DEFINE WINDOW 定义父窗口,且父窗口必须是活动和可见的。
IN SCREEN
当用户自定义窗口为活动窗口时,将浏览窗口放置在 Visual 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]
在浏览窗口中进行字段有效性(field-level)检查。当从一个字段上移开光标时,如果 lExpression1 值为真(.T.),则认为输入到该字段的数据正确,光标移向下一个字段。如果 lExpression1 值为假(.F.),则认为所输入数据不正确,光标停留在当前字段,并显示一条错误信息。若 lExpression1 值为 0,则认为输入数据不正确,光标停留在当前字段,但不显示错误信息。对于备注字段不执行此检验选项。默认情况下, lExpression1 只在修改字段时求值。欲强制执行检验,需包括 :F 选项。用户可包含下面所述的 :E 选项来显示自己设定的错误信息。
:F
决定当从一个字段移去光标或激活另一个窗口时,是否对检验选项中的表达式求值。如果不包含 :F ,则 lExpression1 仅在修改字段时求值。如果包含 :F ,则即使没有修改字段也对 lExpression1 求值。
:E = cMessageText
如果有效性检测表达式 :V = lExpression1 的值为真(.T),则允许光标移动。如果表达式值为假(.F.),光标停留在当前字段,且 Visual FoxPro 产生一个错误信息。如果包含错误选项(:E), cMessageText 代替系统错误信息出现。 cMessageText 仅在 SET NOTIFY 为 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中,错误信息显示在 Visual FoxPro 主窗口底部的状态栏中。按 ESC 键可关闭浏览窗口。
复制程序代码
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE products && 打开 products 表
IF _WINDOWS OR _MAC
SET STATUS BAR ON
ENDIF
USE products
BROWSE FIELDS in_stock :V = in_stock < 100 ;
:F ;
:E = '库存数必须小于 100'
4 楼
homayzh [专家分:7040] 发布于 2008-06-11 10:56:00
: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 值为假(.F.),禁止光标移向该字段。如果 lExpression2 值为真(.T.),光标可移向该字段。 lExpression2 支持用户自定义函数。如果禁止光标移向任何字段,则当前记录标记为只读。只有每一个字段均包含一个值为假(.F.)的 WHEN 子句时,这种情况才会出现。
SET SKIP 支持 SET SKIP 允许用户在两表之间建立一对多联系。对于父表中的每一条记录,均可在子表中有多个相关记录。如果创建一对多联系,那么使用 BROWSE 命令可以查看父表和子表中的记录。
一旦显示父记录,子表的第一条匹配记录接着显示。随后的任何匹配记录均在父记录和第一条匹配记录之后显示。填充字符的样式依赖当前浏览窗口的字体。
如果记录指针位于一条父记录上,可以在浏览窗口中,按 CTRL+向下箭头 可以将记录指针移动到后一条父记录,按 CTRL+向上箭头 可以将记录指针移动到前一条父记录。有关一对多联系的详细信息,请参见 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
5 楼
jinlonggao [专家分:17130] 发布于 2008-06-11 11:27:00
见过什么叫灌水吗?homayzh所做的可能就是.
(当然我这也算是洒了几滴)
6 楼
jinlonggao [专家分:17130] 发布于 2008-06-11 11:32:00
点击"浏览"菜单对应的"option"(最右边方框),出现一个"提示选项"对话框,其中有一个文本框,名称为"跳过",在其中写上如下:
!used() 或 empt(alias())
表示当前工作区中没有打开的数据表存在.
我来回复