NULL值 字段级规则 主索引/候选索引 记录级规则 触发器 VALID子句
字段 字段 记录 记录 表 表单 当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时 当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时 发生记录更新时 发生记录更新时 在INSERT、UPDATE或DELETE事件中,表中值改变时 移出记录时 第五章 创建查询与视图
5.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
5.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)在字段名框中单击一个字段前关键列? 和更新列 ? ,使其作为主关键字和可更新字段; 3)将发送SQL 更新复选框选中 5.3 SQL 语言中的命令语句 SQL是一种日趋流行的标准的数据库系统管理语言,能使数据检索异常地方便、灵活。 VFP5.0支持的7条SQL命令一览表 命令 功能 示例 备注 创建一个CREATE 指定字段TABLE -SQL 的表 CREATE 创建一个CURSOR-SQL 临时表 新表的每个字段由create table xs (; 名称、类xh c(4) default \型、精度、xm c(6), ; 比例、是否xb c(2) check xb=\男\女\性别只能是男支持 或女\女\NULL 值nl n(2) null ) 和参照完整性规则来定义,可从命令本CREATE CURSOR teacher ; 身或数组(TeacherID N(5), Name C(20), Address; 中获得这C(30),OfficeNo C(8) NULL, Specialty M) 些定义。 ALTER TABLE xscj ADD COLUMN kcmc C(14) 可以修改表中每个字段的名称、类型、精度、比例、是否支持 NULL 值和参照以编程方式修改一ALTER 个已存在TABLE - SQL 的表的结构。 ALTER TABLE cj; ALTER COLUMN cj SET CHECK cj >= 0; ERROR \成绩不能为负数\完整性规则。 从一个或多个表中检索数据。 SELECT 表xs.xh, 表xs.xm, 表xs.xb, ; FROM 数据test!表xs; WHERE 表xs.xh >'81991025'; ORDER BY 表xs.xh 可以用union命令连接两个条件。 SELECT - SQL 使用 SQL 语句将表DELETE - 中的记录SQL 加上删除标记。 DELETE FROM cj WHERE cj<60 INSERT - SQL 在已存在表的末尾追加一条新记录 INSERT INTO xs(xh,xm,xb) VALUES; (\张丽\女\) 新记录包含的数据列在 INSERT 命令中,或者来自数组。 可以基于 SELECT - SQL 语句结果更新记录 UPDATE - SQL 更新表中的记录 UPDATE cj SET cj = cj*1.05 WHERE cj>80
第六章 面向对象的程序设计 6.1 面向对象程序设计概述
1. 基本概念
面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。
类:定义了对象特征以及对象外观和行为的模板。 类的特征:
封装性:隐藏了类中对象的内部数据或操作细节,只看到外表信息。 继承性:
任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。体现了面向对象设计方法的共享机制。
多态性:相同的操作可作用于多种类型的对象上,并获得不同的结果。
抽象性:提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。 基类:
系统本身提供的类称为基类。基类包括容器类和控件类。容器类是其他对象的集合,如表格、选项按钮组;控件类是单一的对象,不包含其他对象,如命令按钮、文本框。 子类:
以其他类定义为起点,对某一对象所建立的新类。新类将继承任何对父类所做的修改。 类库: