Visual FoxPro教程

      学习 2004-7-13 19:1
Visual FoxPro教程

葛绍峰整理
2004年5月
目 录

VFP 各章学习提要    3
第一章 数据库系统基础知识    10
1.1 数据库系统概述    10
1.2 Visual FoxPro 6.0概述    11
1.3 项目管理器    13
1.4 VFP 6.0 的一些规则    13
第二章 表的创建和使用    15
2.1 VFP6.0表    15
2.2 表结构的创建和修改    16
2.3 表记录的处理    17
2.4 表的使用    20
2.5 表的索引    21
第三章 数据库的创建和使用    24
3.1 VFP数据库    24
3.2 数据库的创建 [图例]    24
第四章 创建查询和视图    29
4.1 创建查询    29
4.2 创建视图    31
4.3 SQL 语言中的命令语句    31
第五章 VFP程序设计基础    33
5.1 程序设计概述    33
5.2 VFP 6.0的语言成分    34
5.3 程序设计基础    36
第六章 面向对象的程序设计    39
6.1 面向对象程序设计概述    39
6.2 类的创建    40
6.3 创建并处理对象    42
6.4 事件与方法    43
第七章 表单设计    45
7.1 基本概念    45
7.2 创建表单    46
7.3 向表单中添加控件    46
7.4 修改表单布局    48
7.5 定制表单    48
7.6 设计自定义表单的一般方法    49
第八章 报表与标签设计    51
8.1 基本概念    51
8.2 创建报表    51
8.3 修改报表    52
8.4 标签设计    52
第九章 菜单与工具栏设计    54
9.1 菜单系统规划    54
9.2 创建菜单    54
9.3 创建自定义工具栏    55
第十章 应用程序开发    56
10.1 开发应用程序的基本步骤    56
10.2 优化应用程序的技巧    56
10.3 程序开发实例    57
VFP 总复习概要    59



VFP 各章学习提要
第一章 数据库系统及VFP概述
1. 掌握关系数据库的基础知识
(1)掌握数据库和DBMS的概念
(2)了解信息的三个领域及数据模型
(3)掌握关系模型及其性质
(4)理解二维表及其关键字
2. 熟悉VFP集成环境
(1) 熟悉VFP的用户界面和环境设置
(2) 掌握项目管理器的使用方法
(3) 了解VFP文件类型、创建文件的一般方法以及创建各类文件的常用工具(设计器、向导等)
3. 基本操作要求:
(1) 启动和退出VFP系统
(2) 创建、打开和关闭项目
(3) 在项目中创建、添加、移去、删除、打开、修改各种类型的文件。
关系数据库的基础知识和VFP相关知识对照表
关系数据库的基础知识    VFP相关知识
观念世界中的实体对象及其属性和实体集    记录、字段和表
实体与实体之间的联系    表与表之间的关系
关系模型中要求二维表的每一列有唯一字段名    表结构中不允许有相同字段名
关系模型中要求二维表不允许出现相同的两行    表的主索引要求索引关键字表达式的值唯一
二维表的主关键字、候选关键字    表的主索引、候选索引
二维表的主关键字与外部关键字    永久关系中主表的主关键字与子表的外部关键字
第二章 表的创建和使用
1. 掌握表的概念、组成和分类;
2. 掌握勇表设计器创建和修改表结构的方法及相关的SQL命令;
3.掌握字段的基本属性(字段名、数据结构、宽度、小数位数和空值支持);
4.掌握表记录的追加、浏览、定位、修改、删除和筛选操作技术;
5.掌握追加、删除、更新记录的SQL命令;
6.掌握表的打开和关闭方法以及工作区和当前工作区的概念;
7.掌握表的索引的概念,索引的类型,结构复合索引文件的创建、修改和使用方法;
8.掌握表之间的关系及其种类,表的关联及其建立和解除的方法;
9.掌握表的数据缓冲访问的概念、数据缓冲的类型和设置数据缓冲的方法;
10.掌握用TABLEUPDATE()和 TABLEREVERT()函数执行和放弃对缓冲数据的更改的方法;
11.了解用CURVAL()和OLDVAL()函数检测缓冲区数据和表数据的一致的方法;
基本操作要求:
(1)使用表设计器创建、修改表结构;
(2)表记录的追加、修改、浏览、定位、筛选、删除和恢复删除;
(3)创建表的结构复合索引;
(4)表的打开和关闭,设置主控索引。
注意几个概念的区别:
(1)“索引关键字”和“表的关键字”
(2)“索引类型”和“索引文件类型”
(3)“主索引”和“唯一索引”
(4)“主索引”和“主控索引”
有关表的内容小结
表的组成    字段    基本属性(字段名、数据类型、宽度、小数位数和空值支持)
扩展属性(格式、掩码、标题和注释等)
    记录
表的类型    自由表、库表
表结构    创建    表设计器(自由表设计器、库表设计器)
CREAT-SQL
    修改    ALTER TABLE-SQL
记录处理    追加    在浏览/编辑窗口中追加、INSERT INTO-SQL、APPEND[BLANK]
    浏览    BROWSE
    定位    有关概念    记录指针、当前记录、记录号、记录的开始和结束标志
        相关函数    RECNO()、BOF()、EOF()
        定位    绝对定位    GO/GOTO
            相对定位    SKIP
            条件定位    LOCATE、SEEK、SEEK()
    修改    UPDATE-SQL、REPLACE
    删除    删除记录    DELETE-SQL、DELETE
        恢复删除    RECALL
        彻底删除    PACK、ZAP
    筛选    SET FILTER TO …
    扫描    SCAN……ENDSCAN
表处理    打开    相关概念    工作区、当前工作区、表的别名
        打开方式    独占、共享
        打开命令    USE、表单数据环境中的表在表单运行时自动打开
    关闭    USE、CLOSE DATABASE、CLOSE TABLES
表单数据环境中的表在表单释放时自动关闭
    数据缓冲    缓冲方式    保守式行缓冲、保守式表缓冲、
开放式行缓冲、开放式表缓冲、无缓冲
        设置缓冲    在“工作区属性”对话框中设置
用CURSORSETPROP()函数设置
在表单、报表的数据环境中设置
        执行对缓冲数据的更改    TABLEUPDATE()
        放弃对缓冲数据的更改    TABLEREVERT()
    表的索引    有关概念    记录顺序(物理顺序、逻辑顺序)、索引关键字、索引标识
        索引类型    主索引、候选索引、普通索引、唯一索引
        文件种类    结构复合索引文件、非结构复合索引文件、独立索引文件
        使用索引    设置主控索引 SET ORDER TO …
        相关函数    CDX()、TAG()、ORDER()
 
第三章 数据库的创建和使用
1. 掌握数据库的概念和创建、打开及关闭数据库的方法;
2. 掌握数据库的组成(库表、永久关系、视图、存储过程);
3. 掌握表之间的关系、关系的种类、纽带表的概念;
4. 掌握库与表之间的链接以及链接的更新和恢复的方法;
5. 掌握库表字段的扩展属性(格式、掩码、标题和注释)及其设置方法;
6. 掌握字段有效性规则、记录有效性规则、表触发器、库表之间参照完整性概念及其设置方法,VFP数据完整性概念;
7. 掌握永久关系的概念、作用及其创建和删除的方法;
8. 掌握临时关系的概念及其建立与解除的方法,以及与永久关系的区别和联系;
9. 了解用DBGETPROP()与DBSETPROP()函数查看和设置数据库属性的方法;
10.了解数据库的设计过程。
基本操作要求:
(1)数据库的创建、打开和关闭;
(2)在数据库中创建、添加、移去库表;
(3)设置库表字段的扩展属性(属性、输入掩码、格式、默认值和注释);
(4)设置字段和记录的有效性规则;
(5)设置库表的扩展属性及库表的触发器;
(6)库表之间永久关系的创建和解除,设置参照完整性;
(7)临时关系的建立和解除。  
永久关系和临时关系的联系与区别
    永久关系    临时关系
区别    作用    主要用来设置参照完整性    控制两张打开的表之间记录的访问
    创建方法    创建主表的主索引或候选索引
创建子表的任意类型索引
基于索引创建永久关系    打开两张要创建临时关系的表
设置子表的主控索引
选择主表工作区
用SET RELATION 命令创建临时关系
    创建条件    只能在同一数据库中的表之间创建    可以在任意库表、自由表、视图、临时表之间创建
    主表数    一张表可以作为多张永久关系的子表,即一张子表可以有多张主表    一张表只能作为一张临时关系的子表
    生命期    永久存储在数据库文件中    随表的关闭而解除
联系    创建永久关系或临时关系的基础是两张表之间确实存在着关系
VFP根据表之间的永久关系在表单或报表的数据环境中自动创建临时关系
一张主表可以有多张子表
VFP数据完整性的约束机制
数据完整性    VFP用以实施数据完整性约束的机制
实体完整性
(数据有效性)    字段有效性    NULL
        字段验证规则
    记录有效性    记录验证规则
    表的有效性    库表的主索引/候选索引
        表的触发器
参照完整性
(数据一致性)    相关表之间的数据一致性    
        库表之间的参照完整性
用户自定义完整性    用户自己编写代码
第四章 设计查询和视图

1. 掌握查询和视图的概念、区别与联系
2. 掌握用查询设计器创建查询、用视图设计器设计本地视图的方法
3. 理解查询和视图字段、筛选、排序、分组的含义,并掌握其设计方法
4. 掌握多表查询或视图中表之间的联系的概念和类型
5. 掌握查询和视图结果的控制和输出去向的设置方法
6. 掌握查询文件和查询的运行方法
7. 了解交叉表查询
8. 了解视图更新源表数据的方法
9. 掌握创建参数视图的方法
10.掌握SELECT-SQL语句的使用方法
基本操作要求:
(1)利用“查询设计器”创建查询
(2)利用“视图设计器”创建视图
(3)利用“查询向导”创建“交叉表查询”
(4)创建基于单张表或视图以及基于两张表或视图的查询或视图
(5)创建含有合计函数的分组查询或视图
(6)用编方式创建查询文件
查询和视图的比较
    查询    视图(本地)
区别    存储    SELECT-SQL命令存储为QPR文件    SELECT-SQL命令存储在数据库中
    处理结果    查询结果为只读的数据    可以更新查询结果中的基表记录数据
    使用    用DO命令运行    可以当作表,用USE命令打开
        单独作为组合框、列表框的一种数据行源(RowSourceType)    作为组合框、列表框的一种数据行源时,与表一样为“别名”类型
联系    都是作为检索数据的方法,查询是检查存储在表中的特定信息的一种结构化方法,视图是特殊的查询;
本质上都是SELECT-SQL命令;
具有相同的数据源类型和输出类型,查询设计器和视图设计器也基本相同。
数据库、表、视图、查询的关系    查询和视图的数据源都可以是数据库表,自由表和视图;
视图可以作为查询和视图的数据源,但查询不可以作为数据源;
查询以命令文件形式独立存储,而视图保存在数据库中。
 第五章 VFP程序设计基础
1. 掌握数据类型和数据存储(常量、变量、数组、字段、对象)的方法
2. 掌握各类型数据运算的操作符、表达式
3. 掌握常用系统函数的用法
4. 掌握Null值的处理方法
5. 掌握VFP名称表达式和宏替换的使用方法
6. 掌握VFP命令格式和基本程序控制语句的用法
7. 掌握创建结构化程序、用户自定义函数和过程的方法
基本操作要求:
(1)创建、编辑和运行程序文件
(2)创建、调用自定义函数或过程
(3)在数据库的存储过程中创建、调用自定义函数或过程。
常用系统函数
函数分类    常用函数
字符处理    AT(),ATC(),LEN(),SPACE()
LTRIM(),RTRIM(),ALLTRIM()
LEFT(),RIGHT(),SUBSTR()
数值函数    ABS(),INT(),MAX(),MIN(),MOD()
数据转换    CHR(),CTOD(),DTOC(),STR(),VAL()
数据库、表及索引    DBC(),DBUSED(),DBGETPROP(),DBSETPROP()
FIELDS(),FCOUNT()
BOF(),EOF(),RECNO(),DELETED(),RECCOUNT(),TABLEREVERT(),TABLEUPDATE(),
SEEK(),ORDER(),TAG()
日期时间    DATE()、DATETIME()、TIME()
文件函数    FILE()、PUTFILE()、GETFILE()、GETDIR()
其它    EMPTY()、ISBLANK()、ISNULL()、IIF()、INKEY()
分支结构和循环结构语句一览
分支结构    二分支    IF……ENDIF
IF……ELSE……ENDIF
    多分支    DO CASE……ENDCASE
循环结构    记录扫描循环    SCAN……ENDSCAN
    FOR循环    FOR……ENDFOR
    DO循环    DO WHILE……ENDDO
 
第六章 面向对象的程序设计
1. 了解面向对象的程序设计的概念
2. 掌握类和对象的概念、类的特点
3. 掌握对象的属性、方法和事迹概念
4. 掌握基类、子类和父类的概念,类的类型
5. 掌握引用对象、设置对象属性和调用对象的方法程序的方法
6. 了解对象事件的响应、容器层次与类层次中事件发生情况以及事件的激发顺序
7. 了解最小事件集和核心事件集
8. 了解事件驱动和事件循环的概念
9. 掌握常用的事件和方法
10.掌握用类设计器设计子类的方法和子类的存储方法及类库文件的概念
11. 掌握添加子类的新属性、新方法以及为新方法编写程序的方法
12. 理解默认属性、事件和方法程序的默认过程的含义以及默认属性和默认过程的覆盖的概念
13. 掌握在子类中调用父类方法程序,在子类中防止基类代码的执行的方法
基本操作要求:
(1)会使用“表单设计器”创建表单子类,或把表单中的控件保存为子类。
(2)会使用“类设计器”创建子类,并保存到类库
(3)会创建基于子类的子类
(4)会创建子类的新方法、新属性,并加以利用
一个动作触发多个事件的情况
动作    动作可能触发的多个对象的多个事件的顺序
单击对象    When 、 GotFocus 、 MouseDown 、 MouseUp 、Click
双击对象    When 、 GotFocus 、 MouseDown 、 MouseUp 、 Click 、 DblClick
单击表单    表单的Activate 、 表单的MouseDown 、表单中第一个对象的When、表单中第一个对象的GotFocus、表单的MouseUp、表单的Click
单击列表框    MouseDown 、 MouseUp 、InteractiveChange、Click
单击表格中新的单元格    BeforeRowColChange、MouseDown、MouseUp、AfterRowColChange、Click
 
第 七章 表单设计
1. 掌握表单向导和表单设计器的使用方法
2. 掌握表单数据环境的设置方法
3. 掌握在表单中和在容器中添加、删除对象的方法
4. 掌握在表单设计器中设置表单及表单中对象的属性和方法
5. 掌握在表单设计器中编辑表单及表单中对象的事件处理程序代码和方法程序代码
6. 掌握表单的运行、向表单中传递参数、从表单返回值的方法
7. 了解用编程方式创建表单的方法
8. 了解单文档和多文档界面
9. 掌握常用控件的属性、事件、方法及其应用
基本操作要求:
(1)利用“表单向导”创建表单
(2)使用“表单设计器”创建和修改表单
(3)掌握与“表单设计器”有关的工具栏的使用方法
(4)在“表单设计器”中设置对象属性、事件处理代码
(5)在“表单设计器”中为表单或表单集创建新属性和新方法
(6)利用“表单设计器”在表单中或各种容器中添加或删除各种控件
(7) 会使用各种控件的生成器
(8)会使用“颜色”、“布局”工具栏对表单中的控件进行布局
(9)会设置各种控件的各种属性
(10)会编写控件各种事件、方法的程序代码
(11)会在程序代码中访问和设置对象的属性,调用对象的方法和事件程序。
通过对象名处理对象的三种方法
普通方法
Thisformset.form1.caption="教师"
Thisformset.form1.autocenter=.T.
Thisformset.form1.refresh
使用WITH……ENDWITH结构
With thisformset.form1
.caption="教师"
.autocenter=.T.
.refresh
endwith
使用对象变量
Oform=thisformset.form1
Oform.caption="教师"
Oform.autocenter=.T.
Oform.refresh
数据环境对象及其包含的对象常用的属性、事件和方法
对象    属性、事件或方法名    注释
数据环境对象
(Data
Environment
Object)    属性    AutoOpenTables     指定当表单、表单集或报表加载时,数据环境中的表或视图是否自动打开
        AutoCloseTables     指定当表单、表单集或报表释放时,数据环境中的表或视图是否自动关闭
        Initial
SelectdAlias    在数据环境加载时,指定与数据环境中某张临时表相关的别名为当前别名
    事件    AfterCloseTables     当数据环境中表或视图被释放时发生
        BeforeOpenTables     在打开数据环境中表或视图之前发生
    方法    OpenTables    打开与数据环境相关的表或视图
        CloseTables    关闭与数据环境相关的表或视图
临时表对象
(Cursor Object)     属性     Alias     为与每张临时表对象相关的表或视图指定别名
        BufferMode
Override    指定是否忽略表单级或表单集级中的BufferMode属性的设置
        Exclusive     指定与临时表对象相关的表是否以独占方式打开
        Filter    指定与临时表对象相关的表或视图的记录筛选表达式
        Order     指定临时表对象的主控索引标识
关系对象
(Relation Object)    属性    ChildOrder     指定子表的索引标识
        OneToMany     指定父表记录指针是否保持在同一记录上,直到子表的记录指针遍历完全部相关记录为止
        RelationalExpr     指定关系表达式
第八章 设计菜单和工具栏
1. 了解设计菜单系统和工具栏的目的、设计原则
2. 掌握菜单的种类和用菜单/快捷菜单设计器设计一般菜单/快捷菜单的方法以及菜单文件的存储方法
3. 掌握菜单程序的生成、运行和恢复系统菜单的命令的用法
4. 掌握为菜单项指定任务、定义热键和快捷键的方法以及设置启用和废止菜单项的方法
5. 掌握SDI菜单的创建方法以及将SDI菜单附加到顶层表单的方法
6. 掌握创建自定义工具栏的方法,以及将自定义工具栏添加到表单集中的方法
基本操作要求:
(1)会使用“菜单设计器”创建和修改一般菜单、SDI菜单及快捷菜单
(2)会把菜单定义文件生成为菜单程序文件
(3)会运行菜单程序,会恢复系统菜单

第一章 数据库系统基础知识
1.1 数据库系统概述
1. 数据处理
数据:
是对事实、概念或指令的一种特殊表达形式,可以用人工的方式或自动化的装置进行通信、翻译转换或者进行加工处理。 它包括两类:一类是能参与数字运算的数值型数据;一类是不能参与数字运算的非数值型数据,如文字、图画、声音、活动图象等。
数据处理:
是对各种类型的数据进行收集、存储、分类、计算、加工、检索与传输的过程。
包括:收集原始数据、编码转换、数据输入、数据处理、数据输出。
2. 数据库系统
(1) 数据库(DataBase)
定义:是以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。
特点: 具有最小的冗余度、具有数据独立性、实现数据共享、安全可靠、保密性能好
(2)数据库管理系统(DataBase Management System)
定义: 是操纵和管理数据库的系统软件。Visual FoxPro 属于一种关系型数据库管理系统。
数据语言:
数据定义语言(DDL): 用来建立所需的数据库。
数据操作语言(DML): 用来对数据库进行查询和维护操作。
关系型数据库使用的标准语言是结构化查询语言(Structured Query Language, SQL)。
(3)数据库系统(DataBase System)
定义: 是以数据库应用为基础的计算机系统。
组成:
数据库
硬件(计算机硬件设备)
软件(数据库管理系统 、操作系统)
用户(应用程序设计员、终端用户、数据库管理员 )
分类:层次型数据库、网状型数据库、关系型数据库
分代:第一代 非关系型数据库系统,60年代末问世,包括层次型和网状型。
第二代 关系型数据库系统(RDBS),70年代中期问世。
第三代 对象-关系数据库系统(ORDBS 、OOBDS),80年代中期至今。
上述三个概念之间的联系:在数据库系统中通过数据库管理系统来建立和使用数据库。
3.关系模型
三个领域:
现实世界→事物(对象、性质)
观念世界→实体(对象、属性)
数据世界→数据(记录、字段)
实体模型:即反映事物联系的实体。
数据模型:即描述实体模型的数据。
数据模型的分类:
层次模型(采用树型结构)
网络模型(采用无向图型结构)
关系模型(采用二维表结构)
关系模型的性质:
二维表的记录数随数据的增加而改变,但其字段数是相对固定的;二维表中的每一列均有唯一的字段名;二维表中不允许出现完全相同的两行二维表中行的顺序、列的顺序均可以任意交换。
二维表的主关键字: 超关键字: 能唯一确定记录的一列或几列的组合
候选关键字:最简练的超关键字
主关键字: 候选关键字中的一个
外部关键字:当A表的主关键字被包含到B表中时,则称A表的主关键字为B表的外部关键字。
4. 微机关系型数据库系统的发展
关系型数据库: 即根据表、记录和字段之间的关系进行组织和访问的一种数据库。
名 称    运行环境    公司名称    发布时间
dBASE, dBASEⅡ, dBASEⅢ,dBASEⅢ PLUS, dBASE    DOS    Ashton-Tate     
FoxBASE 1.0    DOS    Fox软件公司    1987.2
FoxBASE + (2.00/2.10)    DOS    Fox软件公司    87.7/88.7
FoxPro 1.0    DOS    Fox软件公司    1989
FoxPro 2.0    DOS    Fox软件公司    1991
FoxPro 2.5    DOS 、 WINDOWS 3.x    微软公司    1993.1
FoxPro 2.6    DOS 、 Windows 3.x    微软公司    1994
Visual FoxPro 3.0    Windows 3.X    微软公司    1996.1
Visual FoxPro 5.0    Windows 95    微软公司    1997.2
Visual FoxPro 6.0    Windows 98    微软公司    1998.1
1.2 Visual FoxPro 6.0概述
1. VFP6.0的特点
完善了关系型数据库的概念,采用了Rushmore技术,引入了SQL命令;支持多种数据交换格式;采用了可视化的面向对象的程序设计方式;提供了功能完善的集成环境和丰富的开发工具。
2. VFP6.0的用户界面 [图例]
界面基本组成:标题栏、主菜单栏、工具栏、主窗口、命令窗口、状态栏
系统工具一览表
各种菜单    各种工具栏    各种窗口    各种设计器    各种生成器    各种向导
文件菜单    常用工具栏    命令窗口    数据库设计器    文本框生成器    表向导
编辑菜单    表单控制工具栏    浏览窗口    表设计器    组合框生成器    交叉表向导
显示菜单    布局工具栏    代码窗口    表单设计器    命令组生成器    查询向导
格式菜单    调色板工具栏    调试窗口    菜单设计器    编辑框生成器    本地视图向导
工具菜单    打印预览工具栏    编辑窗口    报表设计器    表达式生成器    表单向导
程序菜单    报表控制工具栏    查看窗口    标签设计器    表单生成器    一对多表单向导
窗口菜单    查询设计器工具栏    跟踪窗口    类设计器    表格生成器    报表向导
帮助菜单    表单设计器工具栏    属性窗口    连接设计器    列表框生成器    一对多报表向导
菜单菜单    报表设计器工具栏    通用字段窗口    查询和视图设计器    参照完整性生成器    标签向导
数据环境菜单    数据库设计器工具栏                远程视图向导
表单菜单        项目管理器窗口    数据环境设计器    自动格式生成器    邮件合并向导
项目菜单                    导入向导
查询菜单                   选项组生成器    图形向导
报表菜单                     数据透视表向导
表菜单                    分组/总计报表向导
数据库菜单                    
类菜单                    
3. VFP 6.0的工作方式
(1) 菜单操作方式
根据所需的操作从菜单中选择相应的命令(与WORD类似)。每执行一次菜单命令,命令窗口中一般都会显示出与菜单对应的命令内容。
利用工具菜单中的向导可以很方便地完成常规任务。
(2) 命令交互方式
根据所要进行的各项操作,采用人机对话方式在命令窗口中按格式要求逐条输入所需命令,按回车后,机器逐条执行。
(3) 程序执行方式
先在程序编辑窗口中编完程序,再从程序菜单中选择执行,或从命令窗口中输入DO 命令,让机器执行。
4. VFP 6.0常用文件类型
VFP 6.0常用的文件扩展名及其关联的文件类型
扩展名    文件类型    扩展名    文件类型
.app    生成的应用程序    .frx    报表
.exe    可执行程序    .frt    报表备注
.pjx    项目    .lbx    标签
.pjt    项目备注    .lbt    标签备注
.dbc    数据库    .prg    程序
.dct    数据库备注    .fxp    编译后的程序
.dcx    数据库索引    .err    编译错误
.dbf        .mnx    菜单
.fpt    表备注    .mnt    菜单备注
.cdx    复合索引    .mpr    生成的菜单程序
.idx    单索引    .mpx    编译后的菜单程序
.qpr    生成的查询程序    .vcx    可视类库
.qpx    编译后的查询程序    .vct    可视类库备注
.scx    表单    .txt    文本
.sct    表单备注    .bak    备份文件
5. 创建文件
新建各种类型的文件时,可以利用系统提供的相应工具,以提高工作效率。新建文件时可用的设计器和向导。 
1.3 项目管理器
1. 项目管理器简介
项目:
是一种文件,用于跟踪创建应用系统所需要的所有程序、表单、菜单、库、报表、标签、查询和一些其他类型的文件。
项目管理器:[图例]
是开发VFP应用系统的一个工具,它生成一个项目文件,项目文件的扩展名为.PJX,项目备注的扩展名为:.PJT。
项目管理器窗口的组成:
由6大类数据项(全部、数据、文档、类、代码、其他)和10个命令按钮(新建、添加、修改、浏览、关闭、打开、预览、运行、移去、连编)组成。
注:粗斜体表示的命令按纽根据用户选择的不同对象相应地出现。
项目菜单的组成:13个子菜单(其中一部分与项目管理器中的命令按钮功能相同)。
项目管理器的功能:组织和管理所有与应用系统有关的各种类型的文件。
2. 创建项目文件
用菜单方式:
打开文件菜单 → 新建 → 项目→ 新文件 → 给出合适的项目文件名及保存位置 → 进入项目管理器 → 开发应用系统 → 完成后关闭窗口退出。
用命令方式:
语法:CREATE PROJECT <项目文件名>
功能:打开项目管理器窗口进行应用系统的开发。
3. 修改项目文件
用菜单方式:
打开文件菜单 → 打开 → 找到所需的项目文件并确定之 → 进入项目管理器→ 修改应用系统 → 完成后关闭窗口退出。
用命令方式:
语法:MODIFY PROJECT <项目文件名>
功能:打开项目管理器窗口进行应用系统的修改。
4. 项目管理器的使用
可以利用项目管理器来创建、打开、浏览、修改所有VFP文件并运行其中的表单、报表、标签、菜单、程序等。特别是可以利用它来连编项目(追踪这些文件的变化情况,包括它们之间的相关性、引用和连接等,确保引用的完整,并加入自上次连编之后更新了的一些组件)、应用程序(扩展名为.APP,在VFP环境下执行)和可执行文件(扩展名为.EXE,能脱离VFP环境执行)。 
1.4 VFP 6.0 的一些规则
1. VFP6.0 的命名规则:
&#8226; 只能使用字母、下划线和数字。
&#8226; 使用字母或下划线作为名称的开头。
&#8226; 名称可以是 1 至 128 个字符,但自由表的字段名和索引标识最多只能有 10 个字符。
&#8226; 避免使用 Visual FoxPro 的保留字。
&#8226; 文件的命名遵循操作系统的约定。
2. 命令和子句的书写规则
(1) 以命令动词开始;
(2) 各部分之间要用空格隔开;
(3) 命令、子句、函数名都可简写为前4个字符,大、小写等效;
(4) 一行只能写一条命令,总长度不超过8192个字符,超过屏幕宽度时用续行符“;”;
(5) 变量名、字段名和文件名应避免与命令动词、关键字或函数名同名,以免运行时发生混乱。
(6) 命令格式中的符号约定:
命令中的[ ] 、| 、…、< > 符号都不是命令本身的语法成分,使用时不能照原样输入,
其中:[ ] 表示可选项,根据具体情况决定是否选用
| 表示两边的部分只能选用其中的一个
… 表示可以有任意个类似参数,各参数间用逗号隔开
< > 表示其中内容要以实际名称或参数代入
3. 命令工作方式中的常见错误
(1) 命令动词写错
(2) 格式不符合要求
&#8226; 标点符号不对(一定要用英文标点符号)
&#8226; 缺少必需的空格或添加了不该有的空格
&#8226; 数据类型不一致,要注意字符型、数值型、日期型、逻辑型数据的书写格式
(3) 打不开所需文件:没有正确输入盘符和路径或文件名输错

第二章 表的创建和使用
2.1 VFP6.0表
1. 表的概念
表(数据表):
是指存放在磁盘文件中的一张二维表。(相当FoxPro 2.x 版本中的数据库)
自由表:不属于任何数据库的表。
数据库表:包含在一个数据库中的表。
表文件名:
表名可以由字母、数字或下划线组成,系统自动给出的扩展名为 .DBF。
备注文件名:
当表中有备注型或通用型字段时,系统自动生成与所属数据表的表名相同、扩展名为:.FPT的文件名。
表结构:存储表记录的公共结构。(就是指一张表的表头结构,即字段的属性)。
记录:表中的一行。它是多个字段的集合,同一张表的每个记录都有相同的字段。
字段:表中的一列。它规定了数据的特征。
关系型数据表的特点:
(1)每一个字段不可再分解,也不能有名字相同的字段;
(2)每一列中的数据都有相同的数据类型;
(3)表中没有内容完全相同的行(记录)。
2. 字段的基本属性
字段的属性:
包括:字段名、数据类型、字段宽度、小数位数、空值支持
字段名:
即每个字段的名字,必须以字母开头,可由字母、数字、下划线组合而成,字母大、小写无区别,但其中不许有空格或其它字符。自由表的字段名最多由10个字符组成,数据库表的字段名支持长名,最多可达128个字符。如果从数据库中移去一个表,那么此表的长字段名将被截短成 10 个字符。
VFP允许长字段名和长表名,但使用长名称对于跨平台的操作可能遇到难以预料的结果。
数据类型:指该字段的数据特征。
字段宽度:指该字段所能容纳数据的的最大字节数。
小数位数:指数值型数据将保留几位小数。此时的字段宽度 = 整数位数+1+小数位数。
NULL 值(空值):
无明确的值。NULL 值不等同于零或空格。一个 NULL 值不能认为比某个值(包括另一个 NULL 值)大或小,相等或不同。
VFP 6.0表中字段的数据类型
字段类型    代号    说明    字段宽度    使用示例
字符型    C    字母、汉字和数字型文本    每个字符为1个字节,最多可有 254 个字符    学生的学号或姓名, "8199101" 或 '李立'
货币型    Y    货币单位    8 个字节    工资, $1246.89
日期型    D    包含有年、月和日的数据    8 个字节    出生日期,
{02/25/2000}
日期时间型    T    包含有年、月、日、时、分、秒的数据    8 个字节    上班时间,
{02/25/2000 9:15:15 AM}
逻辑型    L    “真”或“假”的布尔值    1 个字节    课程是否为必修课,
.T. 或 .F.
数值型    N    整数或小数    在内存中占 8 个字节;在表中占1 至20个字节    考试成绩, 83.5
双精度型    B    双精度浮点数    8 个字节    实验要求的高精度数据
浮点型    F    与数值型一样          
整型    I    不带小数点的数值    4 个字节    学生的数量
通用型    G    OLE 对象    在表中占 4 个字节    图片或声音
备注型    M    不定长度的一段文字    在表中占 4 个字节    学生简历
字符型(二进制)    C    任意不经过代码页修改而维护的字符数据    每个字符用1个字节,最多可有 254 个字符     
备注型(二进制)    M    任意不经过代码页修改而维护的备注数据    在表中占 4 个字节     
3. 表的基本操作
表的创建:设计表名和表结构、输入记录、建立索引
数据维护:增加记录、修改记录、删除记录
创建表的主要步骤: 设计表结构 → 输入记录 → 建立索引 → 数据维护
4.关于表操作的几个基本命令
命令格式    功能
CREATE 表文件名    创建一个新的自由表的结构
USE 表文件名    打开指定的表文件
USE    关闭当前表文件
LIST ALL    显示当前表的全部记录内容(类似于DOS 命令中的dir)
DISPLAY ALL    分屏式地显示当前表的全部记录内容(类似于DOS中的dir/p)
DISPLAY STRUCTURE    显示当前表的结构(分屏显示)
LIST STRUCTURE    显示当前表的结构(不分屏显示)
MODIFY STRUCTURE    调出表设计器,修改当前表的结构。
CLEAR    清除主窗口中的所有内容
注意:
(1)必须先打开所需的数据表才可进行以上操作;
(2)当带有命令子句时,只对指定的记录进行操作;
(3)LIST 命令的默认范围是所有记录,DISPLAY 命令的默认范围是当前记录。 
2.2 表结构的创建和修改
1. 表结构的创建
创建表结构其实就是设计字段的基本属性。可以使用表设计器、表向导或SQL命令来创建表结构。
(1)使用表设计器创建表 [图例]
步骤:
从文件菜单中单击新建 → 在新建对话框中选择表并单击新文件 → 在创建对话框中给出文件名并确定所需的保存位置 → 在表设计器对话框中逐个输入所需字段(用↓或鼠标换行),全部字段输入完成后单击确定。
(2)使用表向导创建表
步骤:
从文件菜单中单击新建 → 在新建对话框中选择表并单击向导→在表向导中做第1步:选取字段,完成后单击下一步 → 在表向导中做第1a步:选择数据库,完成后单击下一步 → 在表向导中做第2步:修改字段设置,完成后单击下一步 → 在表向导中做第3步:为表建索引,完成后单击下一步 → 在表向导中做第4步:完成,选择表的保存方法,完成后单击完成 → 在另存为对话框中给出文件名并确定所需的保存位置。
注意:
先选择一个与待建数据表类似的样表,再从中挑选出所需的部分字段,然后在下一步根据实际需要修改或直接采用原字段的宽度。
(3) 使用 CREATE TABLE - SQL命令
该命令的一般格式为:
CREATE TABLE |dbf <表文件名>(字段名1 字段类型[(字段宽度[,小数位数])][,字段名2 字段类型[(字段宽度[,小数位数])]]……)
例:CREATE TABLE xscj(xh c(8),xm c(6),xb c(2),;cj n(5,1),ksrq d)
2. 表结构的修改
(1)用表设计器修改
用菜单调出表设计器:
 打开所需的表文件 → 单击显示菜单中的表设计器 → 在表设计器对话框中对字段进行修改 → 修改完毕单击确定并在消息框中选择是。
用命令调出表设计器:
USE <表文件名>
MODIFY STRUCTURE
(2) 使用 ALTER TABLE - SQL命令
功能    命令格式示例
添加字段    ALTER TABLE xscj ADD COLUMN kcmc C(14)
重命名字段    ALTER TABLE xscj RENAME COLUMN kcmc TO kc
删除字段    ALTER TABLE xscj DROP COLUMN kc
 
2.3 表记录的处理
1. 记录的输入
(1) 立即输入方式:
设计好表的结构后,系统会提示是否直接进入数据输入状态。若选是,则进入编辑窗口,输完后单击“X”按钮退出,系统自动存盘。需输入备注型或通用型字段的数据时,双击“memo” 或“gen”,在新打开的编辑窗口中输入所需内容,输完后单击“X”按钮系统自动存盘,退回到原窗口 ,此时字段中的“memo” 或“gen”变成“Memo” 或“Gen”。
(2) 追加方式:
若设计好表的结构后并没有及时输入数据,则可以用追加方式:
从文件菜单中(或从命令窗口中输入:USE 表文件名) 打开所需表文件 → 从显示菜单中选择浏览 → 再从显示菜单中选择追加方式 → 在浏览窗口中输入所需记录。
不同追加方式适用的场合
追加记录的方式    适用的场合
显示菜单中的追加方式    在现有数据表的尾部添加一个或多个新记录
表菜单中的追加新记录    在现有数据表的尾部添加一个新记录
表菜单中的追加记录…    从其它数据表中将符合要求(字段名和字段类型相同)的记录添加在当前数据表的尾部
APPEND [BLANK]    在当前表的末尾自动添加一个或多个新记录。相当于显示菜单中的追加方式。有BLANK时添加一个空记录,相当于表菜单中的追加新记录。
APPEND FROM 表文件名 [FIELDS 字段名1,字段名2 …][FOR 条件 ]     从其它数据表中将符合要求(字段名和字段类型相同)的记录添加在当前数据表的尾部。相当于表菜单中的追加记录…。
APPEND FROM 文本文件名 SDF    将符合要求的文本文件全部追加在当前数据表的尾部。
注意:文本内容要与表中的字段结构相适应。
文件菜单中的导入     将其它类型的文件转换成一个完整的VFP数据表。
(3) 使用INSERT-SQL命令
该命令的一般格式为:
INSERT INTO <表名>[(字段名1[,字段名2 …])] valueS (表达式1[,表达式2 …])
例:INSERT INTO xscj(xh,xm,cj) valueS ("81991001", "张良", 85.5)
2. 记录的浏览
(1) 通过浏览窗口
(2) 通过BROWSE 命令
BROWSE命令用来打开表的浏览窗口,可通过不同的子句来实现对特定记录的浏览。
VFP命令中的常用子句
1) 范围子句
子句格式    功能
ALL    表示对表文件的全部记录进行操作
NEXT n    表示对从当前记录开始的共n个记录进行操作, n为正整数
RECORD n    指明操作对象是表文件的第n号记录
REST    对从当前记录起到文件结尾的全部记录进行操作
2) FOR子句
用于指明进行操作的条件。
格式: FOR <条件>
指明只对指定范围中那些符合给定条件的进行当前操作。
例如: list NEXT 6 FOR cj < 85
3) WHILE 子句
也用于指明进行操作的条件。
格式: WHILE <条件>
例如: list NEXT 6 WHILE cj < 85
4) FIELDS 子句
用于指明当前的操作涉及到表文件的哪些字段。
格式:BROWSE [ FIELDS 字段名1,字段名2……]
例如:BROWSE FIELDS xh,xm,cj
3. 记录的定位
(1) 系统对记录的三个控制标志
记录开始标志:位于第一个记录之前。其值用函数BOF()进行测试。
记录指针标志:指向当前记录。其值用函数RECNO()进行测试。
记录结束标志:位于最后一个记录之后。其值用函数EOF()进行测试。
记录指针可以理解为保存当前记录号的变量,它的初始值总是1,不可能为0或负数,最大值是表中记录总数+1。
刚打开表时记录指针的情况
表中记录情况    BOF()的值    RECNO()的值    EOF()的值
无记录    .T.    1    .T.
有记录    .F.    1    .F.
(2)记录的定位方式
绝对定位:是指把指针移到指定的位置。
相对定位:
是指把指针从当前位置开始,相对于当前记录向前或向后移动若干个记录位置。
条件定位:
是指按一定的条件在整张表或表的某个指定范围中查找符合该条件的记录。
通过菜单进行定位
从表菜单中选择转到记录:
记录号——实现绝对定位
定位… ——实现条件定位
通过命令进行定位
记录的定位
命令格式    功能    备注
绝对定位    GO TOP    将记录指针定位到表文件之首    或 GOTO TOP
    GO BOTTOM    将记录指针定位到表文件之尾    或GOTO BOTTOM
    GO <n>    将记录指针定位到指定的n号记录      
相对定位    SKIP <n>    将记录指针从当前记录向上或向下移动n个    n为正值则向下移动
n为负值则向上移动
无n向下移动 1个
条件定位    LOCATE FOR <条件> [ 范围 ]    按顺序搜索表, 直到找到满足指定条件的第一个记录    默认范围是所有记录
 
4. 记录的修改和删除
一张表用非只读方式打开后,即可通过菜单在浏览窗口(或编辑窗口)中或从命令窗口中用命令直接对其记录进行编辑、修改和删除。
(1) 菜单方式
修改记录:
从表菜单中选择替换字段… → 在替换字段对话框中选择待替换的字段并构造出替换表达式及替换条件 → 替换。
删除记录:
从表菜单中选择删除记录 → 在删除对话框中选择删除范围和删除条件 → 单击删除按钮 → 从表菜单中选择彻底删除 → 在消息框中单击是。
删除记录包括两步: 标记要删除的记录 和 彻底删除带删除标记的记录
恢复带删除标记的记录:
从表菜单中选择恢复记录 → 在恢复记录对话框中选择作用范围和条件 → 单击恢复记录按钮。
(2) SQL命令方式 (表事先可以不打开,适用于编程工作方式)
修改记录: 用 UPDATE-SQL 命令。
命令格式: UPDATE <表名> SET 字段1 = 表达式1 [,字段2 = 表达式2 …];
WHERE 条件表达式
例: UPDATE xscj SET cj = cj*1.05 WHERE cj>80
删除记录: 用 DELETE-SQL 命令。
命令格式: DELETE FROM <表名> [WHERE 条件表达式]
例: DELETE FROM xscj WHERE cj<60
(3) 在命令窗口中用VFP命令:
命令格式    功能    备注
插入     INSERT [BLANK][BEFORE]    在当前表的指定位置上插入一个空记录或若干新记录    BLANK :在当前记录后插入一个空记录
BEFORE :在当前记录之前插入若干新记录
修改    CHANGE [FIELDS 字段名1,…][FOR 条件] [LEDIT] [REDIT]    在编辑窗口显示要修改的字段    LEDIT:调出编辑窗口
REDIT:调出浏览窗口
替换    REPLACE 字段名1 WITH 表达式1 [ADDITIVE][, 字段名2 WITH 表达式2[ADDITIVE] …] [范围] [FOR 条件]     把字段值用指定的表达式进行替换。如: 工资单中给某些人长工资    默认范围是当前记录
ADDITIVE:把备注字段的替换内容添加在原备注内容的后面
删除     DELETE [ 范围 ][FOR 条件]     对当前表中指定范围内满足条件的记录加上删除标记 *    默认范围是当前记录
    PACK [MEMO][DBF]    将所有带删除标记的记录从表中抹去(不能再恢复)    DBF:不影响备注文件
MEMO:从备注文件中删除未使用空间
    ZAP    删除当前表中所有记录,只留下表的结构    相当于
DELETE ALL + PACK
恢复     RECALL [ 范围] [FOR 条件]     取消当前表中指定记录上的删除标记    默认范围是当前记录
 5. 筛选记录和字段
(1) 用菜单方式
从表菜单中选择属性 → 在工作区属性对话框中单击数据过滤器框后的按钮 → 在表达式生成器对话框中构造所需的条件表达式并确定 → 单击字段筛选…按钮 →在字段筛选器中选择所需字段并确定 → 单击选项按钮:字段筛选指定的字段 → 确定。
(2)用命令方式
命令格式: SET FILTER TO 条件表达式
例: SET FILTER TO xb ='男'
注意:SQL命令对记录的访问不受此筛选命令的限制。 
2.4 表的使用
1. 工作区
工作区:
指用来标识一张打开的表的区域。一个工作区在某一时刻只能打开一张表,但可以同时在多个工作区打开多张表,一张可以在多个工作区中多次被打开。每个工作区都有一个编号。
表的别名:
在工作区中打开表时为该表所定义的名称。可以自定义别名,否则系统默认就以表名作为别名。若一张表在多个工作区中被打开,系统默认在表名后依次加_a 、_b…。
自定义别名的格式: USE <表名> ALIAS <别名>
当前工作区:
正在使用的工作区。可以通过“数据工作期窗口”或用 SELECT命令把任何一个工作区设置为当前工作区。
SELECT 命令格式: SELECT <工作区号>|<别名>
要操作非当前工作区中的表,可以把其它工作区选为当前工作区,或在命令中强行指定工作区。
命令格式: IN <工作区号>|<别名>
ALIAS([工作区号])函数:
测试指定工作区中的表的别名,无参数时指当前工作区表的别名。
SELECT([别名])函数:
测试指定别名的表所在的工作区号,无参数时指当前工作区的区号。
2. 表的打开和关闭
打开表的途径    关闭表的途径
文件菜单中的打开    工具栏上的打开    数据工作期窗口中关闭    USE
数据工作期窗口中打开    USE <表名>    USE IN <别名>|<工作区号>    CLOSE ALL
USE <表名> IN <工作区号>    USE <表名>AGAIN    CLOSE DATABASE    CLOSE TABLE
USE <表名> ALIAS <别名>    退出VFP系统,则关闭所有的表
3. 表的独占与共享使用
独占使用: 一张表只能被一个用户打开。VFP6.0在默认状态以独占方式打开。
共享使用: 一张表可以被多个用户同时打开。
系统的默认打开方式可以通过工具菜单中的选项…来设置,或 用命令:
SET EXCLUSIVE OFF && 默认打开方式为共享
SET EXCLUSIVE ON && 默认打开方式为独占
或强行打开:USE cj SHARED && 以共享方式打开cj表
USE cj EXCLUSIVE && 以独占方式打开cj表
4. 利用缓冲访问表中的数据
数据缓冲:
先将对表记录的修改存放在缓冲区中,用户决定是否用缓冲区中的数据更新表文件。它是VFP6.0在多用户环境下用来保护对表记录所做的数据更新和数据维护操作的一种技术。
数据缓冲的类型:
记录缓冲:当记录指针移动或关闭表时,缓冲区自动更新表中的相应记录。
表缓冲:当发出更新表的命令或关闭表时更新表。
缓冲锁定方式:有两种:开放式 和 保守式。 
2.5 表的索引
1. 基本概念
记录的顺序 :
物理顺序:即表中记录的存储顺序。用记录号表示。
逻辑顺序:表打开后被使用时记录的处理顺序。
索 引:
指按表文件中某个关键字段或表达式建立记录的逻辑顺序。它是由一系列记录号组成的一个列表,提供对数据的快速访问。索引不改变表中记录的物理顺序。表文件中的记录被修改或删除时,索引文件可自动更新。
索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。
注意:1)用多个字段建立索引表达式时,表达式的计算结果将影响索引的结果;
2)不同类型字段构成一个表达式时,必须转换数据类型。
索引标识(索引名):
即索引关键字的名称。必须以下划线、字母或汉字开头,且不可超过10个字。
索引类型:主索引、候选索引、普通索引、唯一索引。
主索引:
组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值。主索引只适用于数据库表的结构复合索引中。自由表中不可以建立主索引;数据库中的每个表可以且只能建立一个主索引。
候选索引:
在指定的关键字段或表达式中不允许有重复值的索引。在数据库表和自由表中均可为每个表建立多个候选索引。
普通索引:
也可以决定记录的处理顺序,但是允许字段中出现重复值。在一个表中可以加入多个普通索引。
唯一索引:
参加索引的关键字段或表达式在表中可以有重复值,但在索引对照表中,具有重复值的记录仅存储其中的第一个。
2. 索引的作用
用途    采用的索引类型
排序记录,以便显示、查询或打印    使用普通索引、候选索引或主索引
在字段中控制重复值的输入并对记录排序    对数据库表使用主索引或候选索引,对自由表使用候选索引
准备设置表关系    依据表在关系中所起的作用,使用普通索引、主索引或候选索引
3.索引文件的种类
索引文件种类    特征    关键字数目    限制
结构复合索引文件
.CDX    使用和表文件名相同的基本名,随表的打开自动打开。可以看成表结构的一部分。    多关键字表达式,称为标识。    有效表达式限制在 240 个字符之内。
非结构复合索引文件
.CDX    必须明确地打开,使用和表名不同的基本名。其中不能创建主索引    多关键字表达式,称为标识。    有效表达式限制在 符之240 个字内。
独立索引文件
.IDX    必须明确地打开,文件的基本名由用户定义。一般作为临时索引文件。    单关键字表达式。    有效表达式限制在 100 个字符之内。
结构复合索引文件(扩展名为.CDX)的特点:
.在创建索引标识时自动创建。
.在打开表时自动打开。
.在同一索引文件中能包含多个排序方案,或索引关键字。
.在添加、更改或删除记录时自动维护。
4. 创建结构复合索引
VFP中创建索引文件有两种方式:表设计器方式和命令方式。
(1)表设计器方式
打开表文件 →从显示菜单中选择表设计器 → 在表设计器中单击索引 → 输入索引名并选择索引类型 → 选择索引的方向(按升序或降序排列记录) → 在表达式框中输入作为排序依据的索引关键字 → 在筛选框中输入筛选表达式 → 单击确定,完毕。
(2) 命令方式
命令    功能
INDEX ON <索引关键字段> TAG <索引标识>[FOR 条件 ] [ASCENDING | DESCENDING] [CANDIDATE | UNIQUE]     用INDEX ON 命令建立一个索引文件
ALTER TABLE <表名> ADD PRIMARY KEY <关键字段名> TAG <索引标识名>    用SQL命令创建主索引
ALTER TABLE <表名> ADD UNIQUE <关键字段名>TAG <索引标识名>     用SQL命令创建候选索引
注意:1)备注型字段和通用型字段不能作为索引关键字段;
2)不要建立无用的索引,以免降低系统性能;
3)及时清理已无用索引标识,提高系统效率。
4)在复合索引的多个索引中,某一时刻只有一个索引对表起作用。
5. 索引的修改和删除
修改: 打开表设计器,在索引对话框中进行所需修改;
或 用命令重新建立一个相同标识名而索引表达式不同的索引。
删除: 打开表设计器,在索引对话框中删除不需要的索引标识即可;
或 用命令: DELETE TAG ALL | 索引标识1 [, 索引标识2 ] …
删除不需要的索引标识,ALL表示全部标识。
6. 索引的使用
功能    命令格式
打开表的同时指定主控索引    USE <表名> ORDER <标识名>
为已打开的表确定主控索引    SET ORDER TO <标识名> [ASCENDING | DESCENDING] ]
搜索某张已建立索引的表    FIND <表达式>
搜索表中首次出现的记录    SEEK <表达式> [ <索引标识名>]
    SEEK <表达式>
 

第三章 数据库的创建和使用
3.1 VFP数据库
1. 数据库的基本组成
数据库由一个以上相互关联的数据表组成,可以包含一个或多个表、视图、到远程数据源的连接和存储过程。
视图(view):
一个保存在数据库中的、由引用一个或多个表、或其他视图的相关数据组成的虚拟表,可以是本地的、远程的或带参数的。
存储过程(stored procedure):
是保存在数据库中的一个过程。该过程能包含一个用户自定义函数中的任何命令和函数。
创建数据库时系统自动生成3个文件:
数据库文件: 扩展名为 .DBC
数据库备注文件: 扩展名为 .DCT
数据库索引文件: 扩展名为 .DCX
2. 数据库的设计过程
1)明确建立数据库的目的和使用方式
2)设计所需的数据表(包括表结构和表记录)
3)建立表之间的关系
4)改进设计
3.2 数据库的创建 [图例]
1. 数据库的创建过程
数据库的创建过程中一般会涉及下面一些常用操作:
1)创建新表 → 用表设计器 (设置字段属性和表属性)
2)添加表 → 用数据库设计器按钮或数据库菜单
3)创建视图 → 用视图向导、视图设计器
4)建立关系 → 用鼠标将父表的索引拖到子表的相关索引上
5)编辑关系 → 用数据库菜单或快捷菜单 → 参照完整性生成器
6)移去关系 → 用快捷菜单或按delete键
7)修改表 → 用表设计器
8)删除表或视图 → 用数据库设计器按钮或数据库菜单
2. 数据库的新建、打开、关闭
(1)新建数据库:
从文件菜单中单击新建 → 在新建对话框中选择数据库并单击新文件 → 在创建对话框中给出库文件名和保存位置 → 在数据库设计器中建立所需的数据库。
或 从命令窗口中输入命令: create database 数据库名
(2)打开数据库:
从文件菜单中单击打开 → 在打开对话框中给出库文件名和保存位置并确定之。
或 从命令窗口中输入命令: open database 数据库名
(3)关闭数据库:
从命令窗口中输入命令:
close database && 关闭当前数据库
或 close all && 关闭所有被打开的数据库
注意:1) 关闭了数据库表不等于关闭了数据库,但关闭了数据库则其中的数据表被同时关闭;
2) 用鼠标关闭了数据库设计器窗口并不能代表关闭数据库。
3. 用数据库设计器设计数据库
(1) 调出表设计器,建立一个新数据表[图例]
方法1:从数据库菜单中选择新表。
方法2:右击数据库设计器窗口,从快捷菜单中选择新表。
方法3:单击数据库设计器工具栏的新表按钮。
方法4:从文件菜单中单击新建,在对话框中选择表。
注意:
数据库表的表设计器中内容比自由表的多,增加了字段属性和表属性的设置。设置验证规则目的是为了使输入的数据符合要求,在有矛盾时发出错误提示信息。
(2) 数据库表的高级属性
属性类别    属性名称    作用



    字段显示属性    格式    确定字段内容在被显示时的样式
        输入掩码    指定字段中输入数据的格式(即所输入的任何内容均显示成此符号)
        标题    在浏览表时用此名称代替意义不够直观的字段名
    字段验证规则    规则    使所输数据符合设定的条件
        信息    当所输数据违反规则时,系统提示错在哪里
        默认值    减少输入重复性数据时的工作量
    字段注释         使字段具有更好的可读性


    长表名         与表文件名不同,设置了长表名可以一目了然
    记录验证规则    规则    使所输记录符合设定的条件
        信息    当所输记录违反规则时,系统提示错在哪里
    触发器    插入触发器    当所插记录符合此规则时,才可以插入到表中
        更新触发器    当修改后的记录符合此规则时,才可以进行修改
        删除触发器    当待删记录符合此规则时,才可以被删除掉
    表注释         使表具有更好的可读性
字段级规则:
一种与字段相关的有效性规则,在插入或修改字段值时被激活,多用于数据输入正确性的检验。
为字段设置验证规则的方法:
.在表设计器中选定要建立规则的字段名。
.在“规则”方框旁边选择“…”按钮。
.在表达式生成器中设置有效性表达式,并选择“确定”。
.在“信息”框中,键入用引号括起的错误信息。
.在“默认值”框中,键入合理的初值。
.注意不同类型数据的表示方法。
.选择“确定”
记录级规则:
一种与记录相关的有效性规则,当插入或修改记录时激活,常用来检验数据输入和正确性。记录被删除时不使用有效性规则。记录级规则在字段级规则之后和触发器之前激活,在缓冲更新时工作。
触发器:
在一个插入、更新或删除操作之后运行的记录级事件代码。不同的事件可以对应不同的动作。它们常用于交叉表的完整性。
(3) 在数据库中添加表
方法1:从数据库菜单中选择添加表,从打开对话框中选择所需的表并确定之。
方法2:右击数据库设计器窗口,从快捷菜单中选择添加表。
方法3:单击数据库设计器工具栏的添加按钮。
注意:
一个数据表在同一时间内只能属于一个数据库,已隶属于其它数据库的表不能直接被添加进来,需先将其移出数据库还原成自由表。
(4) 创建并添加视图
视图用于显示一个或多个表中的记录,并能够更新源表中的数据,视图只有在数据库中才能存在。
方法1:从数据库菜单中选择新远程视图或新本地视图
方法2:右击数据库设计器窗口,从快捷菜单中选择新远程视图或新本地视图
方法3:单击数据库设计器工具栏的新远程视图或新本地视图按钮
(5) 在数据库中操作表和视图
可以利用数据库设计器工具栏很方便地进行下列操作:
浏览: 在浏览窗口中显示表或视图的内容。
修改: 调出表设计器或视图设计器对表或视图进行修改。
移去:使表从数据库中还原成自由表。对视图移去相当于删除。
删除:从磁盘上彻底删除数据表和视图,并且无法回收。
(6) 在表之间建立永久性关系
永久关系:
是数据库表之间的一种关系,不仅运行时存在,而且一直保留。表之间的永久关系是通过索引建立的。
一对多关系:
表之间的一种关系,在这种关系中,主表中的每一个记录与相关表中的多个记录相关联(每一个主关键字值在相关表中可出现多次)。
一对一关系:
表之间的一种关系,在这种关系中,主表中的每一个记录只与相关表中的一个记录相关联。
创建表间的永久关系:
在数据库设计器中,选择想要关联的索引名,然后把它拖到相关表的索引名上,所拖动的父表索引必须是一个主索引或候选索引。建立好关系后,这种关系在数据库设计器中会显示为一条连接两个表的直线。
注意:需先建立索引然后才能建立关系。
删除表间的永久关系:
在数据库设计器中,单击两表间的关系线。关系线变粗,表明已选择了该关系,按下 delete 键。
编辑关系:
单击所需关系线,右击鼠标,从快捷菜单中选择编辑关系,在编辑关系对话框中改选其它相关表索引名或修改参照完整性规则。
参照完整性(RI):
控制数据一致性,尤其是不同表的主关键字和外部关键字之间关系的规则。Visual FoxPro 使用用户自定义的字段级和记录级规则完成参照完成性规则。
(7) 在表之间建立临时关系
临时关系:
是在打开的数据表之间用 set relation命令建立的临时关系,或是在数据工作期窗口建立。建立了临时关系后,子表的指针会随主表记录指针的移动。表被关闭后,关系自动解除。
临时关系与永久关系的联系与区别:
联系:
(1)都必须明确建立关系的两张表之间确实在客观上存在着一种关系(一对多或一对一关系)。
(2)永久关系在许多场合可以作为默认的临时关系。
区别:
(1)临时关系是用来在打开的两张表之间控制相关表之间记录的访问;而永久关系主要是用来存储相关表之间的参照完整性,附带地可以作为默认的临时关系或查询中默认的联接条件。
(2)临时关系在表打开之后使用set relation命令建立,随表的关闭而解除;永久关系永久地保存在数据库中而不必在每次使用表时重新创建。
(3)临时关系可以在自由表之间、库表之间或自由表与库表之间建立,而永久关系只能在库表之间建立。
(4)临时关系中一张表不能有两张主表(除非这两张主表是通过子表的同一个主控索引建立的临时关系),永久关系则不然。
4. 用命令方式操作数据库
常用命令一览表
命令格式    功能
create database 库文件名    创建新的数据库文件
open database 库文件名     打开指定的库文件
close database    关闭当前的数据库和数据表
close all    关闭所有的数据库和数据表,并把工作区1置为当前工作区,同时还关闭一些窗口
modify database    修改当前库文件结构
delete database 库文件名     删除指定的库文件
open database 库文件名
add table 表名     在数据库中添加表
open database 库文件名
remove table 表名     将表从数据库中移去
open database 库文件名
remove table 表文件名 delete    将表从数据库中移去并从盘上删除
use 库文件名 !表名
browse    “!”表示引用一个不在当前数据库中的表
Set relation to 关系表达式 into 区号 | 别名     建立表之间的临时关系
Set relation to     删除表之间的临时关系
alter table 子表名 add foreign key 索引关键字 tag 索引标识 references 父表名 [tag 索引标识 ]     创建永久关系
alter table 子表名 drop foreign key tag 索引标识     删除永久关系
5. 用CREATE TABLE-SQL 命令创建数据库表
命令一般格式:
Create table 表名1 [free] ( 字段名1 字段类型代号 [ (字段宽度[,小数位数 ] ) ][null | not null] [check 字段规则1 [error “信息1” ] ] [default 默认值][primary key | unique] [references 表名2 [tag 索引标识1 ] ][ , 字段名2 字段类型代号 [ (字段宽度 [, 小数位数]) ] [null | not null] ][check 字段规则2 [error “信息2” ] ] [default 默认值 ] ) | from array 数组名
使用示例:
creat data xscjgl && 创建学生成绩管理数据库
create table xs (;
xh c(4) default "1201" primary key,;
xm c(6), ;
xb c(2) check xb="男" or xb="女" error"性别只能是男或女" default "女",;
nl n(2) null;
) && 创建学生表
create table kc (;
kch c(3) unique, ;
kcm c(10),;
xf n(3,1),;
bxk l;
) && 创建课程表
create table cj(;
xh c(4) default "1201" reference xs tag xh, ;
kch c(8),;
ksrq d,;
cj n(5,1);
) && 创建成绩表
modi data
alter table cj add primary key xh+kch+str(cj,4,1) tag dh && 为成绩表添加一个主索引 
6. 查看和设置数据库的属性
(1) 用dbgetprop()函数查看数据库属性:
命令格式: dbgetprop(cName,cType,cProperty)
(2) 用 dbsetprop()函数设置数据库属性:
命令格式: dbsetprop(cName,cType,cProperty,ePropertyvalue)
(3) 用dbsetprop() 函数给表中字段添加标题和说明
一般格式: dbsetprop('表名.字段名',’field’,’caption|comment’,’标题|说明’)
例:dbsetprop(’xs.xh’,’field’,’caption’,’学号’)
dbsetprop('cj.xh','field','comment','本表学号应与学生表中的学号对应')
7. 数据库表的约束机制
约束机制    级别    激活时机
NULL值    字段    当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时
字段级规则    字段    当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时
主索引/候选索引    记录    发生记录更新时
记录级规则    记录    发生记录更新时
触发器        在INSERT、UPDATE或DELETE事件中,表中值改变时
VALID子句    表单    移出记录时 


第四章 创建查询和视图
4.1 创建查询
1. 查询的概念
查询:就是向一个数据库发出检索信息的请求,从中提取符合特定条件的记录。
查询文件:
即保存实现查询的SELECT-SQL命令的文件。查询文件保存时,系统自动给出扩展名 .qpr;查询被运行后,系统还会生成一个编译后的查询文件,扩展名为 .qpx。
查询结果:
通过运行查询文件得到的一个基于表和视图的动态的数据集合。查询结果可以用不同的形式来保存。查询中的数据是只读的。
查询的数据源:可以是一张或多张相关的自由表、数据库表、视图。
2. 用查询设计器创建查询[图例]
基本步骤:
打开查询设计器 → 添加创建查询所基于的数据表 → 定义输出内容 → 设置联接、筛选、排序、分组条件 → 选择查询结果的输出形式 → 保存查询文件 →运行查询。
(1)打开查询设计器
方法1:
从文件菜单或工具栏上单击新建 → 查询 → 新建文件 → 进入查询设计器
方法2:
当所用到的数据表已在项目中时,从项目管理器窗口中单击数据 → 查询 → 新建 → 新建查询 → 进入查询设计器
方法3:从命令窗口中输入命令:
create query 查询文件名 & 创建新查询
modify query 查询文件名 & 修改已存在的查询
(2) 定义查询的输出内容
单击字段选项卡 → 从可用字段列表框中单击所需字段(当输出的列不是直接来源于表中的字段时,单击函数和表达式框边的… 按钮,打开表达式生成器,构造出所需的表达式)→ 单击添加按钮 → 所需字段自动出现在选定字段框中。
(3) 设置查询的筛选条件
筛选条件决定将哪些记录显示出来。
在筛选框中构造筛选条件表达式时,要注意在实例框中输入不同数据类型时的格式:
1) 字符串可以不带引号(当与源表中的字段名相同时才用引号);
2) 日期型数值要用{ }括起来;
3) 逻辑型数据两侧要带 .号,如 .T.,.F.
(4) 设置查询结果的排序依据
排序决定查询输出结果中记录显示的顺序。
设置方法:
单击排序依据 → 从选定字段框选中字段 → 选择升序或降序 → 单击添加。
(5) 设置查询结果的分组依据
分组是指将一组类似的记录压缩成一个结果记录,目的是为了完成基于该组记录的计算,比如:求平均值、总和、统计个数、其中的最大值、最小值等。
几个常用的统计函数
功能    求平均值    求总和    求最大值    求最小值    统计个数
名称    AVG()    SUM()    MAX()    MIN()    COUNT()
用于分组的字段不一定是选定输出的字段,但分组字段不能是一个计算字段。
可以用 满足条件… 来对分组结果进行进一步筛选。
(6) 对查询结果的其他设置
可以排除查询结果中所有重复的行,并设置结果的记录范围。
(7) 选择查询结果的输出类型
默认情况下,查询结果将输出在浏览窗口中,且其中的数据是只读的。
设置其他输出类型的方法:
打开查询菜单 → 选择查询去向 → 在查询去向对话框中选择一种。一般多选择表或报表。
(8)运行查询
在查询设计器打开的状态下,单击常用工具栏上的 !按钮或从查询菜单中选择运行查询。其他情况下,可从项目管理器中选中查询文件并单击运行按钮,或从程序菜单中选择执行命令,或从命令窗口中输入: DO 查询文件名。
(9) 创建多表查询
打开查询设计器 → 将所需的多个相关表添加进来 → 设置联接条件 → 按上面(2)至(8)步进行。
3. 用查询向导创建查询
(1) 创建标准查询:
打开待查询的数据表 → 从文件菜单中单击新建 → 在新建对话框中选择查询并单击向导 → 选择查询向导 → 从单张或多张相关的表中进行字段选取 → 设置筛选条件 → 设置排序次序 → 选择查询结果的保存方式 → 给出查询文件名并选择保存位置 → 查询结果显示在查询窗口中。
注意:查询此时得到的数据是只读的,不可以更新。
(2)交叉表查询
打开待查询的数据表 → 从文件菜单中单击新建 → 在新建对话框中选择查询并单击向导 → 选择交叉表向导 → 从单张表中选取字段 → 设计布局 → 加入总和信息 → 选择查询结果的保存方式 → 给出查询文件名并选择保存位置 → 查询结果显示在查询窗口中。
注意:不是任何表都适宜采用交叉表的形式。
(3)用SELECT-SQL命令创建查询
常用的格式:
SELECT 表名1. 字段名1 [AS 标题名1], 表名1. 字段名2 [AS 标题名2], …
FROM 数据库名! 表名1 [,数据库名! 表名2 ] [, 数据库名! 表名3 ]
[TO FILE 文本文件名 | into table | into cursor 表文件名 ]
[ WHERE 选定条件]
[GROUP BY 分组字段名 ]
[HAVING 分组中的满足条件 ]
[ORDER BY 排序字段名1 [ASC | DESC] [, 排序字段名2 [ASC | DESC] ...]]
示例:
浏览学生中的查询学生 student.qpr :
SELECT 表xs.xh as 学号, 表xs.xm as 姓名, 表xs.xb as 性别, ;
表xs.csrq as 出生日期, 表xs.bj as 班级名称;
FROM 数据test!表xs;
WHERE 表xs.bj =cs1;
ORDER BY 表xs.xh;
INTO TABLE xs
浏览成绩中的按课程查询 sub_cj.qpr :
SELECT 表xs.bj as 班级名称, COUNT(表xs.xh) as 班级人数, AVG(表cj.cj) as 平均分, ;
MAX(表cj.cj) as 最高分, MIN(表cj.cj) as 最低分;
FROM 数据test!表xs, 数据test!表cj, 数据test!表kc;
WHERE 表cj.xh = 表xs.xh;
AND 表kc.kcm = 表cj.kcm;
AND 表cj.kcm = sc1;
GROUP BY 表xs.bj;
ORDER BY 表xs.bj;
INTO TABLE sub_cj
4.2 创建视图
1. 视图的特点
1) 视图是存在于数据库中的一个虚表,不以独立的文件形式保存;
2) 视图中的数据是可以更改的,它不仅具有查询的功能,且可以把更新结果反映到源数据表中;
3) 视图打开时,其基表自动打开,但视图关闭时,其基表并不随之自动关闭;
4) 视图的数据源可以是自由表、数据库表或另一个视图。
2. 用视图设计器创建本地视图[图例]
从项目管理器中选择一个数据库 → 选择本地视图 → 单击新建按钮 → 选择新视图 → 添加所需的数据表 → 在视图设计器中按照与创建查询相同的步骤(2)~(6)建立视图 → 设置更新条件 → 保存视图 → 给出视图名称 → 关闭视图设计器(可以先运行一下看看)。
创建参数化视图:
在筛选页面的实例框中输入: ?参数名 → 从查询菜单中选择视图参数 → 在对话框中给出参数名并选择参数类型 → 确定 → 保存视图 → 给出视图名称 → 关闭视图设计器(可以先运行一下看看)。
3. 用视图向导创建本地视图
从项目管理器中选择一个数据库 → 选择本地视图 → 单击新建按钮 → 选择视图向导 → 选取字段 → 关联表 → 记录操作范围 → 筛选记录 → 排序记录 → 选择保存方式→ 完成。
4. 用CREATE SQL VIEW 命令创建视图
打开数据库,用命令来创建视图:
OPEN DATABASE 数据库名
CREATE SQL VIEW 视图文件名 AS SQL-SELECT 语句
例: OPEN DATABASE SJ
CREAT SQL VIEW SCORE AS SELECT SJCJ.XH, SJCJ.CJ ;
FROM SJ!SJCJ WHERE SJCJ.KCH=”计算机基础”
5. 视图的使用
用菜单方式对视图中的记录进行编辑的方法与操作数据表相同。也可用以下命令操作。
视图操作基本命令
打开视图文件并浏览    OPEN DATABASE 数据库名
USE 视图文件名
BROWSE
修改视图    MODIFY VIEW 视图文件名
视图重命名    RENAME VIEW 原视图文件名 TO 新视图文件名
删除视图    DELETE VIEW 视图文件名
6.利用视图更新源表数据
可在视图设计器的更新条件页面中进行如下设置来实现对源表数据的更新:
1)从表框中选择想要更新的源表;
2)在字段名框中单击一个字段前关键列&#61506; 和更新列 &#61473; ,使其作为主关键字和可更新字段;
3)将发送SQL 更新复选框选中
4.3 SQL 语言中的命令语句
SQL是一种日趋流行的标准的数据库系统管理语言,能使数据检索异常地方便、灵活。
VFP5.0支持的7条SQL命令一览表
命令    功能    示例    备注
CREATE TABLE -SQL    创建一个指定字段的表    create table xs (;
xh c(4) default "1201" primary key,;
xm c(6), ;
xb c(2) check xb="男" or xb="女" error "性别只能是男或女" default "女",;
nl n(2) null )    新表的每个字段由名称、类型、精度、比例、是否支持 NULL 值和参照完整性规则来定义,可从命令本身或数组中获得这些定义。
CREATE CURSOR-SQL    创建一个临时表    CREATE CURSOR teacher ;
(TeacherID N(5), Name C(20), Address;
C(30),OfficeNo C(8) NULL, Specialty M)    
ALTER TABLE - SQL    以编程方式修改一个已存在的表的结构。    ALTER TABLE xscj ADD COLUMN kcmc C(14)    可以修改表中每个字段的名称、类型、精度、比例、是否支持 NULL 值和参照完整性规则。
        ALTER TABLE cj;
ALTER COLUMN cj SET CHECK cj >= 0;
ERROR " 成绩不能为负数"    
SELECT - SQL    从一个或多个表中检索数据。    SELECT 表xs.xh, 表xs.xm, 表xs.xb, ;
FROM 数据test!表xs;
WHERE 表xs.xh >'81991025';
ORDER BY 表xs.xh    可以用union命令连接两个条件。
DELETE - SQL    使用 SQL 语句将表中的记录加上删除标记。    DELETE FROM cj WHERE cj<60     
INSERT - SQL    在已存在表的末尾追加一条新记录     INSERT INTO xs(xh,xm,xb) valueS;
("8399101", "张丽", "女")    新记录包含的数据列在 INSERT 命令中,或者来自数组。
UPDATE - SQL    更新表中的记录    UPDATE cj SET cj = cj*1.05 WHERE cj>80    可以基于 SELECT - SQL 语句结果更新记录


第五章 VFP程序设计基础
5.1 程序设计概述
1. 程序设计方法简介
设计方法    主要概念    设计过程    程序执行方式
结构化程序设计    功能模块(即过程、自定义函数)    编制各个功能模块,再用主程序将它们串起来    将应用程序分解成若干功能模块,通过各模块的相互调用来完成整个执行过程,是过程驱动的。
面向对象程序设计    类、对象、属性、事件、方法    设计类、子类、对象(设计外观、设置属性、为事件编写方法程序)    将应用程序分解成具有特定属性的对象,通过调用各对象的不同方法来完成相关事件,是事件驱动的。
2.数据类型
VFP 包含下列数据类型:
通用的数据类型    字符型
Character    货币型
Currency    日期型
Date    日期时间型
DateTime    逻辑型
Logical    数值型
Numeric
仅用于字段的数据类型    双精度型
Double    浮点型
Float    整型
Integer    通用型
General    备注型
Memo     
3. 数据容器
VFP中用来存储数据的容器有:常量、变量、数组、记录和对象。
(1) 常量(constants):
一个在操作过程中保持不变的数值或字符串。
常用的常量类型
常量类型    数值型常量    字符型常量    逻辑型常量    日期型常量
表示方式    -25.36    "abc","123","中国"    .T. .F.    {03/07/2000}
(2)变量(variables):
是内存中的一个存储单元的位置,其中的内容可以变化,但标识该存储位置的名称(即变量名)不变。
变量的命名习惯: 类型变量代号
如:cStud 、nCj 、dCsrq ——
分别代表一个字符型、数值型、日期型的变量名
变量的赋值方式: 1) 用 STORE 命令 如:STORE "王兰" TO cStud
2) 用赋值操作符 = 如:cStud = "王兰"
变量的作用域: 即变量起使用的有效范围。
变量作用域    定义作用域的关键字    特点
局部变量
local variable(本地变量)    LOCAL    只能在一个函数或过程中被访问,其他过程或函数不能访问此变量的数据。当其所属程序停止运行时,局部变量将被释放。
私有变量
private variable    PRIVATE    私有变量在 VFP 中是默认的,不需要特殊的关键字定义。但是,如果在更高一级例程(routine)中已经有同名变量,可以用PRIVATE 关键字予以声明,以限定其范围。当定义此变量的例程结束时,此变量也被相应释放。可使用私有变量在被调用的函数中共享数据。
公共变量
public variable    PUBLIC    可用于所有过程和函数,而不限于定义该变量的过程和函数。可使用全局变量在多个过程或函数之间共享数据,在命令窗口中创建的任何变量自动具有全局属性。
变量的访问:
当变量和字段同名时,字段有优先被访问权。要在变量名前加 m. 或 m -> 以示区别,如 m.cStud
(3)数组(array):
是存储在一个变量中由单个变量名引用的有序数据集合。在 VFP中,一个数组中的数据不必是同一种数据类型。常用的有一维数组,二维数组。
数组元素的标识:通过一个数值下标来引用,如 AA[2],AA[2,3]
数组类型的声明:
私有数组 ——用DECLARE 或 DIMENSION定义
全局数组 ——用PUBLIC命定义
局部数组 ——用LOCAL定义
数组元素的赋值:
用赋值语句: 如 AA=45
用SCATTER从当前记录中取特定字段的值赋给数组:
如: scatter fields xh, xm, xb to aa
(数组长度、类型自动与所给字段相同)
用 COPY TO ARRAY从当前记录中取所有字段的值赋给数组:
如: copy to array aa
(数组长度、类型自动与表中全部字段相同)
把数组中的数据传给当前表中的当前记录:
gather from 数组名 [fields 字段名表]
用数组向当前表添加记录:
append from array 数组名 [for 条件] [[fields 字段名表]
(用二维数组可以同时添加多条记录)
数组处理的常用函数:
排序SORT(),搜索ASCAN(),删除ADEL(),插入AINS()
(4) 记录:
表中的一行,由字段组成。
(5) 对象:
对象是类的一个实例,类是对拥有数据和一定行为特征的对象集合的描述。VFP对象可以是表单、表单集、控件。
5.2 VFP 6.0的语言成分
1. 命令
即:由用户发出的、指示VFP进行某种操作的指令。
如 USE aaa && 打开 一个名为 aaa.dbf 的数据表
2. 函数
即:一个预先编制好的模块,可由VFP程序在任何地方调用。
函数的使用方法:名称、功能、参数、返回值
几个常用函数
名称    命令格式    示例
字符串截取函数    SUBSTR( expC,expN1[,expN2 ])    ? SUBSTR(“ABCDEFG”,2,4)
结果是: BCDE
    LEFT( expC,expN )    ? LEFT(“ABCDEFG”,2) 结果是: AB
    RIGHT( expC,expN )    ? RIGHTT(“ABCDEFG”,4)
结果是: DEFG
字符串查找函数    AT ( expC1 , expC2 [ expN ])    ? AT(“B”, “ABCDE”) 结果是: 2
? AT(“A”, “ABCDEASD” )
结果是: 1
? AT(“A”,“ABCDEASD”,2 )
结果是: 6
大小写字母转换函数    LOWER( expC )    ? LOWER(“DFGHa”) 结果是: dfgha
    UPPER( expC )    ? UPPER(“asdf”) 结果是: ASDF
数值函数    MAX(exp1,exp1[,exp3,…])    ? MAX(15,23,4,56) 结果是: 56
    MIN(exp1,exp1[,exp3,…])    ? MIN(15,23,4,56) 结果是: 4
    ABS( expN )    ? ABS(-15.83) 结果是: 15.83
    INT( expN )    ? INT(25.62) 结果是: 25
压缩空格函数    ALLTRIM( expC )    ? ALLTRIM(" AD B G ")
结果是: AD B G
类型转换函数    STR( expN1[,expN2][,expN3])    ? STR(789.678,6,2) 结果是: 789.68
    CTOD( expC )    ? CTOD(“98/10/15”)
结果是: 98/10/15
    VAL( expC )    ? VAL("123.45") 结果是: 123.45
    DTOC( expD )    ? DTOC({98/12/15})
结果是: 98/12/15
日期时间函数    DATE()    ? DATE() 结果是: 2000/03/15
    DATETIME()    ? DATETIME()
结果是: 2000/03/15 10:15:30
    YEAR( expD )    ? YEAR({87/03/25}) 结果是: 1987
数据库函数    RECNO( )    DBC( )    SEEK( )    其它函数    LEN( )    DELETED()
    EOF( )    BOF( )    FOUND( )        EMPTY(exp)    INLIST(,,)
    RECCOUNT( )     SELECT( )        BETWEEN(,,)    IIF(,,)
    TABLEREVERT( )    LOCK( )        CHR()    ASC()
     TABLEUPDATE( )    FSIZE( )        TAG()    INKEY()
自定义函数:
由用户为自己的应用程序创建的专用函数,可作为独立的程序文件保存在磁盘上也可作为过程文件存放在其他程序中。
3. 表达式
即:变量、操作符、常量、函数、字段名、控制以及属性的组合,求值结果为单个值。
表达式的类型:
算术表达式:由算术操作符和数值型数据构成的表达式。
字符表达式:由字符操作符和字符型数据构成的表达式。
日期表达式:由日期操作符和日期、时间型数据构成的表达式。
逻辑表达式:由逻辑操作符和逻辑型数据构成的表达式。
名称表达式:
由圆括号括起来的一个字符表达式,用来替换命令或函数中的名称。
例: DBF_NAME="学生成绩登记表"
USE (DBF_NAME)
宏替换:用宏替换符号 & 表示,它与名称表达式具有相似的作用。
例: 已知 A="1", B="2", C12="GOOD"
则 C&A&B="GOOD"
4. 操作符
数值操作符    ( )    ^ 或 **    *    /    %(取余数)    +     -
关系操作符    <    <=    >     >=    <> 或 != 或 # = =
逻辑操作符    ()表达式分组    NO或!(非)    AND(和)    OR (或)
日期和时间操作符    +    -     注意: 日期型: 天数 时间型: 秒数
字符操作符:    +    -     $                
两个特殊的操作符    圆点操作符(.):用于分隔对象的名称以及分隔对象中的属性、事件、方法。
    范围转变操作符(::):提供了从一个子类中调用一个父类的方法。
5.3 程序设计基础
1. 基本概念
程 序:为解决某一问题而设计的一系列指令。
主程序:通常被用户直接执行的程序。
子程序:在程序中被调用的程序。
源程序: 由人用源语言编写的计算机程序,必须翻译成机器语言后才能被执行。
目标程序: 是源程序经过编译后所产生的机器语言程序。
可执行程序:
源程序被编译后产生的可被机器直接执行的程序,具有 .EXE 扩展名。在VFP中是指由项目管理器连编生成的、可脱离VFP环境运行的程序。
应用程序:
指为完成专门工作而设计的一组相互联系的例行程序和子程序。在VFP中是指一组 Visual FoxPro 程序、表单、菜单和其他文件经项目管理器连编后形成的单个程序,不能脱离VFP环境运行,扩展名为.APP。
例行程序:
按某种顺序排列的、使计算机能执行某种任务的指令集合,可以是一种专用的程序或作为程序的一部分。它可由若干个子程序组成。
2. 程序控制
(1) 顺序语句
即按程序中的语句顺序依次执行。
(2) 分支语句
条件语句:    情况语句:
IF 条件
命令组1
[ ELSE
命令组2 ]
ENDIF    DO CASE
CASE 情况1
命令组1
CASE 情况2
命令组2

[OTHERWISE
其它命令组 ]
ENDCASE
3. 循环语句
FOR
循环语句(预知循环次数)    FOR 变量 = 初值 TO 终值 [STEP 步长 ]
命令组
ENDFOR | NEXT
DO WHILE
循环语句(未知循环次数)    DO WHILE 条件
命令组
ENDDO
SCAN
循环语句(针对全部记录)    SCAN [ 范围 ] [FOR | WHILE 条件 ]
命令组
ENDSCAN
循环结构中的LOOP命令和EXIT命令:
LOOP是短路语句,表示从此开始下一次循环;
EXIT是退出语句,表示跳出循环。
4. 子程序
子程序的的形式可以是一个程序文件,也可以是一个过程或自定义函数。
     子程序    自定义函数    过程
特点    总是被其他程序调用而不单独执行,可以调用其他子程序,不一定要返回一个值。    能以一个独立的文件储存,也可包含在调用程序中,必须返回一个值。    是一个程序段,是程序的组成部分,一般放在程序的最后。
定义方法    与程序相同,只是在子程序的结尾加需一条返回命令:
RETURN [ 表达式 |TO MASTER |TO 程序文件名]    FUNCTION 函数名
或:MODIFY COMMAND 函数名
PARAMETERS 数表
命令组
RETURN 表达式
注:用此命令定义的函数以独立的文件形式储存。    PROCEDURE 过程名
PARAMETRS 参数表
命令组
RETURN
调用方法    DO 子程序名[WITH 参数表 ]    = 函数名 ( 参数表 )    DO 过程名 WITH 参数表
3. 创建应用程序
方法一:
在命令窗口中输入: MODIFY COMMAND 程序名
方法二:
单击文件菜单 → 新建 → 程序 → 新文件 → 在编辑窗口中编辑程序 → 完成后关闭 → 给出合适的程序名及保存位置 。
程序的注释: 方法1: * | NOTE <注释内容> 可出现在程序中的任何地方
方法2: && <注释内容> 一般用于命令的尾部
给程序加注释的目的是为了提高程序的可读性。
面向过程的程序设计三步曲: 输入 → 处理 → 输出
4. 修改应用程序
方法一:
在命令窗口中输入: MODIFY COMMAND 程序名 | ?
注: ? 表示不知道程序名,要从打开对话框中选定。
方法 二:
单击文件菜单 → 打开 → 选择所需程序并打开 → 在编辑窗口中对程序进行修改 → 完成后关闭退出。
5. 执行应用程序
方法一: 在命令窗口中输入: DO 程序名 | ?
方法二:从程序菜单中选择执行→从打开对话框中选择所需程序并执行之。
6. 程序设计的基本步骤
(1)对问题进行说明
(2)分解问题
(3)编制各模块
(4)测试并完善各模块
(5)组装全部模块
(6)整体测试

第六章 面向对象的程序设计
6.1 面向对象程序设计概述
1. 基本概念
面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。
类:定义了对象特征以及对象外观和行为的模板。
类的特征:
封装性:隐藏了类中对象的内部数据或操作细节,只看到外表信息。
继承性:
任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。体现了面向对象设计方法的共享机制。
多态性:相同的操作可作用于多种类型的对象上,并获得不同的结果。
抽象性:提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。
基类:
系统本身提供的类称为基类。基类包括容器类和控件类。容器类是其他对象的集合,如表格、选项按钮组;控件类是单一的对象,不包含其他对象,如命令按钮、文本框。
子类:
以其他类定义为起点,对某一对象所建立的新类。新类将继承任何对父类所做的修改。
类库:
存储类的文件,每一个以可视方式设计的类都存储在一个类库中。类库文件的扩展名为 .VCX 。
对象:是类的一个实例,包括了数据和过程。具有所在类所定义的全部属性和方法。
VFP有两种对象:容器对象和控件对象。
属性:控件、字段或数据库对象的特性。
事件:由对象识别的一个动作。
方法:与对象相联系的由程序执行的一个处理过程,即处理事件的一组代码。
用户不可以为对象创建新的事件,但可以创建新的方法程序。
2. Visual FoxPro 基类
从下述 Visual FoxPro 基类中,可以派生子类或创建对象。
容器    命令组    控件    微调    标签
表单    命令按钮    复选框    OLE 容器控制    线条
表单集    选项组    列表框    OLE 绑定型控制    分隔符 #
表格    选项按钮 #    文本框    自定义    形状
标头 #    页框    组合框    工具栏    图象
列 #    页面 #    编辑框    计时器     
注:# 这些类是父容器的集成部分,在类设计器中不能子类化。
基类事件的最小集合
事件    说明
Init    当对象创建时激活。
Destroy    当对象从内存中释放时激活。
Error    当类中的事件或方法过程中发生错误时激活。
基类属性的最小集合
属性    说明
Class    该类属于何种类型。
BaseClass    该类由何种基类派生而来,例如 Form、Commandbutton 或 Custom 等
ClassLibrary    该类从属于哪种类库。
ParentClass    对象所基于的类。若该类直接由 Visual FoxPro 基类派生而来,则 ParentClass 属性值与 BaseClass 属性值相同。
容器类
容器类可以包含其他对象,并且允许访问这些对象。每种容器类所能包含的对象如下。
容器    能包含的对象
命令按钮组    命令按钮
容器    任意控件
控件    任意控件
表单集    表单、工具栏
表单    页框、任意控件、容器或自定义对象
表格列    标头对象以及除表单、表单集、工具栏、计时器和其他列对象以外的任意对象
表格    表格列
选项按钮组    选项按钮
页框    页面
页面    任意控件、容器和自定义对象
工具栏    任意控件、页框和容器
6.2 类的创建
1. 创建类的方法
(1)类设计器
(2)表单设计器
(3)编程方式
2. 用类设计器创建类[图例]
使用“类设计器”能够可视化地创建并修改类。 类存储在类库 (.VCX) 文件中。
(1) 创建新类
可以用三种方法(文件菜单、项目管理器、CREATE CLASS命令)打开类设计器并在其中创建新类,且在设计时就能看到每个对象的最终外观。
步骤:
单击文件菜单中的新建 → 选择类,新文件 → 在对话框中给出新类的名称、新类基于的类以及保存新类的类库 → 进入类设计器 <→ 根据需要在基类的基础上进行所需修改 → 关闭设计器并确定保存。
(2) 为类指定设计时的外观
1) 为类设置一个工具栏图标
在类设计器中从类菜单中选择类信息 → 打开类信息对话框,在工具栏图标框中键入 .BMP 文件的名称和路径。
附注:
工具栏图标的 .BMP 文件必须是 15 x 16 象素点大小。如果图片过大或过小,它将被调整到 15 x 16 象素点,图形可能变形。
2) 为类设置一个容器图标
打开类设计器从类菜单选择类信息 → 在容器图标框中键入将在表单设计器中的控件工具栏按钮上显示的 .BMP 文件名称和路径。
(3) 创建类库
可以用三种方法创建类库。
1) 在创建类时,在新类对话框的“存储于”框中指定一个新的类库文件。
2) 使用 CREATE CLASS 命令,同时指定新建类库的名称。
例如,下面的语句创建了一个名为 myclass 的新类和一个名为 new_lib 的新类库:
CREATE CLASS myclass OF new_lib AS CUSTOM
3) 使用 CREATE CLASSLIB 命令。
例如,在命令窗口键入下面的命令,可以创建一个名为 new_lib 的类:
CREATE CLASSLIB new_lib
(5) 修改类定义
在创建类之后,还可以修改它,对类的修改将影响所有的子类和基于这个类的所有对象。也可以增加类的功能或修改类的错误,所有子类和基于这个类的所有对象都将继承修改。 在项目管理器中选择所要修改的类或使用 MODIFY CLASS 命令进行修改。
(6) 将表单和控件保存为类
可以将表单或表单上的控件子集保存为类定义。如果打算创建基于表单的子类,或在其他表单中重新使用这些控件,可将表单作为类定义来保存。
从文件菜单中选择另存为类→ 在另存为类对话框中,选择当前表单或选定控件→ 在“类名”框中输入类的名称→在文件框中输入保存类的文件名 →选择确定按钮。
3. 用编程方式创建类
在程序窗口中建立一个定义类的程序文件(扩展名为.PRG),然后执行该程序。
4.将类添加到表单、表单集和工具栏中
(1) 注册一个类库
从工具菜单中选择选项 → 在选项对话框中选择控件选项卡 → 选择可视类库并选择添加按钮 → 在打开对话框中选择要注册的类库并选择打开 → 选择确定按钮。
(2) 给子类增加功能
使用作用域操作符 (::) 可以在子类上调用父类的代码,引用父类的方法。
调用父类方法的语法是:ParentClass::Method( )
(3) 将属性和方法添加到类
可以向新类中添加任意多的新属性和新方法。属性保存一个值,而方法则保存调用时可以运行的过程代码。
从类菜单选择新属性或新方法 → 在新属性对话框中键入属性或方法的名称 → 指定它是否受保护。
5. 类浏览器
(1) 类浏览器的作用
可创建子类,把类从一个类库复制到另一类库,删除类和库文件,重命名类或者重新定义类关系。
注意:如果要对类进行删除、重命名或重定义,则基于此类的表单可能不能正确运行。
(2) 添加一个子类
在类浏览器中打开类库 → 选择要从中派生子类的类,然后选择新类按钮 →< 在新类对话框中输入新子类名 → 在类设计器中定义并保存子类。
(3) 把类从一个类库复制到另一类库中
在类浏览器中打开源类库 → 从工具菜单中打开类浏览器的第二个实例,并选择目标库文件 → 在源类库中选择要复制的类,然后在按住Ctrl键的同时,把位于类列表上方的类图标拖到目的库中的类图标上。 若不同时按住Ctrl键则是移动。
(4)把多个类从一个类库文件复制到另一个类库文件中
在类浏览器中打开源类库 → 如果要筛选类列表,则在类型框中键入筛选条件以限定想要从文件中复制的类 → 从工具菜单中,打开类浏览器的第二个实例,并选择目标库文件 → 在源类库中,选择要复制的类库文件,然后在按住Ctrl键的同时,把位于类列表上方的类图标拖到目标库中的类图标上。
(5) 删除类、类库或表单
1) 在类浏览器中打开类库或表单。
2) 在类列表中,选择要删除的类、类库或表单,然后选择删除按钮。对类来说,它在库中的记录标有删除标记,下一次就可选择清除类库;对类库和表单来说,文件是从磁盘中删除。
(6) 重命名类库中的类,
在类浏览器中打开类库 → 在类列表中,选择要重命名的类,然后选择重命名按钮 → 在重命名类对话框中,输入新的名称,然后选单击重命名。
注意:如果对具有相关子类的类重命名,则子类将不能引用从重命名类中继承下来的属性。
(7) 更改一个类的父类
在类浏览器中打开类库 → 在类列表中,选择想要重定义的类,然后选择重定义按钮 → 在重定义对话框的为框中,输入新的父类名。新父类与原父类必须是来源于同一基类 → 在基于框中,选择或输入类库文件名。
(8) 定制类浏览器
可更改类浏览器的属性、事件和方法。可通过程序来操作类浏览器:
1) 打开类浏览器将自动创建公共变量 _oBrowser,可使用此变量来引用或操作类浏览器表单,如同对任何表单对象一样。
2) 对要更改的类浏览器的属性进行设置。
例如,在打开类浏览器之前,可通过下列命令把类浏览器的标题属性设置为 Hello:
_OBROWSER.Caption = "Hello"
_OBROWSER.Left = 10
3) 打开类浏览器,创建一个实例。
例如,为了打开类浏览器,可输入代码:DO (_BROWSER)
6.3 创建并处理对象
1. 创建对象
(1) 编程方式
先创建一个类,再用 CREATEOBJECT() 函数来创建。
(2) 可视化方式
用表单设计器创建。
2. 引用对象
引用对象时,对象与对象之间、对象与属性之间需用分隔符 . 进行分隔。
(1) 绝对引用
从容器的最高层引用对象,给出对象的绝对地址。如:form1.text1.value
(2) 相对引用
在容器层次中相对于某个容器层次的引用。如:thisform .text1.value
属性或关键字    引用
ActiveControl    当前活动表单中具有焦点的控件
ActiveForm    当前活动表单
ActivePage    当前活动表单中的活动页
Parent    该对象的直接容器
THIS    该对象
THISFORM    包含该对象的表单
THISFORMSET    包含该对象的表单集
系统变量 _SCREEN 表示屏幕对象,与 ActiveForm 等组合可以在不知道表单名的情况下处理活动表单。
3. 设置对象的属性
(1) 可以在属性窗口中进行可视化设置
(2) 可以在程序中用如下格式进行设置:
引用对象.属性 = 值
如:thisform .text1.value="只要功夫深,铁棒磨成针。"
想一次设置多个属性时,可以采用WITH …… ENDWITH 语句。
如:WITH form1.text1
.value="书山有路勤为径"
.ForeColor=rgb(255,0,0)
.FontSize=18
.FontName="隶书"
.FontBold=.T.
ENDWITH
4. 调用对象的方法程序
若对象已经创建,可以在应用程序的任何地方调用该对象的方法程序。调用方法程序的格式为: 引用对象.方法程序
如: Form1.Show
5. 对象对事件的响应
当事件发生时,该事件的过程代码就将被执行。
用编程方式可以使用 MOUSE 命令产生 CLICK、DOUBLECLICK、MOUSEMOVE、DRAGDROP 事件,使用 ERROR 命令产生 ERROR 事件,或使用 KEYBOARD 命令产生 KEYPRESS 事件,除此之外不能用其他的程序设计方法产生其他事件,但可调用与它们相关的过程。
6.4 事件与方法
1. VFP 中的事件
VFP 中的常用事件分类
事件类型    事件名称
鼠标事件    Click DblClick RightClick DropDown DownClick UpClick
键盘事件    KeyPress
改变控件内容的事件    InteractiveChange
控件焦点的事件    GotFocus LostFocus When Valid
表单事件    Load Unload Destroy Activate Resize Paint QueryUnload
数据环境事件    AfterCloseTable BeforeOpenTable
项目事件    QueryModifyFile 等
OLE 事件    OLECompleteDrag 等
其他事件    Timer Init Destroy Error
一些核心事件和触发时间
事件    触发时间
Load    当表单或表单集被加载时产生
Unload    当表单或表单集从内存中释放时产生
Init    创建对象时产生
Destroy    从内存中释放对象时产生
Click    用户在对象上单击鼠标时产生
DblClick    用户在对象上双击鼠标时产生
RightClick    用户在对象上单击鼠标右键时产生
GetFocus    对象得到焦点时产生
LostFocus    对象失去焦点时产生
KeyPress    用户按键时产生
MouseDown    在对象上按下鼠标
MouseUp    在对象上松开鼠标
MouseMove    在对象上移动鼠标
InteractiveChange..    交互式改变对象值
ProgrammaticChange    可编程地改变对象值
2. 事件循环
VFP6.0 中用 READ EVENTS 命令建立循环,用 CLEAR EVENTS 命令终止循环。
利用 VFP6.0 设计应用程序时,必须创建事件循环,否则不能正常运行。READ EVENTS 命令通常出现在应用程序的主程序中,同时必须保证主程序调出的界面中有发出 CLEAR EVENTS 命令的机制,否则程序进入死循环。
3. 方法
VFP6.0 中的常用方法
名称    调用语法    功能
AddObject    Object. AddObject (cName,cClass[,…])    在运行时向容器对象中添加对象
Clear    Object.Clear    清除组合框或列表框控件中的内容
Hide    Object.Hide    通过把Visible属性设置为 .F.,来隐藏表单、表单集或工具栏
Show    Object.Show    把Visible属性设置为 .T.,显示并激活一个表单或表单集,并确定表单的显示模式
Refresh    Object.Refresh    重画表单或控件,并刷新所有值
Release    Object.Release    从内存中释放表单或表单集
Quit    Object.Quit    结束一个VFP6.0实例,返回到创建它的应用程序。


第七章 表单设计
7.1 基本概念
1.名词解释
表单:
即用户与计算机进行交流的一种屏幕界面,用于数据的显示、输入、修改。该界面可以自行设计和定义,是一种容器类,可包括多个控件(或称对象)。
表单集:
可包含一张或多张表单的容器。
数据环境:
在打开或修改一个表单或报表时需要打开的全部表、视图和关系。它以窗口形式(类似于数据库设计器)反映出与表单有关的表、视图、表之间关系等内容。可以用数据环境设计器来创建和修改表单的数据环境。
2.表单设计界面[图例]
主要包括: 表单向导、 表单设计器、 表单设计器工具栏、 表单控件工具栏、 属性窗口
3.表单设计中常用的属性、事件与方法介绍
属性、事件、方法    说明    默认值
AlwaysOnTop属性    控制表单是否总是处在其他打开窗口之上    假(.F.)
AutoCenter属性    控制表单初始化时是否让表单自动地在Visual FoxPro主窗口中居中    假(.F.)
BackColor属性    决定表单窗口的颜色    255,255,255
BorderStyle属性    决定表单是否有边框,若有边框,是单线边框、双线边框,还是系统边框。如果BorderStyle为3(系统),用户可重新改变表单大小    3
Caption属性    决定表单标题栏显示的文本    Forml
Closable属性    控制用户是否能通过双击“关闭”框来关闭表单    真(.T.)
MaxButton属性    控制表单是否具有最大化按钮    真(.T.)
MinButton属性    控制表单是否具有最小化按钮    真(.T.)
Movable属性    控制表单是否能移动到屏幕的新位置    真(.T.)
WindowState属性    控制表单是最小化、最大化还是正常状态    0 正常
WindowType属性    控制表单是非模式表单(默认)还是模式表单。如果表单是模式表单,用户在访问应用程序用户界面中任何其他单元前必须关闭该表单    0 非模式
Activate事件    当激活表单时发生     
Click事件    在控制上单击鼠标左键时发生     
DblClick事件    在控制上双击鼠标左键时发生     
Destroy事件    当释放一个对象的实例时发生     
Init事件    在创建表单对象时发生     
Error事件    当某方法(过程)在运行出错时发生     
KeyPress事件    当按下并释放某个键时发生     
Load事件    在创建表单对象前发生     
Unload事件    当对象释放时发生     
RightClick事件    在单击鼠标右键时发生     
AddObject方法    运行时,在容器对象中添加对象     
Move方法    移动一个对象     
Refresh方法    重画表单或控制,并刷新所有值     
Release方法    从内存中释放表单     
Show方法    显示一张表单     
7.2 创建表单
可以用表单向导、表单设计器、表单生成器、编程四种方法创建表单。
1. 利用向导创建表单
(1) 创建单张表的表单:
打开文件菜单 → 新建 → 表单 → 向导 [或从常用工具栏上选择表单(F)] → 选择表单向导 → 选取字段 → 选择样式 → 选择排序记录 → 选择保存方式 → 给出合适的文件名和保存位置。
(2) 创建多个相关表的表单:
打开文件菜单 → 新建 → 表单 → 向导 [或从常用工具栏上选择表单(F)] → 选择一对多表单向导 → 选取父表字段 → 选取子表字段 → 选定关系 → 选择样式 → 选择排序记录 → 选择保存方式 → 给出合适的文件名和保存位置。
注意:用向导创建的表单一般含有一组标准的命令按钮。
表单保存后系统会产生两个文件:
表单文件:扩展名为 .SCX
表单备注:扩展名为 .SCT
2. 利用表单生成器创建表单
文件菜单 → 新建 → 表单 → 新文件 → 表单菜单 → 快速表单命令 → 选择字段和样式并确定之。
注意:用生成器创建的表单不能直接产生一些命令按钮。
3. 利用设计器创建表单
文件菜单 → 新建 → 表单 → 新文件 → 在表单设计器中,用表单设计器和表单控件工具条上的按钮创建所需的表单 → 保存表单 → 给出文件名和保存位置。
注意:用设计器创建的表单,用户必须为控件设置有关的属性及事件处理代码。
4. 利用编程的方法创建表单
按照面向对象设计的方式,先可视化地利用类来创建表单,再将类代码复制到程序窗口,适当添加部分设置系统环境的代码,以程序文件的形式保存。
5. 运行表单
从常用工具栏上单击运行按钮(!)或从表单菜单中选择 运行表单 命令或从命令窗口中输入: DO FORM 表单文件名。
7.3 向表单中添加控件
1. 常用控件的作用
标 签: 用于保存不希望用户改动的文本,常用来为添加的控件写标。
文本框: 用于输入或编辑表中的非备注型字段,框中一般是单行的文本。
编辑框: 用于输入或编辑长字段或备注字段,框中可以有多行并有垂直滚动条。
列表框: 用于显示一组预定的、供用户选择的值,可以是一列或多列,可通过滚动条浏览列表信息。
组合框: 一种下拉式的列表框,可以从中选择一项或人工输入一个值,兼有列表框和文本框的功能
复选框: 用来显示多个选项,可以选择其中的一项或多项。
表 格: 一个按浏览窗口样式显示数据的容器,常用来显示一多关系中的子表。
页 框:一种用于创建选项卡式对话框的容器类,一个页框可以包含多个页面,但每次只能有一个活动页面。
微调控制:用于接受给定范围内的数据输入。
命令按钮:常用来启动一个事件。
命令按钮组:用来把相关的命令按钮编成组。
选项按钮组:用于显示多个选项,只允许从中选择一项。
计时器: 可以在指定时间或按照设定的间隔运行进程,此控件在运行时不可见。
2. 用生成器向表单中添加控件:
打开所需表单,进入表单设计器 → 从表单控件工具栏上选择生成器锁定按钮 → 从该工具栏上选择所需控件并放在表单上 → 在生成器的选项卡中填上有关信息。
3. 利用数据环境在表单中创建控件:
从数据环境中直接将所需字段或表拖到正在设计的表单中,VFP 会自动生成符合要求的控件。
若要创建一个    将下面的项拖动到表单
表格    
复选框    逻辑型字段
编辑框    备注型字段
OLE 绑定型控制    通用型字段
文本框    其他类型的字段
4. 自定义方式创建控件
打开表单设计器 → 根据需要从工具栏上单击某个控件 → 用鼠标直接在表单上画出控件外形 → 在属性窗口设置该控件的各项属性。
5.使用类浏览器向表单中添加控
在表单设计器中打开表单 → 在类浏览器中打开类库文件,其中应包含有添加到表单中的对象的类 → 从类列表中,选择类名,然后把类图标拖放到表单上。类图标位于类列表的上方。
附注:如果要把类添加到表单的容器对象上,则需把类图标拖放到表单中一个区域,然后把对象剪切并粘贴到所要的容器上。 
6. 控件常用的属性、事件与方法
属性    说 明
AutoSize属性    指定控件是否依据其内容自动调节大小
ButtonCount属性    指定命令组或选项组中的按钮数
Caption属性    指定在对象标题中显示的文本
ControlCount属性    指定容器对象中控件的数目
ControlSource属性    指定与对象绑定的数据源
Enabled属性    指定对象能否响应用户引发的事件
Filter属性    排除不满足条件的记录。筛选条件由给定表达式指定
Increment属性    单击上箭头或下箭头时,微调控件中数值增加或减少的量
InputMask属性    指定控件中数据的输入格式和显示方式
MoverBars属性    指定是否在列表框控件中显示移动按钮
Name属性    指定在代码中引用对象时所用的名称
Parent属性    引用一个控件的容器对象
ReadOnly属性    指定是否可以编辑控件或者更新与临时表对象相关联的表或视图
RecordSourceType属性    指定如何打开填充表格控件的数据源
RowSource属性    指定组合框或列表框控件中值的来源
ToolTipText属性    为一个控件指定作为“工具提示”出现的文本
value属性    指定控件的当前状态
Click事件    在控件上单击鼠标左键时方生
DblCick事件    在控件上双击鼠标左键时方生
Destroy事件    当释放一个对象的实例时发生
Init事件    在创建对象时发生
InteractiveChange事件    当更改控件的值时发生
Load事件    在创建对象前发生
RightClick事件    在单击右键时发生
Addobject方法    运行时在容器对象中添加对象
Clear方法    清除组合框或列表框控件的内容
Refresh方法    重画表单或控件,并刷新所有值
KeyPress事件    当按下并释放某个键时发生
7.4 修改表单布局
打开表单,进入表单设计器,用表单设计器工具栏或显示菜单中的各命令修改表单。
1. 选择、移动和缩放控件
选择: 用鼠标单击所需控件
移动: 选定控件,用鼠标拖动到新位置或从编辑菜单中选择剪切再在新位置粘贴
缩放: 选定控件,用鼠标拖动尺寸柄直至所需大小松开
2. 复制和删除表单控件
复制 : 选定表单上现有的控件 → 从编辑菜单中选择复制 → 从编辑菜单中选择粘贴。
删除: 选定表单上现有的控件 → 按 Delete 键。
3. 控件的布局
可利用布局工具栏使表单上的所有控件排列整齐、大小合理、对称美观。
7.5 定制表单
1. 改变文本的字体和大小
打开表单,进入表单设计器 → 选择要修改的控件 → 打开属性窗口 → 设置字体大小和字形,如 FontName 、FontSize、FontBold。
2.向表单中添加线条和形状
选择工具栏上的线条或形状按钮,在表单中所需位置拖动鼠标,画出线条或图形,图形界于正方形和圆形、长方形和椭圆形之间(属性窗口中的 Curvature 值从 0~99 )。线条和形状的颜色可以在属性窗口中设定。
3.向表单中添加图形
从表单控件工具栏中选择图象 → 在属性窗口中选择 Picture 属性单击该栏的…按钮 → 在打开对话框中找到所需的图象文件 → 确定
4. 设置一个表单的前景和背景颜色
用调色板工具栏或通过属性窗口中的 ColorSource 属性来设置。
5. 创建表单集
启动表单设计器 → 从表单菜单中选择创建表单集 → 设计第一张表单 → 从表单菜单中选择添加新表单 → 设计另一张表单 → 添加新表单 → 设计另一张表单 ……
7.6 设计自定义表单的一般方法
1. 与数据表绑定型表单
(1) 生成基本表单:
新建 → 表单 → 新文件 → 进入表单设计器 → 表单菜单 → 快速表单 → 选定数据库(表) → 选定输出字段 → 选定样式 → 确定。
(2) 修改基本表单:
1) 用鼠标拖动来调整各字段的布局(排列位置、大小、对齐等);
2) 在属性窗口中设置表单中各对象的属性:
表单(form1):
caption: 输入表单的中文标题
backcolor: 设置表单背景颜色
autocenter: 使表单运行时自动处于屏幕中央
visible: 设置表单在运行时是否可见,一般采用 .T.
各字段控件:
autosize: 根据所容纳的内容自动调整大小, 常采用 .T.
backstyle: 字段标题一般可设为透明,其它可设为不透明
caption: 输入中文的字段标题
fontname: 设置控件字体
fontsize: 设置字体大小
forecolor : 设置字体颜色
(3) 根据需要添加控件:
1) 利用数据环境:
打开基本表单 → 单击鼠标右键 → 从快捷菜单中选择数据环境 → 将所需字段拖到表单中 → 用标签控件为字段添加标题(先画出标签控件再更改标签的 caption 属性)。
2) 利用表单控制工具栏:
打开基本表单 → 单击工具栏中所需控件 → 在表单中画出控件 → 选定控件 → 单击鼠标右键 → 从快捷菜单中选择生成器… → 在对话框中选好所需各项 → 确定。
4. 添加命令按钮
根据需要添加适当数量的命令按钮(用单个命令按钮或用命令组均可),设置命令组时要利用命令组生成器(单击右键,从中选择生成器)。更改命令按钮的标题,需用热键时在标题后加上 (\<A )即可。如: Caption 中为 : 退出(\<X ), 按钮上则显示 退出(X)
5. 为命令按钮编写事件代码
根据命令按钮的标题所代表的功能在代码窗口中填写代码。几个常用按钮的代码如下表。


上一个    If.not.bof()
Skip -1
Endif
Thisform.refresh
下一个    If.not.eof()
Skip
Endif
Thisform.refresh
第一个    Go top
Thisform.refresh
最后一个    Go bottom
Thisform.refresh
退出    Thisform.release
2.与数据表无关型表单
新建 → 表单 → 新文件 → 进入表单设计器 → 添加控件 → 设置属性 → 编写代码。

第八章 报表与标签设计
8.1 基本概念
1. 报表:
是通过打印机将所需的记录用书面形式输出来的一种方式。
报表保存后系统会产生 两个 文件:
报表定义文件: 扩展名为 .FRX
报表备注文件: 扩展名为 .FRT
2. 报表的数据来源:
(1) 浏览结果:报表中包含全部记录和字段
(2) 查询结果:由查询产生的特定记录和字段
3. 界面介绍:报表向导 报表设计器 报表设计器工具栏报表控制工具栏
向导类型:
(1) 报表向导:创建一张带格式的单张表的报表
(2) 分组/总计报表向导:创建一张单张表的总结报表,提供每组数据的总计值
(3) 一对多报表向导: 创建一张包含父表记录和相关子表记录的报表
注意: 要先建立索引和关系  
8.2 创建报表
1.用报表向导创建
用来创建简单的单表或多表报表。方法如下:
打开文件菜单 → 新建 → 报表 → 向导 (或从常用工具栏上选报表(R))→ 选择向导类型 → 选择字段 → 选择样式 → 选择布局 → 选择排序字段 → 选择保存方式 → 给出文件名及保存位置。
2.用报表设计器创建 [图例]
修改已有的报表或创建自己的报表。
(1)快速报表方式: 从单张表中创建一个简单报表。
打开文件菜单 → 新建 → 报表 → 新文件 → 报表菜单 → 快速报表 → 打开所需数据表并选择布局 → 选择字段 → 确定 → 关闭报表设计器(最好先预览一下)→ 给出文件名及保存位置。
(2) 自行设计方式: 创建用户自定义格式的报表。
打开文件菜单 → 新建 → 报表 → 新文件 → 查看菜单 → 数据环境 → 设置数据环境(将所需的数据表添加进来) → 将所需字段拖到细节区 → 在标题、页标头、页注脚、总结区分别用标签方式填上所需内容并设置其格式 → 关闭报表设计器(最好先预览一下) → 给出文件名及保存位置。
注意:用向导和设计器创建的报表在打印之前均应浏览一下,对不合适之处进行修改(包括页面设置、打印条件设置、布局设置、格式设置等)。
3. 用命令方式创建报表
(1)命令格式: CREATE REPORT [ 文件名 | ?]
功 能: 打开报表设计器,用上述2中的(2)方法创建报表。
(2) 命令格式: CREATE REPORT 文件名 FROM 文件名2 [FIELDS 〈字段名1,字段名2,…〉]
功 能: 可以不打开报表设计器就能创建一张包含特定字段的快速报表。无[ FIELDS …]时,报表中的字段与数据表相同。  
8.3 修改报表
1. 给报表添加带区
默认情况下,“报表设计器”显示三个带区:页标头、细节 和页注脚。
可给报表添加的带区
带区    打印    典型内容
标题    每个报表一次    标题、日期或页码、公司标微、标题周围的框
列标头    每列一次    列标题
列脚    每列一次    总结,总计
组标头    每组一次    数据前面的文本
组脚    每组一次    组数据的计算结果值
总结         总结、“Grand Totals”等文本
2. 改变报表的列标签
在报表设计器中, 利用报表控制工具栏上的标签按钮来写。
3. 修改报表表达式
在报表设计器中, 双击需修改字段,在表达式对话框中输入新表达式。
4. 增加表格线
在报表设计器中, 利用报表控制工具栏上的线条按钮来画。
5. 页面设置
利用文件菜单中的页面设置命令。
6. 字体设置
利用格式菜单中的字体命令。
7. 布局设置
利用格式菜单或布局工具栏。
8. 在报表中使用数据分组、汇总区
必须首先对表进行索引,否则出错。 
8.4 标签设计
1. 概念
标签:指邮政标签、信封等,是数据库管理系统生成的最普通的一类报表。
标签保存后系统会产生两个文件:
标签定义文件:扩展名为 .LBX
标签备注文件:扩展名为 .LBT
2.创建标签的方法
(1) 用向导创建
文件菜单 → 新建 → 标签 → 向导 → 选择表 → 选择标签类型 → 设置布局 → 选择排序字段 → 选择保存方式 → 给出文件名及保存位置。
(2) 用标签设计器创建[图例]
文件菜单 → 新建 → 标签 → 新文件 → 选择标签布局 → 查看菜单 → 数据环境 → 设置数据环境(将所需的数据表添加进来)→ 将所需字段拖到细节区 → 关闭标签设计器 → 给出文件名及保存位置。
(3) 用命令方式创建报表
命令格式: CREATE LABEL [ 文件名 | ?]
功 能: 打开标签设计器,用上述 (2)方法创建标签。
报表和标签常规布局的说明
布局类型    说明    示例
    每行一条记录,每条记录的字段在页面上按水平方向放置。    分组/总计报表*、财政报表、存货清单、销售总结
    一列的记录,每条记录的字段在一侧竖直放置    列表
一对多 *    一条记录或一对多关系    发票、会计报表
多列    多列的记录,每条记录的字段沿左边缘竖直放置    电话号码薄、名片
标签    多列记录,每条记录的字段沿左边缘竖直放置,打印在特殊纸上    邮件标签*、名签
* 向导中才有的内容。
可以在报表和标签布局中插入以下类型报表控件
若要显示    请选用下列控件
表的字段、变量和其它表达式    字段
原义文本    标签
直线    线条
框和边界    矩形
圆、椭圆、圆角矩形和边界    圆整矩形
位图或通用字段    图片/OLE 绑定型
设置控件后,可以修改它们。可以格式化控件,更改控件颜色或给任何控件添加注释。
 

第九章 菜单与工具栏设计
9.1 菜单系统规划
1. 设计原则
(1) 根据用户任务组织菜单系统
(2) 给每个菜单和菜单选项设置一个意义明了的标题
(3) 按照估计的菜单项使用频率、逻辑顺序或字母顺序组织菜单项
(4) 在菜单项的逻辑组之间放置分隔线
(5) 给每个菜单和菜单选项设置热键或键盘快捷键
(6) 将菜单上菜单项的数目限制在一个屏幕之内,如果超过了一屏,则应为其中一些菜单项创建子菜单。
(7) 在菜单项中混合使用大小写字母,只有强调时才全部使用大写字母。
2. 设计步骤
(1)菜单系统规划
(2)建立菜单和子菜单
(3)将任务分派到菜单系统中
(4)生成菜单程序
(5)测试并运行菜单系统
9.2 创建菜单
1. 菜单设计器简介
 [图例]
2. 用菜单设计器创建菜单
打开文件菜单 → 新建 → 菜单 → 新文件 → 在菜单设计器中逐项设计所需菜单(或选择菜单中的快速菜单,生成通用的菜单)→ 预览 → 确定 → 关闭菜单设计器 → 给出文件名及保存位置 →从菜单菜单中选择生成…→在对话框中单击生成(可更改菜单程序文件的文件名和保存位置再生成)。
菜单设计器关闭后,系统产生两个文件:
菜单定义文件 扩展名为 .MNX
菜单备注文件 扩展名为 .MNT
从菜单菜单中选择生成后, 系统自动生成同名的菜单程序文件, 扩展名为 .MPR
3. 用命令创建菜单
命令格式: CREATE MENU [<菜单文件名> | ?]
功 能: 打开菜单设计器进行菜单设计
4. 运行菜单程序
设计好菜单并生成菜单程序文件后, 即可从程序菜单中选执行…来执行此程序。
或 从命令窗口中输入: DO 菜单文件名 .MPR
运行菜单程序文件后, 系统又产生一个同名的编译后的程序文件, 扩展名为 .MPX
5. 创建快捷菜单
单击文件菜单中的新建 → 选择菜单、新文件 → 选择快捷菜单 → 进入快捷菜单设计器 → 按设计一般菜单相同的方式设计快捷菜单 → 生成并保存 → 在表单设计器中给调用此快捷菜单的控件编写代码:DO 快捷菜单名.MPR → 运行表单即可看到快捷菜单的作用。
6. 创建SDI菜单
单击文件菜单中的新建 → 选择菜单、新文件 → 选择菜单 → 进入菜单设计器 → 按设计一般菜单相同的方式设计SDI菜单 → 从显示菜单中选择常规选项 →在常规选项对话框中将顶层表单前的复选框勾上→ 生成并保存 → 在表单设计器中给调用此SDI菜单的表单的INIT事件编写代码: DO SDI菜单名 .MPR WITH THIS,.T.→ 将表单的ShowWindow属性设置为2 → 运行表单即可看到SDI菜单的作用。 
9.3 创建自定义工具栏
1. 用类设计器定义工具栏类
单击文件菜单中的新建 → 选择类、新文件 → 给出自定义工具栏类名、基于toolbar、类库名 → 在类设计器中,将所需的命令按钮和分隔符依次添加到自定义工具栏上 → 在属性窗口中为每个按钮选择Picture 和 ToolTipText → 双击各按钮 → 在代码窗口为各按钮的Click事件添加实现各项功能所需的代码 → 关闭窗口保存。
2. 用编程方式定义工具栏类
单击文件菜单新建 → 选择程序、新文件 → 在程序编辑窗口中用DEFINE命令定义工具栏类,用ADD OBJECT命令添加对象,用 PROCEDURE事件名命令为该事件名定义方法程序。
3. 为单集添加工具栏类表
单击文件菜单新建 → 选择表单、新文件 → 单击表单控件上的查看类按钮 → 打开自定义类库 → 单击表单控件上的自定义工具栏类按钮 → 在表单上单击并在对话框中选择确定 → 自定义工具栏类被加到表单集中 → 运行表单集。

第十章 应用程序开发
10.1 开发应用程序的基本步骤
在开发应用程序时,首先应进行系统环境规划,规划中要考虑的因素有:应用程序所面向的用户及其可能需要的各种操作、数据库规模、系统工作平台(单用户或是网络)、程序要处理的数据类型(是本地数据还是远程数据)等。规划完成之后,即可利用项目管理器来进行每一步开发,它可以帮助管理开发过程中的所有文件,并最终连编成应用程序。应用程序的开发步骤大致如下图所示:

1. 数据库结构设计
2. 系统功能模块设计
3. 菜单设计
4. 用户界面设计
5. 查询设计
6. 报表设计
7. 系统维护设计
8. 系统模块调试
9. 用项目管理器连编成应用程序
10.2 优化应用程序的技巧
1. 优化表和索引
(1) 如果没有启用记录或表缓冲,应该使用INSERT-SQL命令(因索引只需更新一次),而不要使用APPEND BLANK 命令后再使用REPLACE;
(2) 当需要将大量记录追加到索引过的表中时,应先取消或关闭索引,在数据追加完毕,再重建索引,这样速度会快些;
(3) 在SQL语句中要尽量避免函数调用;
(4) 如果需要经常使用某种索引顺序,应周期性使用此索引对表进行排序,提高表的性能;
(5) 在多用户环境中,使用CDX 索引文件比 IDX 索引文件快。
2. 使用Rushmore 技术加速数据访问
使用 Rushmore 技术可以显著地提高查询的速度。Rushmore 是一种从表中快速地选取记录集的技术,它可将查询响应时间从数小时或数分钟降低到数秒。访问单表时,使用 FOR 子句,访问多表时,使用SELECT-SQL 查询,可自动隐含地使用该技术。
(1)访问单个表中的数据,使用一个FOR子句;
(2)访问多个表中的数据,使用SELECT-SQL、DELETE-SQL、UPDATE-SQL命令。
3. 优化表单和控件
(1) 使用数据环境;
(2)在表单集里限制表单数目;
(3)在页框中动态加载页面控件;
(4)动态绑定控件与数据;
(5)当必须对屏幕进行多处更改时,延迟屏幕刷新;
(6)在经常使用的方法程序中减少代码。
4. 提高VFP程序性能的一般技巧
(1)数据要选择正确的数据类型
(2)避免重复打开文件,需要打开多个文件时,将它们分配给不同的工作区,需要时使用SELECT命令选择工作区;
(3)尽量使用FOR…ENDFOR循环,而不要使用DO WHILE…ENDDO循环,因为FOR循环较快;
(4)从多个字段复制数据时,用SCATTER TO ARRAY 比用SCATTER MEMVER快;
(5)为了有效的使用内存,避免在需要对象之前就创建它们,当不要该对象时应及时清除它;
(6)尽量将输出发送到顶层窗口,速度快些;
(7)使用SET TALK OFF命令取消状态显示,可节省屏幕顶端更新时间;
(8)将SET DOHISTORY 设置为OFF,避免当运行程序时每次都更新命令窗口;
(9)使用名称表达式代替宏替换,因为名称表达式更快;
(10)有效地引用对象属性:
&#8226;优化对属性的重复引用,可将属性值保存到一个变量中,再进行更改,在完成时一次性的设置属性;
&#8226;有效地引用多个属性,可以用WITH…ENDWITH命令避免重复查找同一个对象,或将对象的引用保存在变量中。
10.3 程序开发实例
—— 简单的高校教学管理系统
1. 设计数据库
数据库的组成:学生登记表、教师登记表、院系登记表、专业登记表、班级登记表、教学计划表、课程登记表、成绩登记表
数据表的结构:各数据表的结构如下表。
表名    字段名及字段类型
学生登记表     学号    姓名    性别    出生日期     班级     年级    专业    院系    特长    政治面貌
    C8    C8     C2    D    C5     C2     C4     C3     M    C10
教师登记表    教工号    姓名    性别    出生日期    职称    晋升时间    职务    专业    院系     参加工作时间
    C5    C8    C2    D    C10    D     C10     C4     C3     D
成绩登记表    学号    姓名     课程代号     平时成绩     期末考试     总评成绩     考试类型    教师    考试日期
    C7     C8     C5     N5.1    N5.1    N5.1    C10    C5    D
教学计划表    院系名称    班级名称    课程名    学年/学期    学时数    考试类型    教室    任课教师
    C10    C10    C16    C5    N3    C10    C4    C8
课程登记表    课程代号    类别    课程名    学分    是否考试    是否必修              
    C5    C2    C16    N3.1    L    L              
班级登记表    班级代号    班级名称    班级人数    专业代号              
    C5     C10     N3     C4               
专业登记表    专业代号    专业名称     部门代号                   
    C4     C20     C3                   
院系登记表    院系代号     院系名称                        
    C3     C20                        
2. 设计基本表单
总表单:设计主界面表单与口令检查表单(采用表单集)并运行测试。
数据表表单:先用向导创建各数据表的表单,再用表单设计器修改成所需的样式。
数据测试:利用各表单向每个数据表输入部分数据,并进行简单测试。
3. 设计菜单
主菜单组成:根据需要本系统设置6大项菜单:系统维护(需密码才可进入)、浏览、查询、信息输出、帮助、退出。
菜单设计:根据需要完成的各项功能,在菜单设计器中设计各菜单的子菜单和菜单项。
4. 设计浏览表单
设计成表单集的形式,该表单集既要能浏览到各表的详细信息,又要能浏览到相关表的统计信息。在此表单中出现的任何信息仅供浏览。
5. 设计查询表单
先在表单设计器中设计一个查询总表单,再用表单向导中的一对多表单向导设计几个分表单,并在表单设计器中进行所需的修改, 最后在总表单的命令按钮中添加所需代码, 使各项查询功能得到实现。
6. 设计输出报表
根据学校通常所需的教学管理信息,设计一组报表,需要时可以打印出来。
输出报表包括:学生一览表、教师一览表、部门一览表、专业一览表、班级一览表、课程一览表、成绩一览表、教学计划一览表。
7. 完善菜单设计
编制各菜单项的过程代码使菜单功能得以实现。
8. 编制帮助信息
将帮助信息以独立的文件形式保存在计算机中,通过表单的调用来显示帮助信息。帮助信息主要介绍本系统的各项功能及使用方法。
9. 连编应用程序
设计一个主程序,并在项目管理器中用连编按钮将系统所有文件连编成一个应用程序。
10.测试
对不符合要求的部分进行修改,重新连编,再调试,直到完全满足要求为止。

VFP 总复习概要
一. 上机部分:
1. 项目、数据库、数据表的操作
(1) 将有关文件添加到项目中,为文件添加说明
(2) 将数据表添加到数据库中
(3) 设置数据库表的高级属性
&#8226; 为字段加标题
&#8226; 根据字段的验证信息设置字段的有效性规则(注意利用函数来代替复杂的表达式)
&#8226; 设置默认值(注意不同数据类型的表示方式)
&#8226; 设置数据表的有效性规则
&#8226; 设置触发器
(4) 为数据表添加新记录或修改原记录
(5) 建立索引(注意组合式的索引表达式的构造)
(6) 建立永久关系,并设置参照完整性
2. 设计查询(或视图)
即从相关表中输出特定的记录。(注意建立关系)
(1) 确定数据表中现有的输出字段
(2)用表达式生成器构造需经过计算的输出字段(注意函数的使用 和AS 命令)
(3)设置筛选条件和分组条件
(4)确定查询去向
3. 设计表单
(1)利用表单向导、数据环境或快速表单设计与数据表绑定型的特定格式的表单
(2)利用表单设计器修改系统固定格式的表单,或设计自定义表单:
&#8226;设置表单外观方面的常用属性
&#8226;添加常用控件并绑定数据源(主要是表格和各种类型的框)
&#8226;添加命令按钮并设计其click事件代码
&#8226;修改现有控件并绑定数据源
&#8226;从现有的类库中为表单添加特定功能的控件
&#8226;为表单编写事件代码和方法程序
4. 设计类
利用类设计器或表单设计器设计类:
(1)确定新类名称、所基于的系统基类、保存新类的类库名称与位置
(2)采用与设计自定义表单或控件相同的方式为新类设计外观和功能
(3)为类添加新属性和新方法
5. 设计菜单
(1)在菜单设计器中设计主菜单和各菜单项的名称、外观、快捷键
(2)为各菜单项添加过程代码
(3)生成菜单程序文件
6. 设计程序
(1) 设置系统环境(用SET命令)
(2) 根据程序所需完成的功能要求,用命令、函数、表达式等基本语言成分按照适当的程序控制结构编写程序代码。
(3) 调试、修改
二.笔试部分
1. 数据库与数据表的基本概念
2. 索引的概念
3. VFP系统中常用的文件扩展名
4. 常用函数的名称、功能、参数、返回值;常用表达式的计算
5. 查询与视图的概念
6. 常用的SQL命令
7. 程序控制的概念,用程序对数据表进行操作
8. 面向对象编程的基本概念,常用的属性、事件、方法

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}