d8994a63806ff163a1acd62edf8ab3d9.ppt
- Количество слайдов: 41
上篇——语言基础 1. 初识Visual Fox. Pro 2. 表的基本操作 3. 查询与统计
本篇描述了“以界面操作为主、命令方式 为辅的”VFP交互操作方式。第 1章概述了设 计器、项目管理器等辅助 具,展示了VFP 的环境特色;第 2章侧重介绍表的建立与维护; 第 3章主要讨论对表数据的查询与统计。 VFP支持交互操作与程序执行两类 作 方式,前者是后者的基础。学好本篇的内容, 对初学者有重要意义。
第 1章 初识Visual Fox. Pro l Visual Fox. Pro的发展与特点 Visual Fox. Pro的产生 Visual Fox. Pro的新版本 Visual Fox. Pro的特点 ¡ ¡ ¡ 功能强大的自含型命令式开发语言 支持面向对象的程序设计 通过COM组件实现应用集成 支持网络应用 大量使用可视化的辅助设计 具
1. 2~ 1. 3 VFP的界面组成、命令与 作方式 l VFP的窗口 l 程序窗口 l 命令窗口 l 具窗口 l 窗口中的图标 l 菜单 l 对话框 l 命令格式 l use SB l list for 价格<10000 && 打开名称为SB(设备)的表文件 && 列表显示当前表(即SB)的所有记录 && 只显示价格低于1万元的设备 l 交互操作方式与程序执行方式
1. 4 Visual Fox. Pro的设计与管理 具 l 向导 l 表向导 l 报表向导 l 设计器 l 表单设计器 l 生成器 l 表单生成器 l 文本框生成器 l 项目管理器
项目管理器:VFP的控制中心 集中管理项目中的数据、对象 l 目录树结构 l 多种功能按钮 l 支持项目建立数据词典
第 2章 表的基本操作 2. 1 表的建立与修改 设备表 编号 名称 启用日期 价格 部门 主要设备 备注 商标 016 -1 03/05/90 62044. 61 21 . T. Memo gen 016 -2 车床 01/15/92 27132. 73 21 . T. memo gen 037 -2 磨床 07/21/90 241292. 12 22 . T. memo gen 038 -1 钻床 10/12/89 5275. 00 23 . F. Memo gen 100 -1 设备表的结构 车床 微机 08/12/97 8810. 00 12 . T. memo Gen 101 -1 复印机 06/01/92 10305. 01 12 . F. memo gen 210 -1 轿车 05/08/95 151000. 00 11 . F. memo Gen 有关命令 l 创建设备表 create sb l 打开设备表 Use sb l 浏览、修改记录 browse l 修改结构 Modify structure l 关闭当前表 use
l Browse命令的 浏览 窗口 l “SB. 商标 ”通用型字段窗口
2. 2 表达式 l 常量 数值型常量 例如10, -100, 2. 81828, 字符型常量 例如"微机", 'PC机', "3. 14159" 日 期 型 和 日 期 时 间 型 常 量 例 如 {06/30/1999}, {9/15/99 8: 45}, {^2001/08/30} l 设置通常的日期格式,命令SET STRICTDATE TO 0, l 设置严格的日期格式, 命令SET STRICTDATE TO 1 l 逻辑型常量 真和假两种值, . T. . F. l l 变量 l 内存变量 s='VFP' STORE 2*4 TO n 1, n 2, n 3 ? 'S=', s && 显示S= VFP DIMENSION x(3), a(2, 3) &&定义数组 a(1, 3) =5 &&数组元素赋值 l 字段变量 USE sb ? 名称 GO 5 ? 名称 l 系统变量 && SB. DBF打开后记录指针指向第 1个记录, 显示车床 && 将记录指针指向第 5个记录(GO命令参阅2. 3. 1节)
表 2. 6 VFP算术、关系、逻辑运算符 运算 优 先级 运 算 符 算 术 8 ( ) 7 ^ 或 ** 6 × 乘 / 除 % 取模:取两数相除的余数 + 加 - 减 < 意 义 运算举 例(注解表示显 示结 果) 圆 括号 乘方 ? 3^2 &&9 ? 15%4 &&3 小于 ? 63<54 &&. F. <= 小于等于 ? {01/01/92}<={01/01/92} &. T. > 大于 ? "ABC">"AAAA" &&. T. >= 大于等于 ? "大专 ">="大学" &&. T. = 相等:串比较时 串首同就得真 ? "ABC"="AB" &&. T. 完全相等:两串全同才得真 ? "ABC"=="AB“ 不相等 ? . T. <>. F. &&. T. $ 包含:左串是右串子串才得真 ? "BC"$"ABCD" &&. T. 3 NOT 或 ! 非:结 果是右边逻辑值 的反 ? NOT"BC"$"ABCD" &&. F. 2 AND 与:两边 都真才得真 ? . T. AND"ABC">"AB" &&. F. 1 OR 或:两边 有一为 真就得真 ? . T. OR 4=5 5 关系 4 = = <>、#或!= 逻 辑 &&. F. &&. T.
表 2. 8 字符处理函数 函 数 功 能 例子(注解表示结 果) SUBSTR(<字符表达式>, <数值 表 达式 1>[, <数值 表达式 2>]) 返回<字符表达式>中第<数值 表达式 1> 位起的长 度为 <数值 表达式 2>的子串 ? SUBSTR("ABCD", 2, 2)&&"BC" LEFT(<字符表达式>, <数值 表达 式>) 返回<字符表达式>左起<数值 表达式> 个字符的子串 ? LEFT("ABCD", 2) &&"AB" RIGHT(<字符表达式>, <数值 表 达式>) 返回<字符表达式>右起<数值 表达式> 个字符的子串 ? RIGHT("ABCD", 2) &&"CD" LEN(<字符表达式>) 返回字符串的长 度 ? LEN("ABCD") && 4 AT(<字符表达式 1>, <字符表达 式 2>[, <数值 表达式>]) 返回字符串<字符表达式 1>在<字符表 达式 2>中第<数值 表达式>次出现 的位 置 ? AT("BC", "ABCD", 1) && 2 ALLTRIM(<字符表达式>) 删 除字符串前导 和末尾的空格 ? ALLTRIM(" SPACE(<数值 表达式>) 返回<数值 表达式>个空格 ? SPACE(4) &&" UPPER(<字符表达式>) 将小写字母转换为 大写 ? UPPER("a. Bc") &&"ABC" LOWER(<字符表达式>) 将大写字母转换为 小写 ? LOWER("a. Bc") &&"abc" VAL(<字符表达式>) 将字符串转换为 数值 ? VAL("3. 14") && 3. 14 STR(<数值 表达式 1>[, <数值 表 达式 2>[, <数值 表达式 3>]]) 将数值 <数值 表达式 1>转换为长 度为 < 数值 表达式 2>位, 具有<数值 表达式 3> 位小数的字符串 ? STR(3. 14, 5, 1) CHR(<数值 表达式>) 从<数值 表达式>表示的ASCII码 返回字 符 ? CHR(65) &&"A" ASC(<字符表达式>) 返回字符的ASCII码值 ? ASC("A") &&65 ABCD ")&&"ABCD" &&" 3. 1" "
2. 3 VFP命令的常用子句 命令格式: LIST|DISPLAY [[FIELDS] <表达式表>][<范围>][FOR <条件>][WHILE <条件>] [OFF][ TO PRINT [PROMPT]|TO FILE <文件>] 范围子句 : ALL NEXT <N> RECORD <N> REST 所有记录 从当前记录起的N个记录 第N个记录 从当前记录起到最后一个记录止的所有记录 例: USE sb GO 2 && 记录指针指向第 2个记录 LIST NEXT 5 FOR 价格>10000 && 显示第 2, 3, 6等3个记录 LIST RECORD 5 FIELDS 编号, 名称, 价格 USE sb LIST NEXT 3 && (1) LIST 部门, 编号, 名称, 备注 FOR 部门="21" && (2) LIST 编号, 名称, 价格*0. 9, 启用日期 FOR YEAR(启用日期)<1995 OFF && (3)
2. 4 表的维护命令 1. 表的复制 COPY FILE <文件名1> TO <文件名2> COPY TO <文件名> [<范围>][FOR <条件>][WHILE <条件>] [FIELDS <字段名表>| FIELDS LIKE <通配字段名> | FIELDS EXCEPT <通配字段名>] [[TYPE][SDF|XLS|DELIMITED[WITH <定界符>|WITH BLANK|WITH TAB]]] COPY STRUCTURE TO <文件名> [FIELDS <字段名表>] 例: USE COPY FILE SB. DBF TO SB 1. DBF COPY FILE SB. FPT TO SB 1. FPT && 若SB. DBF是打开的, 则须关闭它 && 复制得SB 1. DBF && 复制得SB 1. FPT USE sb COPY TO a 1 && 对sb. dbf原样复制, 同时生成A 1. DBF与A 1. FPT COPY TO a 2 FIELDS 名称, 编号 FOR LEFT(部门, 1)=“ 2” LIST && 显示SB. DBF的记录数据 USE a 2 LIST && 显示A 2. DBF的记录数据 USE sb COPY TO b 1 NEXT 3 SDF && 以系统数据格式复制, 产生文本文件B 1. TXT COPY STRUCTURE TO sb 2 FIELDS 名称, 价格, 编号, 备注
2. 表数据的替换 l REPLACE <字段名1> WITH <表达式 1> [ADDITIVE][, <字段名2> WITH <表达式 2> [ADDITIVE]]. . . [<范围>][FOR <条件>][WHILE <条件>] l SCATTER [FIELDS <字段名表>|FIELDS LIKE <通配字段名>|FIELDS EXCEPT <通配字段 名>] [MEMO] TO <数组名> [BLANK] | MEMVAR [BLANK] l GATHER FROM <数组名>|MEMVAR [FIELDS <字段名表>|FIELDS LIKE <通配字段名>|FIELDS EXCEPT <通配字段名>][MEMO] l COPY TO ARRAY <数组名> [FIELDS <字段名表>][<范围>][FOR<条件>][WHILE<条件>] l APPEND FROM ARRAY <数组名> [FOR<条件>] [FIELDS<字段名表>]
3. 逻辑表的设置 l 过滤器 SET FILTER TO [<条件>] l 字段表 SET FIELDS TO [[<字段名1>[, <字段名2>. . . ]] |ALL[LIKE <通配字段名>|EXCEPT <通配字段名>]] SET FIELDS ON|OFF
4. 建立或修改表结构的命令 命令: CREATE TABLE <表名> (<字段名1> <字段类型>[(<字段宽度> [, <小数位数>])][, <字段名2>. . . ]) ALTER TABLE <表名> ADD | ALTER [COLUMN] <字段名> <字段类型> [(<字段宽度> [, <小数位数>])] ALTER TABLE <表名> DROP [COLUMN] <字段名1>|RENAME COLUMN <字段名2> TO <字段名3> 例: CREATE TABLE dx(编号 c(5), 年月 c(4), 费用 n(6, 1)) LIST STRUCTURE && 主屏幕显示DX. DBF的结构 INSERT INTO dx VALUES("016 -1", "8911", 2763. 5) INSERT INTO dx VALUES("016 -1", "9112", 3520. 0) INSERT INTO dx VALUES("037 -2", "9206", 6204. 4) INSERT INTO dx VALUES("038 -1", "8911", 2850. 0) LIST OFF && 主屏幕显示所有记录 主屏幕所显示DX. DBF的记录数据如下: 编号 年月 费用 016 -1 8911 2763. 5 016 -1 9112 3520. 0 037 -2 9206 6204. 4 038 -1 8911 2850. 0 ALTER TABLE dx ADD 摘要 m(4) ALTER TABLE dx DROP 摘要
2. 5 记录的维护命令 l 记录的定位与移位 例:USE SB ? RECNO() GO BOTTOM ? RECNO() GO 4 SKIP -1 && 当前记录为第 1个记录 && && && 显示: 1 记录指针指向第 7个记录, 当前记录为第 7个记录 显示: 7 当前记录为第 4个记录 当前记录为第 3个记录 l 记录的插入与追加 INSERT [BLANK] [BEFORE] INSERT INTO 表名[(字段名1 [, 字段名2, . . . ])] VALUES(表达式 1 [, 表达式, . . . ]) APPEND [BLANK] l 记录的删除与恢复 DELETE [<范围>] [FOR <条件>] [WHILE <条件>] PACK RECALL [<范围>] [FOR <条件>] [WHILE <条件>] ZAP
第 3章 查询与统计 3. 1 排序与索引 排序: USE sb SORT TO bmx ON 部门/D, 价格 FOR 主要设备 USE bmx LIST && 主窗口显示如下 记录号 编号 名称 启用日期 价格 部门 主要设备 备注 商标 1 037 -2 磨床 07/21/90 241292. 12 22. T. memo gen 2 016 -2 车床 01/15/92 27132. 73 21. T. memo gen 3 016 -1 车床 03/05/90 62044. 61 21. T. Memo gen 4 100 -1 微机 08/12/97 8810. 00 12. T. memo Gen
索引 结构复合索引文件. CDX, 主名与表的主名相同, 自动维护 表 3. 1 索引功能分类表 索引类型 关键 字重复值 说 明 创 建修改命令 索引个数 普通索引 允许 可作为 一对 多永久关系中的“多方” INDEX 允许 多个 唯一索引 允许 , 但输 出无 重复值 为 与以前版本兼容而设 置 候选 索引 不允许 , 输 入重复值 将禁 止存盘 可用作主关键 字, 可用于在永久关系中建 立参照完整性 INDEX CREATE TABLE ALTER TABLE 仅 适用数据库 表, 可用于在永久关系中建 立参照完整性 CREATE TABLE ALTER TABLE 主索引 仅 可 1个 建立索引文件或增加索引标识 INDEX ON <索引关键字> TO <单索引文件名> | TAG <索引标识名> [OF <复合索引文件名>] [FOR <条件>] [COMPACT] [ASCENDING|DESCENDING] [UNIQUE|CANDIDATE] [ADDITIVE] 确定主控索引 SET ORDER TO [<数值表达式>|<单索引文件名>|[TAG] <索引标识> [ASCENDING|DESCENDING]]
[例3 -3] 为SB. DBF建立一个结构复合索引文件, 其中包括 3个索引: (1) 记录以价格降序排列, 索引标识为普通索引型。 (2) 记录以部门升序排列, 部门相同时则按价格升序排列, 索引标识为普通索引型。 (3) 记录以部门升序排列, 部门相同时则按价格降序排列, 索引标识为候选索引型。 USE sb INDEX ON 价格 TAG jg DESCENDING && 建立SB. CDX, 关键字价格, JG为普通索引型 索引标识 LIST && 记录已按价格降序排列 INDEX ON 部门+STR(价格, 9, 2) TAG bmjg ; && 关键字为字符表达式“部门+STR(价格, 9, 2)”, 索引标识BMJG增入SB. CDX LIST && 索引表达式运算后升序排列, 使记录按部门升序、部门相同按价格升序排列 INDEX ON VAL(部门)-价格/1000000 TAG bmjg 1 CANDIDATE ; && bmjg 1为候选索引型索引标识, 索引标识增入SB. CDX LIST && 索引表达式运算后升序排列, 使记录按部门升序、部门相同按价格降序排列 SET ORDER TO TAG jg LIST && 指定SB. CDX的索引标识JG为主控索引, JG 索引序号为 3 && 记录按价格降序排列 SET ORDER TO TAG bmjg LIST && 记录按(2)排列
3. 2 查询命令 1. 顺序查询 LOCATE FOR <条件> [<范围>] [WHILE <条件>] CONTINUE USE sb LOCATE FOR 价格<15000 AND NOT 主要设备 DISPLAY && 显示: 记录号 编号 名称 启用日期 价格 部门 主要设备 备注 商标 4 038 -1 钻床 10/12/89 5275. 00 23. F. Memo gen CONTINUE ? RECNO(), 名称, 价格, 主要设备 && 显示: 6 复印机 10305. 01. F. CONTINUE && 状态条显示:已到定位范围末尾。 2. 索引查询 SEEK <表达式> USE sb INDEX ON 编号 TAG bh SEEK "038 -1" && 不可写为: SEEK 编号="038 -1" ? RECNO() && 显示: 4 INDEX ON 启用日期 TAG qyrq SEEK {3/5/90} ? FOUND() &&. 显示. T. , 表示找到该日期 INDEX ON 价格 TAG jg SEEK 1000. 00
3. 作区和数据 作期 l 部门代码表和增值表 BMDM. DBF: 结 构: bmdm(代码 c(2), 名称 c(6)) 记录 : 记录 号 代码 名称 1 11 办 公室 2 12 设备 科 3 21 一车间 4 22 二车间 5 23 三车间 l ZZ. DBF: 结 构: zz(编 号c(5), 增值 n(8, 2)) 记录 : 记录 号 编 号 增值 1 016 -1 2510. 00 2 016 -1 1000. 00 3 038 -1 1200. 00 选择 作区命令:SELECT < 作区号>|<别名> CLOSE ALL && 关闭所有打开的表, 当前 作区为 1号 作区 SELECT 0 && 1号 作区未打开过表, 选定的 作区即该区 USE sb GO 3 && 移至 3号记录, 注意该记录的部门字段值为 22 SELECT 0 && 选定 2号 作区为当前 作区 USE bmdm INDEX ON 代码 TAG dm SEEK sb. 部门 && 即SEEK 22 ? sb. 编号, a. 名称, 名称 && 显示“ 037 -2 磨床 二车间”。这里“a. 名称”指sb. 名称, “名称”指bmdm. 名称 SELECT sb && 选定SB. DBF所在 作区为当前 作区 ? 编号, 名称, bmdm. 名称 && 显示“ 037 -2 磨床 二车间” SELECT() && 显示: 1 SELECT 2 && 选定 2号 作区为当前 作区
l 打开数据 作期窗口:选定窗口菜单的数据 作期命令 l 建立视图文件(. VUE): • 文件菜单的另存为命令 • CREATE VIEW <视图文件名> l 打开视图文件: SET VIEW TO <视图文件名>
3. 3 表的关联 关联 的多一关系与一多关系
多一关系 在数据 作期窗口建立多一关系: 用命令序列实现: SET STRICTDATE TO 0 BROWSE FIELDS BMDM. 名称: H='部门名‘ ; Sb. 编号, Sb. 名称: H=‘设备名’, Sb. 启用日期 FOR Sb. 启用日期>={01/01/92} 浏览结 果: 多一关系显 示部门名 SELECT 2 USE bmdm && 打开子表 INDEX ON 代码 TAG 代码 ADDITIVE && 子表在代码字段建立索引 SELECT 1 USE sb && 打开父表 SET RELATION TO sb. 部门 INTO bmdm ADDITIVE && 指定在部门字段对子表设置多一关系
建立关联命令: SET RELATION TO [<表达式 1> INTO <别名1>, …, <表达式N> INTO <别名N>] [ADDITIVE] : 说明一多关系的命令 SET SKIP TO [<表别名1>[, <表别名2>]…] 一多关系的命令序列示例: CLOSE ALL SELECT 2 USE bmdm && 子表 1 一父多子 SET ORDER TO TAG 代码 浏览窗口 SELECT 3 USE zz && 子表 2 INDEX ON 编号 TAG bh SELECT 1 USE sb && 父表 SET RELATION TO sb. 部门 INTO bmdm SET RELATION TO sb. 编号 INTO zz ADDITIVE SET SKIP TO zz && 子表ZZ为多方 BROWSE FIELDS 编号, 价格, zz. 增值, bmdm. 名 称: H='部门名'
3. 4 统计命令 l 计数命令 COUNT [<范围>] [FOR <条件 1>] [WHILE <条件 2>] [TO <内存变量>] l 求和命令 SUM [<数值表达式表>][<范围>][FOR <条件 1>][WHILE <条件 2>] [TO <内存变量表>|ARRAY <数组>] l 求平均值命令 AVERAGE [<数值表达式表>][<范围>][FOR <条件 1>][WHILE <条件 2>] [TO <内存变量表>|ARRAY <数组>] l 汇总命令 TOTAL TO <文件名> ON <关键字> [FIELDS <数值型字段表>] [<范围>][FOR <条件 1>][WHILE <条件 2>] [例3 -15] 在DX. DBF中按设备的编号来汇总大修费用, 试写出命令序列。 USE dx INDEX ON 编号 TAG bh TOTAL ON 编号 TO jghz FIELDS 费用 && 按编号汇总费用, 写入新表JGHZ. DBF USE jghz BROWSE FIELDS 编号, 费用 TITLE '大修费用汇总表'
3. 5 SELECT-SQL查询 SELECT-SQL命令: SELECT [ALL | DISTINCT] [<别名>. ]<SELECT表达式> [AS <列名>][, [<别名>. ]<SELECT表达式>[AS <列名>]. . . ] FROM [FORCE][<数据库名>!]<表名> [<本地名>] [[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER] JOIN <数据库名>!]<表名> [<本地名>] [ON <联接条件>. . . ] [[INTO <目标>] [TO FILE <文件名> [ADDITIVE] TO PRINTER [PROMPT] TO SCREEN]] [PREFERENCE <名字>] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE <联接条件> [AND <联接条件>. . . ][AND OR <筛选条件>. . . ]]] [GROUP BY <组表达式>[, <组表达式>. . . ]] [HAVING <筛选条件>] [UNION [ALL] <SELECT命令>] [ORDER BY <关键字表达式> [ASC DESC] [, <关键字表达式> [ASC DESC]. . . ]] [TOP <数值表达式> [PERCENT]] 例: 查询大修过的设备的编号、名称和部门名: SELECT dx. 编号, sb. 名称, bmdm. 名称 AS 部门名 FROM sb, dx, bmdm; WHERE dx. 编号 = sb. 编号AND bmdm. 代码 = sb. 部门 将SB. DBF的记录按部门升序排列, 部门相同时按价格降序排列: SELECT 编号, 名称, 部门, 价格 FROM sb ORDER BY 部门, 价格 DESC 查找大修过的所有设备: SELECT DISTINCT 编号 FROM dx 求出每一设备的增值金额, 并送至打印机打印: SELECT 编号, SUM(增值) FROM zz GROUP BY 编号 TO PRINTER
查询设计器 l 用查询设计器查询数据的基本步骤 打开查询设计器—进行查询设置, 即设置被查询的表、联接条件、字段等输出要求 和查询结果的去向—执行查询—保存查询设置。 l 打开查询设计器窗口 MODIFY QUERY <文件名> l 查看由查询生成的SQL命令 快捷菜单的“查看SQL命令” l 查询结果的图形处理 查询设计器窗口
3. 6 数据库表及其数据完整性 l 数据库表与自由表 l 创建数据库SBSJ 选定文件菜单的新建命令—选定数据库选项按钮—选定新建文件按钮— 在创建对话框中键入数据库名: SBSJ(扩展名允许省略) —选定保存按 数据库 SBSJ的永久关系 钮后即产生数据库文件SBSJ. DBC, 同时出现数据库设计器 (图 3. 34) l 数据库设计器
l 表的数据完整性 ¡ 长名(表名/字段名) 与注释 ¡ 字段属性 ¡ 记录规则 ¡ 永久关系 ¡ 参照完整性 图 3. 32 SB数据库 表的字段选项 卡
中篇——程序设计 4. 结构化程序设计 5. 菜单设计 6. 表单设计基础 7. 表单控件设计 8. 表单高级设计 9. 报表设计
¡ VFP程序设计包括传统程序设计和面向对象 程序设计两方面的内容。 ¡ 第 4章简要介绍结构化程序设计的基本概念、 方法及初步应用。随后的5章介绍基于对象的 可视化设计,着重说明各种向导、设计器和 控件 具箱等可视化设计 具的用法。 ¡ 从第 5至第 9章每章一个专题,依次讨论“菜单 设计”、“表单设计基础”、“表单控件设计”、 “ 表单高级设计”和“报表设计”等技术与操作。
第四章 程序设计初步 4. 1 程序文件 ¡ ¡ ¡ 程序文件建立与修改命令: MODIFY COMMAND <文件名> 程序的运行命令: DO <文件名> 输入命令: INPUT [<提示信息>] TO <内存变量> ¡ 定位输出命令 @<行, 列> [SAY <表达式>] ¡ 运行暂停命令 WAIT [<信息文本>] [TO <内存变量>] [WINDOW [AT <行>, <列>]] [NOWAIT] [CLEAR | NOCLEAR] [TIMEOUT <数值表达式>] [例4 -2] WAIT命令输出信息示例。 WAIT "请检查输入内容!" WINDOW
4. 2 程序的控制结构 l l l 顺序结构 分支结构 循环结构 分支语句格式: IF <逻辑表达式> <语句序列 1> [ELSE <语句序列 2>] ENDIF 多分枝语句格式: DO CASE <语句序列 1> CSAE 例: USE sb LOCATE FOR NOT 主要设备 IF FOUND() && 若查到, FOUND函数返回. T. DISPLAY 名称, 价格 REPLACE 价格 WITH 价格*(1 -0. 1) DISPLAY 名称, 价格 ELSE WAIT "无此设备!" WINDOW ENDIF USE RETURN <逻辑表达式 1> <逻辑表达式 2> <语句序列 2> … CASE <逻辑表达式n> <语句序列n> [OTHERWISE <语句序列n+1>] ENDCASE
循环语句格式与示例 条件循环 步长循环 DO WHILE <逻辑表达式> FOR <内存变量>=<数值表达式 1> TO <数值表达式 2> [STEP <数值表达式 3>] <语句序列> ENDFOR NEXT ENDDO * e 4 -7. prg * e 4 -9. prg USE sb s=0 && s为累加器, 初值为 0 DO WHILE NOT EOF( ) FOR i=1 TO 100 && i为计数器, 初值为 1 IF 价格>10000 s=s+i ? 名称 ENDIF SKIP ENDDO USE NEXT ? "s=", s && 累加
扫描循环 SCAN [<范围>] [FOR< 逻辑表达式 1>] [WHILE< 逻辑表达式 2>] 其他 ¡ 循环辅助语句 l LOOP语句 <语句序列> l EXIT语句 ENDSCAN * e 4 -10. prg USE sb SCAN FOR 价格>10000 ? 名称 ENDSCAN USE ¡多重循环
4. 3 多模块程序 类型 格式 子程序 [ PARAMETERS <参数表>] <命令序列> 调用命令 ¡ DO <程序名1> [WITH <参数表>] [IN <程序名2>] [RETURN] 过程 PROCEDURE <过程名> [PARAMETERS <参数表 >] <命令序列> [RETURN] 自定义 函数 [FUNCTION <函数名>] [PARAMETERS <参数表>] <语句序列> [RETURN <表达式>] ¡ 自定义函数主要在表达式中调用
4. 3. 4 变量的作用域 ¡ ¡ ¡ 建立公共变量命令格式: PUBLIC <内存变量表> 建立私有变量命令格式: PRIVATE [<内存变量表>][ALL[LIKE | EXCEPT <通配符>]] 建立本地变量命令格式:LOCAL <内存变量表> [例4 -17] 变量隐藏与恢复的示例。 (1) 假定已建立了如下的程序: * e 4 -17. prg PARAMETERS sj && sj为私有变量, 程序调用前的bj被隐藏起来 PRIVATE mj && mj为私有变量, 程序调用前的同名变量mj被隐藏起来 mj =3. 14*sj*sj ? ”程序执行时的变量清单: ” LIST MEMO LIKE ? j RETURN (2) 在命令窗口键入下列命令: RELEASE ALL && 清除用户定义的所有内存变量 mj=0 && 在命令窗口设置的变量是公共变量 bj=3 ? ”程序执行前的变量清单: ” LIST MEMO LIKE ? j && 显示变量清单 DO e 4 -17 WITH bj && bj传入e 4 -17 ? "程序执行后的变量清单: " && 显示变量清单 LIST MEMO LIKE ? j && 程序执行结束时, 被屏蔽的变量mj, bj被恢复
4. 4 窗口设计样例 ¡ BROWSE命令 ¡ 定义功能键 命令格式: ON KEY [LABEL <键标号>] [<命令>] ¡ 窗口关闭命令 RELEASE WINDOWS [<窗口名表>] CLEAR WINDOWS CLEAR ALL ¡ 信息对话框函数 函数格式: MESSAGEBOX(<字符表达式 1>[, <数值表达式>[, <字符表达式 2>]])
[例4 -19] 设计一个可利用功能键为SB. DBF添加记录、删除或恢复记录的浏览窗口。 * e 4 -19. prg PUSH KEY CLEAR && 清除以前设置过的功能键 ON KEY LABEL f 4 DO tj && F 4 — 设置添加记录功能键 ON KEY LABEL f 5 DO schf && F 5 — 设置删除/恢复功能键 ON KEY LABEL f 6 DO pk && F 6 — 清除有删除标记的记录 bs="BROWSE TITLE '设 备 表'+' F 4: 添加 F 5: 删除/恢复 F 6: 清除'" USE sb &bs PROCEDURE tj && 添加记录 APPEND BLANK && 添加一个记录 PROCEDURE schf && 删除/恢复记录处理 IF DELETED() && 记录有删除标记返回. T. RECALL && 当前记录有删除标记则取消它, 即恢复记录 ELSE DELETE && 当前记录无删除标记则打上删除标记 ENDIF PROCEDURE pk && 清除有删除标记的记录 PACK && 清除有删除标记的记录, 浏览窗口被关闭 &bs && 重新打开浏览窗口
d8994a63806ff163a1acd62edf8ab3d9.ppt