VFP第3章 数据库与表的创建及使用.ppt_第1页
VFP第3章 数据库与表的创建及使用.ppt_第2页
VFP第3章 数据库与表的创建及使用.ppt_第3页
VFP第3章 数据库与表的创建及使用.ppt_第4页
VFP第3章 数据库与表的创建及使用.ppt_第5页
已阅读5页,还剩211页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章,数据库与表的 创建及使用,目 录,3.1 数据库概述 3.2 数据库的创建、打开与使用 3.3 表的创建与使用 3.4 永久性关系与参照完整性 3.5 有关数据库及其对象的常用函数,结束放映?,YES(是),NO(否),数据库与表的关系,数据库,数据库文件,数据库表,自由表,3.1.1 数据库设计的过程(一),确定建立数据库的目的,进行需求分析。,数据库的设计一般按如下步骤进行:,对现实世界中要处理的对象进行详细调查。,收集支持系统目标的信息。,数据库设计的过程(二),确定需要的各种表。,尽量避免在一个表中存储重复的信息。,教师表,课程表,学生表,课程安排表,教材信息表,成绩表,院系专

2、业信息表,数据库设计的过程(三),确定表的字段。,每个字段直接和表的主题相关。,不要包含可推导得到或需计算的字段(数据)。,收集所需的全部信息。,尽量以最小的逻辑单位存储信息。,每个表都必须包含关键字。,数据库设计的过程(四),确定表之间的关系。,表与表之间通常存在一定的联系。,首先介绍4种关键字。,关键字(P9),超关键字,候选关键字,主关键字,外部关键字,二维表中能唯一确定记录的一个列或几个列的组被称为“超关键字”(super key)。,超关键字,二维表的全体字段必然构成它的一个超关键字。,超关键字虽然能唯一确定记录,但是它所包含的字段可能是有多余的。,单一关键字、合成关键字,举例,指出

3、下面表中的超关键字:,候选关键字,如果一个超关键字,去掉其中任何一个字段后不再能唯一确定记录,则称它为“候选关键字” (candidate key)。,候选关键字既能唯一确定一条记录,它包含的字段又是最精练的。,一个二维表中总存在超关键字,因而也必存在候选关键字。,一个二维表中至少有一个候选关键字,也可能有多个。,举例,指出下面表中的候选关键字:,从二维表的候选关键字中,选出一个作为“主关键字” (primary key)。,主关键字,主关键字必须包含一个不同于其他记录的唯一的值。,主关键字的值不能为空,否则就起不了唯一标识记录的作用。,如果主关键字过于复杂,往往要增设一个字段,如“学号”。,

4、举例,外部关键字,当一个二维表(A表)的主关键字被包含到另一个二维表(B表)中时,它就称之为B表的“外部关键字” (foreign key)。,举例,成绩表(B),学生表(A),在学生表中,“学号”是主关键字,而在成绩表中,“学号”便成了外部关键字。,表之间的关系,一对一关系(1:1),一对多关系(1:n),多对多关系(n:n),一对一关系(1:1),一对一关系(1:1),如果: (1)A表的一个记录在B表中有且仅有一个相应记录;,(2)而B表中的一个记录在A表也有且仅有一个记录与之对应,,则称这两张表之间的关系为一对一关系。,一对一关系,1 : 1,一对多关系(1:n),一对多关系(1:n)

5、,如果: (1) A表的任意一个记录在B表中都有多个记录与之相对应;,(2)而B表中的每个记录在A表仅有一个记录与之对应,,则称这两张表之间的关系为一对多关系。,此时称A表为主表(父表),B表为子表。,一对多关系(1:n),一对多关系是通过主表的主关键字和子表的外部关键字来体现的。,即要把主表的主关键字放到子表中,作为子表的外部关键字,并以此建立两张表之间的一对多关系。,主表,子表,主关键字,外部关键字,1:n,多对多关系(n:m),多对多关系(n:m),如果: (1) A表的任意一个记录在B表中存在多个记录与之相对应;,(2)而B表中的每个记录在A表也存在多个记录与之对应,,则称这两张表之间

6、的关系为多对多关系。,多对多关系(n:m),在实际应用中,大多数数据库中都存在多对多关系,但多对多关系不能直接利用,必须建立第三张表把多对多关系分解成两个一对多关系。这第三个表称作“纽带表”。,纽带表的主关键字可以由两个外部关键字组成。,多对多,一对多,一对多,XS表,KC表,CJ表,多对多关系,多对多,纽带表,一对多,一对多,来自学生表的主关键字,来自课程表的主关键字,表之间的关系,数据库设计的过程(五),设计的优化。,是否遗忘了字段?,是否为每个表选择了合适的关键字?,是否在某个表中输入了重复输入了同样的信息?,3.1.2 数据库的组成,数据库表,视图,连接,存储过程,前链和后链 数据库表

7、与数据库之间的相关性是通过表文件(.DBF)与数据库文件(.DBC)之间的双向链接实现的。,数据库表,在数据库中添加表本质上是建立了库与表之间的双向链接。,双向链接包括前链和后链。,前链是保存在数据库容器(.DBC)中的有关表文件的路径和文件名信息,它将数据库与库表文件相链接。,前链,前链指向数据库中包含的表,它由各个表文件的相对路径和文件名称构成。,后链,后链是存放在一个表(.DBF)的表头中的数据库的路径和文件名,用以将自身与包含自身的数据库容器相链接。,后链指向拥有该表的数据库,它由数据库的相对路径和数据库名称构成。,表与数据库之间的双向链接,前链,前链,前链,前链,后链,后链,后链,后

8、链,视图,视图是一张“虚表”,其数据来源于一张或多张表。,视图分为本地视图和远程视图。,连接,连接是保存在数据库中的一个定义,它指定了远程数据源的名称。,建立远程数据连接的目的是创建远程视图。,ODBC:开放式数据互连,存储过程,存储过程是保存在数据库中的过程代码,它由一系列函数组成。,利用存储过程可以提高数据库的性能。,存储过程保存在.dbc文件中。,数据字典是指存储在数据库中用于描述所管理的表和对象的数据,即关于数据的数据。这些数据称为元数据。,3.1.3 数据字典,每个数据库带有一个数据字典,其数据存储在数据库文件中。,数据库中的表可以享受到数据字典的各种功能。,数据字典使得对数据库的设

9、计和修改更加灵活。,数据字典扩展了对数据的描述,从而增强了数据管理和控制功能。, 表中字段的标题、注释、默认值、输入掩码和显示格式,以及表单中使用的默认控件类等,数据字典可以创建和指定的内容, 表的主索引关键字, 数据库表之间的永久性关系, 长表名和表注释, 字段级和记录级有效性规则, 存储过程, 插入、更新和删除事件的触发器,查看数据字典,查看数据字典的方法: CLOSE ALL USE DB1.DBC BROWSE,3.2 数据库的创建、打开与使用,3.2.1 数据库的创建,3.2.2 数据库的打开与关闭,创建数据库的方法,数据库文件(.dbc),关联的数据库备注文件(.dct),创建一个

10、新的数据库将生成三个文件:,关联的数据库索引文件(.dcx),3.2.1 数据库的创建,VFP数据库的创建方法:,界面操作方式创建数据库,命令方式创建数据库,(1)项目管理器,(2)“文件”菜单、“常用”工具栏,创建数据库的命令: CREATE DATABASE |?,命令方式创建数据库,说明:用命令方式创建的数据库不会自动添加到项目管理器中。,命令方式: MODIFY DATABASE |?,打开数据库设计器,界面方式: 项目管理器 选择数据库 “修改”按钮,3.2.2 数据库的打开与关闭,打开数据库 设置当前数据库 检查数据库的有效性 关闭数据库 删除数据库,打开一个数据库的方法:,打开数

11、据库(一),(1)界面方式,新建数据库,保存后自动以独占方式打开。,打开数据库中的表时,自动打开相应的数据库。,项目管理器数据库“修改”按钮。,打开数据库(二),(2)命令方式,OPEN DATABASE DatabaseName ; EXCLUSIVE | SHARED ; NOUPDATE VALIDATE,(1)“常用”工具栏 “数据库”下拉列表框: 在列表中选择一个作为当前数据库。,设置当前数据库的方法:,设置当前数据库,(2)命令形式: SET DATABASE TO,与数据库相关的两个函数(P106):,函数, 函数DBC(), 函数DBUSED(“数据库名”),检查数据库的有效性

12、,语法: VALIDATE DATABASE RECOVER ; TO PRINTER | TO FILE 文件名 ,功能: 检查当前数据库的有效性,并更新链接。,注意: 该命令只能处理以独占方式打开的当前数据库。,(1)从“项目管理器”中,选定要关闭的数据库并选择“关闭”按钮。,关闭数据库,(2)使用命令: CLOSE DATABASES CLOSE DATABASES ALL CLOSE ALL,不完全删除: (1)Windows“资源管理器” (2)DELETE FILE 命令,删除数据库,完全删除: (1)从“项目管理器”中,选定要关闭的数据库并选择“移去”按钮。,(2)使用命令: D

13、ELETE DATABASE DatabaseName|?,3.3 表的创建与使用,3.3.1 表结构概述 3.3.2 利用表设计器创建和修改表结构 3.3.3 字段属性与表属性 3.3.4 表的打开与关闭 3.3.5 记录的处理 3.3.6 索引的创建与使用 3.3.7 自由表 3.3.8 利用命令创建和修改表结构,表的概念(一),VFP中的表(Table)是指存放在磁盘文件中的一张二维表。,一张表保存为一个表文件(.DBF)。,VFP中,表分为两种类型: 数据库表 和 自由表,表的概念(二),表中的一列称为字段(Field)。字段规定了数据的特征。每张表最多可以有255个字段。,表的一行叫

14、做一个记录(Record)。记录是多个字段的集合。,表的记录必须用一个公共的结构来存储,这个公共的结构就是表结构。,没有数据的表结构:,包含数据的数据表:,表文件名,表文件用一个文件名命名。文件名的构造遵循Windows的文件名的约定,但不可用A到J 的任何一个单个字母作为文件名。,例如: xs.dbf,student.dbf,s.dbf是正确的文件名 a.dbf,A.dbf,J.dbf 是不正确的文件名,建立表的步骤,先设计表的结构。,再在VFP中使用命令或表设计器建立表的结构并保存为表文件。,然后再输入记录。,字段名(Field Name),字段的基本属性,字段的数据类型(Type),字段

15、宽度(Width),小数位数(Decimal),空值支持(Null),VFP中字段的数据类型(1),字符型,C,字母、汉字符号和数字型文本,学号、姓名,货币型,数值型,浮点型,日期型,D,F,N,Y,货币单位,整数或小数,年、月、日,整数或小数,工资,考试成绩,生日,VFP中字段的数据类型(2),日期时间型,T,年月日时分秒,上班时间,双精度型,整型,逻辑型,备注型,M,L,I,B,双精度型数值,不带小数点的数值,不定长的一段文字,真与假,高精度的数据,学生数量,学生简历,通用型,G,OLE,图片或声音,是否为必修课,VFP中字段的宽度,需指定,8,8,8,日期时间型,字符型,货币型,数值型,

16、浮点型,日期型,8,4,1,4,4,需指定,需指定,双精度型,整型,逻辑型,备注型,通用型,备注文件,对于包含备注型字段或通用型字段的表来说,系统会自动生成和管理一个相应的备注文件,用于存储备注内容。,备注文件的文件主名与表文件的主名相同,其扩展名为.fpt。,小数位数,对于数值型和浮点型字段: 字段宽度 = 整数部分的宽度 + 小数点1位 + 小数位数宽度,如果小数位数不为0,则小数位数必须比整个字段宽度至少小_。,1,利用表设计器创建表结构, 项目管理器, 数据库设计器, 数据库打开时,“新建”菜单命令/按钮,习题, 表创建并保存后,系统以扩展名_保存表文件。, 如果表中有_型字段或_型字

17、段,则自动产生与表名相同但扩展名为_的备注文件。,.DBF,备注,通用,.FPT,利用表设计器修改表结构, 项目管理器, 数据库设计器, 表已打开时,命令:,MODIFY STRUCTURE, 表未打开时,命令(后续介绍):,ALTER TABLE ,数据库表的字段扩展属性, 字段的标题、注释 显示属性:格式和输入掩码 默认值 字段的有效性规则和有效性信息 字段的默认控件类 这些扩展属性都保存在库表所在的数据库文件中。,字段标题和注释,标题和注释,标题和注释都是为了使表具有更好的可读性。,标题只是在浏览、显示时起作用,并不能作为字段名用于表达式及命令中。 (不需要用引号引起来),字段格式与输入

18、掩码,字段的格式 用于指定字段显示时的格式。 (一个设置对当前整个字段有效),输入掩码 用于指定字段中输入数据的格式。 (一个设置对当前一位有效),为GZ表中JBGZ字段设置掩码:只可输入数字和正负符号,且在值的左侧显示“*”号。,为JS表的GH字段设置掩码:接受5个字节的字符,且第一个字符必须为大写字母,后4个字符只接受数字。,习 题,为JS表的GZRQ字段设置显示格式为英国日期格式,GH字段只允许字母和汉字,且字母为大写字母。,字段的格式可以写在掩码中,掩码不可以写在格式中,掩码:A9999,*999999.9,GZRQ格式:E,GH格式:A!,格式:!,字段默认值,向一张数据库表中添加新

19、记录时,为字段所指定的最初的值称为该字段的默认值。,例:设置XS表中XB字段的默认值为“男”、CSRQ字段的默认值为1985年1月1日。,如果字段设置为允许.NULL.,则字段的默认值可设置为.NULL.,否则不可以将字段的默认值设置为.NULL.。,默认值必须是一个与字段类型相同的表达式。(字符型常量必须用引号引起来,逻辑型常量两边有两个点,日期型常量用严格日期格式),字段验证,字段验证:用于限定字段的取值及取值范围。,字段有效性规则,字段有效性信息,字段有效性规则,用来控制输入到字段中的数据的取值范围。,例2:设置GZ表中JBGZ字段的值在100元和10000元之间。,例1:设置XS表中C

20、SRQ字段的值在1980年1月1日之后。,例3:设置XS表中XB字段的值只能为“男”或“女”。,该规则是一个逻辑表达式,且当前字段包含在该表达式中。,该表达式与记录的其它字段的值无关。,字段有效性信息,也称为字段有效性说明,它是一个字符型表达式,用于指定在不满足规则要求时,显示确认框中的说明信息。,例1:设置XS表中CSRQ字段的有效性信息为:“出生日期应该在1980年1月1日之后”。,例2:设置XS表中XB字段的有效性信息为:“性别字段的值只能为男或女”。,内容必须用引号引起来。,字段的默认控件类,设置字段的“匹配字段类型到类”属性 (第6章介绍),数据库表的表属性, 长表名与表注释 记录的

21、有效性规则和有效性信息 触发器 这些表属性也都保存在库表所在的数据库文件中。,长表名与表注释,使用长表名打开表时,数据库必须打开且为当前数据库。,长表名,使用表名打开表时,系统会自动打开数据库。,表注释是表的说明信息,长表名最大长度为128个字符。,记录验证,记录验证与字段验证类似,包括记录有效性规则和有效性信息,用于定义记录级校验规则及相应的提示信息。,记录有效性规则是一个逻辑型表达式。,记录有效性信息是一个字符型表达式。,字段有效性规则仅对当前字段有效,而使用记录有效性规则可以校验多个字段之间的关系是否满足某种规则。,设置记录级有效性规则,例:设置JS表中CSRQ应比GZRQ早。,规则表达

22、式: CSRQ GZRQ,例:设置XS表中XDH字段的值应等于XH字段的第34位内容(表中实际内容不成立)。,规则表达式: XDH=SUBSTR(ALLTRIM(XH),3,4),习 题,为JS表设置长表名为“教师表”,表的注释为“教师基本信息表”。,YEAR(gzrq)=YEAR(csrq)+18,设置JS表的验证规则和信息:“18岁以后才可以参加工作”。,xb=iif(substr(alltrim(jg),1,4)=江苏,男,女),设置XS表的验证规则:“籍贯江苏的学生是男生,其余是女生” (表中实际内容不成立) 。,表的触发器,触发器(Trigger)是绑定在表上的逻辑表达式,当表中的任

23、何记录被指定的操作命令(插入、更新或删除)修改时,在进行了其它所有检查之后被激活。,触发器是表在插入、更新或删除记录时进行的检验规则。,三种触发器,数据库表的触发器有三种:,插入触发器 每次向表中插入或追加记录时触发该规则。,更新触发器 每次向表中修改记录时触发该规则。,删除触发器 每次向表中删除记录时触发该规则。,触发器的返回值,触发器的返回值(即其逻辑表达式的返回值)为逻辑值:,当其返回值为.T.时,允许执行相应的操作(插入、更新或删除);,当其返回值为.F.时,则不允许执行相应的操作。,触发器的设置,表设计器,CREATE TRIGGER命令: CREATE TRIGGER ON 表文件

24、名 ; FOR INSERT | UPDATE | DELETE ; AS 逻辑表达式,举 例,CREATE TRIGGER ON JS FOR UPDATE ; AS YEAR(DATE()-YAER(CSRQ)60,为JS表设置触发器:只能修改60岁以上的教师名单。,为XS表设置触发器:插入新记录时XM字段不可以为空。,CREATE TRIGGER ON XS ; FOR INSERT AS .NOT. EMPTY(XM),举 例,CREATE TRIGGER ON KC ; FOR DELETE AS .F.,为KC表设置触发器:防止删除记录。,删除触发器,表设计器,DELETE TRI

25、GGER ON JS FOR UPDATE,例:删除JS表的修改触发器。,DELETE TRIGGER命令: DELETE TRIGGER ON 表文件名 ; FOR INSERT | UPDATE | DELETE,数据库表的约束机制及其激活时机综述,所谓工作区是指用以标识一个打开的表的区域。,工作区的概念,每个工作区有一个编号。编号范围为132767 (前10个工作区号也可以用字母AJ表示)。,一个工作区在某一时刻只能打开一个表。,如果在一个工作区中已经打开了一个表,再在此工作区中打开另一个表时,前一个表将自动被关闭。,可以同时在多个工作区中打开多个表。一个表也可在多个工作区中多次被打开。

26、,工 作 区 的 选 择,VFP正在使用的工作区称为当前工作区。,在VFP启动后,系统默认当前工作区号为1。,选择当前工作区的命令: SELECT 工作区号|表别名,工作区号为0时,选择未被使用的最小编号的工作区。,测试工作区号的函数,测试工作区号的函数: SELECT( 0 | 1 |表别名 ),没有参数和参数0时返回当前工作区号。,参数1时返回当前未被使用的最大工作区号。,参数为“表别名”时返回该表所在的工作区号, 使用别名时必须加引号。,“数据工作期”窗口,数据工作期是多表操作的动态工作环境。,每一个数据工作期包含有自己的一组工作区,这些工作区含有打开的表、表索引和关系。,利用它可以打开

27、关闭和浏览多个数据库表或自由表,并可设置表属性。,表的打开和关闭,使用表之前必须把表打开。,表打开的方式分为:,1. 显式:利用界面或命令打开表。,2. 隐式: 执行某些操作时,系统自动打开相应的表。,通过界面操作打开表,利用“文件”菜单或 “常用”工具栏,利用“数据工作期”窗口,利用“项目管理器”窗口,表将在当前工作区中打开,表将在当前未被使用的最小工作区中打开,且当前工作区不变,表将在当前未被使用的最小工作区中打开,且该工作区为当前工作区,使用命令打开表,USE 表名 IN 工作区号|别名 AGAIN ALIAS 别名 NOUPDATE,IN子句:指定在哪个工作区中打开,AGAIN子句:再

28、次打开同一个表,ALIAS子句:定义表的别名,NOUPDATE子句:表打开后不允许修改其结构 和数据,别名的概念(一),在工作区中打开的表都有一个别名。,表的别名是对工作区中打开的表的一个临时标识,用于引用工作区和工作区中的表。,可以用表的“别名”作为工作区区号。,在打开表时,如果未利用ALIAS子句指定别名,则别名与表名相同。,查看当前工作区别名的函数: ALIAS( 工作区区号),别名的概念(二),在第一次打开的工作区中,别名与表名相同。,(1)在前10个工作区中系统默认的别名是字母AJ。,(2)在工作区11到32767中指定的默认别名是 W11 W32767。,如果一个表同时在多个工作区

29、中打开且均未指定别名,则:,在其他工作区中:,表的关闭,界面操作:“数据工作期”窗口,使用命令:,USE IN 工作区号|别名,CLOSE TABLES ALL,CLOSE ALL,表的独占与共享,在默认状态下,表是以独占方式打开的。,设置默认打开方式:,(1)“选项”对话框,(2)命令:SET EXCLUSIVE ON|OFF,显式地指定表的打开方式,界面操作:“打开”对话框,改变SET EXCLUSIVE的设置并不改变已经打开的表的状态,USE命令: USE 表名 SHARED|EXCLUSIVE,一张表同时被打开多次时,只以第一次的打开方式为准,记录的处理,记录的输入 浏览窗口 记录的筛

30、选 限制对字段的访问 记录的定位 记录的修改 记录的删除与恢复 数据的复制 数据的统计,记录的输入(1),1. 表结构创建后立即输入记录,2. 在浏览窗口中追加记录,追加新记录,交互方式下.NULL.的输入方法:,追加方式,CTRL + 0,记录的输入(2),3. 使用INSERT-SQL命令追加记录,INSERT INTO 表名 ( 字段1 ,字段2,) VALUES (表达式1 ,表达式2,),例1:向xs表中追加一条新记录: (学号:001;姓名:张三;性别:男),例2:向js表中追加一条新记录: (工号:A0099;姓名:张三;出生日期:3/18/1956),记录的输入(3),4. 使

31、用APPEND或APPEND FROM命令追加记录,APPEND BALNK IN 工作区号 | 表名,APPEND FROM 文件名 DELIMITED | XLS ,例:分别将文本文件和EXCEL文件的内容追加到xs表中。,5.备注型字段与通用型字段的数据输入,表的浏览与定制(1),1. 浏览窗口,BROWSE FIELDS 字段列表 FOR 条件表达式 FREEZE 字段名 NOAPPEND NODELETE NOMODIFY TITLE 字符串 ,举例,例1:浏览XS表中的XM、XB、CSRQ字段。,例2:浏览XS表中女生的XM、XB、CSRQ字段。,例3:浏览XS表,只可修改XDH字

32、段。,例4:浏览XS表中,“05”系学生的XH、XM、XDH字段,且记录不可修改。,例5:浏览XS表,不可追加和删除记录,浏览窗口标题为“学生表”。,记录的筛选,“表”菜单“属性”“工作区属性”对话框,命令: SET FILTER TO 条件表达式 ,例1:筛选女生记录。,例2:筛选“05”系学生记录。,例3:取消筛选。,限制对字段的访问,“表”菜单“属性”“工作区属性”对话框,命令: SET FIELD TO 字段列表 ,例1:筛选XH、XM字段。,例2:追加筛选XB字段。,例3:显示所有字段。,记录指针,表的三个控制标志:,记录的开始标志:BOF()函数,记录的指针标志:RECNO()函数

33、,记录的结束标志:EOF()函数,表文件结构示意图,文件头 (包含表结构等信息),第1条记录,第2条记录,第3条记录,第n条记录,记录开始标志BOF( ),记录结束标志EOF( ),当前记录RECNO( ),物理记录号,1,2,3,n,记录指针,打开表时记录指针情况,无记录,有记录,.T.,.T.,.F.,.F.,1,1,记录的定位的三种方式,绝对定位,将指针移到指定的位置,相对定位,将指针从当前位置开始,相对于当前位置向前或向后移动若干个记录位置,条件定位,按照一定的条件查找符合该条件的记录,记录的定位的方法(一),通过界面操作方式定位,“表”菜单 “转到记录”子菜单,作用范围(Scope)

34、,ALL,NEXT n,RECNO n,REST,记录的定位的方法(二),命令,GOTO 记录号|TOP|BOTTOM IN 工作区号|别名,SKIP 记录数 IN 工作区号|别名,LOCATE FOR 条件表达式 作用范围,CONTINUE,举例,打开XS表(有记录),执行以下操作,并分别判断bof( )、eof( )、recno( )的值:,记录指针移到第3条记录处,记录指针移到最后一条记录处,记录指针移到第一条记录处,记录指针下移10条记录,记录指针上移5条记录,记录指针指向第一个男生记录处,记录指针指向第二个男生记录处,(2) 在JS表中有15条记录,现执行以下命令: 则输出结果是_。

35、 A.1 B.16 C.15 D.出错,习 题,(1) 在当前已打开的XS表中有10条记录,执行以下命令: 则输出结果是_。 A.1 B.3 C.4 D.2,C,B,GO TOP SKIP 3 ?RECNO( ),GOTO 10 SKIP 10 ?RECNO( ),记录的修改(1),界面方式的记录修改,表浏览状态下“表”菜单“替换字段” “替换字段”对话框,UPDATE-SQL命令:,UPDATE 表名 SET 列名1=表达式1 ,列名2=表达式2, WHERE 条件表达式 ,举例,将GZ(工资)表中所有教师的JBGZ都增加100元。,将GZ(工资)表中所有教师的JBGZ都增加10%。,将GZ

36、(工资)表中JBGZ在1000元以下的教师的JBGZ都增加10%。,将GZ(工资)表中所有教师的JBGZ和GWJT都分别增加10%和20%。,记录的修改(2),REPLACE命令:,REPLACE 字段名1 WITH 表达式1 ADDITIVE ,字段名2 WITH 表达式2 ADDITIVE 作用范围 FOR 条件表达式 ,设当前表为js.dbf,结构为:职工号(C,6)、姓名(C,8)、性别(C,2)、年龄(N,2)、职称(C,10)和基本工资(N,4) 。请用单条命令实现以下功能: (1)对所有职称为“讲师”且基本工资大于500的教师的职称晋升为“副教授”,基本工资上调10% 。,例题分

37、析,解:(1) REPLACE 职称 WITH “副教授”, ; 基本工资 WITH 基本工资*1.1 ; FOR 职称=“讲师” AND 基本工资500,(2)将所有年龄在50岁以上的女教师的基本工资上调10% 。,例题分析,解: (2) REPLACE 基本工资 WITH 基本工资*1.1; FOR 年龄=50 AND 性别=“女”,UPDATE和REPLACE的区别,UPDATE不需要事先打开表,会首先选择一个最小未被使用的工作区打开表。,REPLACE只能修改在当前工作区打开的表。,UPDATE命令执行前后的工作区不变。,UPDATE命令执行后记录指针位于表的结尾,REPLACE命令执

38、行后记录指针位于指定范围的末尾。,删除记录的步骤,彻底删除表中的部分记录,需两步走:,1. 标记要删除的记录;,2. 彻底删除带删除标记的记录。,标记要删除记录的方法(1),界面方式,“表”菜单“切换删除标记”命令,“表”菜单“删除记录”命令,标记要删除记录的方法(2),命令方式,(1)DELETE命令 DELETE Scope FOR lExpression IN nWorkArea | cTableAlias ,例:给所有“江苏”籍学生的记录加删除标记。,例:给以下10条记录中男生记录加删除标记。,例:给XS表中所有记录加删除标记。,标记要删除记录的方法(3),(2)DELETE-SQL命

39、令 DELETE FROM TableName WHERE FilterCondition,例:给所有“南京”籍学生的记录加删除标记。,例:给所有名字的第2个字为“国”的学生的记录加删除标记。,例:给XS表中所有记录加删除标记。,恢复带删除标记的记录(1),界面方式,“表”菜单“切换删除标记”命令,“表”菜单“恢复记录”命令,恢复带删除标记的记录(2),命令方式 RECALL Scope FOR lExpression ,例:恢复所有男生记录。,例:恢复从当前记录开始以下所有记录中的“05”系学生的记录。,例:恢复所有记录。,例:恢复当前记录。,彻底删除记录,界面方式 “表”菜单“彻底删除”命

40、令,命令方式,(1)PACK命令: 删除带删除标记的记录,(2)ZAP命令: 删除所有记录,不管记录是否有删除标记,注:PACK命令和ZAP命令都需要表以独占方式打开。,SET DELETED 设置命令,SET DELETED ON|OFF,ON:忽略带有删除标记的记录,OFF:(系统默认值)允许访问标有删除标记 的记录,DELETE()函数,DELETE()函数,用来测试记录是否已删除。,例:仅浏览带有删除标记的记录。,BROWSE FOR DELETE( ),数据的复制,COPY TO FileName FIELDS FieldList SCOPE FOR lExpression TYPE

41、 SDF | XLS | DELIMITED WITH Delimiter | BLANK | TAB ,举例,在当前工作区中打开XS表,执行以下操作:,例1:将所有姓“张”的学生记录复制到zhang.dbf 文件中。,例2:将xh、xm、xb字段内容复制到A1.txt文件中。,例3:将XS表的数据转换成一个A2.XLS文件。,数据的统计,统计记录数: COUNT Scope FOR lExpression TO VarName,统计某数值型字段的值的总和: SUM nExpression Scope FOR lExpression TO VarName,统计某数值型字段的值的平均值: AVE

42、RAGE nExpression Scope FOR lExpression TO VarName,举例,例1:统计XS表中女生人数。,例2:统计CJ表中“01”课程的总分,并将结果保存在变量A1中。,例3:统计CJ表中成绩在80分以上的成绩的平均分。,例4:统计JS表中“A”部门教师的人数,并将结果保存在变量A2中。,例5:统计GZ表中,JBGZ在1000元以上的GWJT的总和。,例6:统计KC表中,3学分以上、5学分以下的课程的平均课时数。,表的索引,记录的顺序 索引概述 创建结构复合索引 索引的修改和删除 索引的使用 利用索引快速定位记录 有关表操作的常用函数,记录的顺序,记录的物理顺序

43、,记录的逻辑顺序,记录的物理顺序,表中的记录通常情况下是按其存储顺序输出,这种顺序称为物理顺序。记录号表示了记录的物理顺序。,记录的逻辑顺序,表中记录按某个字段值或某些字段值排序的顺序则称为记录的逻辑顺序。,逻辑顺序可以与物理顺序相同,也可以不同。,排序的方法(一),方法一:把原表记录按某个逻辑顺序重新写到一个新的表文件中,新表与原表大小相同,不同的仅是它们的物理顺序。,排序的方法(二),方法二:称为索引法。建立一个逻辑顺序号与原表物理顺序的记录号的对照表,并把对照表保存到一个文件(索引文件)中。,索引文件的优点,索引文件的优点:, 建立索引文件比建立表文件速度快, 建立索引文件比建立表文件所

44、占空间小, 可以从多个角度建立索引文件,一、索引,索引是根据索引关键字(即索引表达式)的值进行逻辑排序的一组指针,它提供了对数据的快速访问,且可以对表中的各条记录强制实现惟一性。,索引文件由索引序号(逻辑顺序)和对应于索引序号的表中的记录号(物理顺序,亦称作指针)所组成。,二、索引关键字,索引关键字是建立索引的依据。通常是由一个字段或由多个字段组成的表达式,也称索引表达式。,VFP按索引关键字来显示和访问表中记录。,索引表达式总是与表的字段有关,且可以是单个或多个字段所组成。,不能基于备注型字段和通用型字段建立索引。,建立“多字段索引”需注意,如果索引表达式为字符型表达式,则各个字段在索引表达

45、式中的前后顺序将影响索引的结果。,若索引表达式是由多个数值型字段组成,则按表达式的运算结果进行排列,而不是按字段本身。若欲按字段本身排列,则应转换为字符型后相加。,不同类型的字段构成一个表达式时,必须转换为同一数据类型(通常为字符型),才能构造正确的索引表达式。,习 题,基于表XS(xh c,xm c,xb c,nl n,csrq d,cj n)写出以下索引表达式:,xb+xm,xm+xb,nl+cj,str(nl)+str(cj),xb+dtoc(csrq,1),str(nl)+dtoc(csrq,1),1.先按性别排序,性别相同时,按姓名排序。,2.先按姓名排序,姓名相同时,按性别排序。,

46、3.按年龄和成绩的总和排序。,4.先按年龄排序,年龄相同时,按成绩排序。,5.先按性别排序,性别相同时,按出生日期排序。,6.先按年龄排序,年龄相同时,按出生日期排序。,索引标识(Tag),一张表可以创建多个索引。,为了区分一张表的不同索引,每一个索引都必须有一个索引名,即索引标识。索引标识的命名规则必须符合VFP的命名规则。,在实际应用中,索引标识一般与其对应的索引关键字相同或相近,以便于记忆。,索引标识名不能超过_个字符。,10,索引的类型(一),候选索引,(1)组成候选索引的索引表达式的值,在该表中必须是惟一的,不能有重复值。,(2)自由表和数据库表都可以建立候选索引。,(3)在每一张表

47、中,可以创建多个候选索引。,索引的类型(二),主索引,对于数据库表来说,可以从候选索引中选取一个作为该表的主索引。,(1)组成主索引的索引表达式的值,在该表中必须是惟一的,不能有重复值。,(2)自由表不能建立主索引,主索引只适用于数据库表。,(3)在每一张数据库表(非自由表)中,只能创建一个主索引。,索引的类型(三),普通索引 (1)普通索引的索引表达式的值允许在表中有重复的值,即在普通索引上查找的记录不具有惟一性。 (2)在每一张表(自由表或数据库表)中,可以创建多个普通索引。,索引的类型(四),唯一索引,(1)允许唯一索引的索引表达式在表中有重复的值,但在索引文件中存储的仅是重复值中的第一

48、个记录。,(2)在每一张表(自由表或数据库表)中,可以创建多个唯一索引。,不同类型索引的比较,多个,一个,多个,重复值仅 保存一次,多个,索引文件的种类(一),VFP支持三种不同类型的索引文件:,(1)结构复合索引文件,结构复合索引文件是将一张表的一个或多个索引的索引信息存储在一个索引文件中。,索引文件的主文件名与其对应的表文件的主文件名相同,扩展名为.cdx,创建时系统自动给定。,结构复合索引文件与表文件同步打开、更新 和关闭。,索引文件的种类(二),(2)非结构复合索引文件,非结构复合索引文件是将一张表的一个或多个索引的索引信息存储在一个索引文件中。,索引文件的文件名由用户创建时给出 (扩

49、展名为.cdx)。,非结构复合索引文件不会随与其对应的表文件的打开而自动打开,必须用打开索引文件的命令将其打开后,才能起作用。,索引文件的种类(三),(2)独立索引文件,在独立索引文件中,只能存储表的一个索引,文件名由用户定义,其扩展名为.idx 。,与非结构复合索引文件相同,独立索引文件不会因表文件的打开而自动打开,在需要时可以用命令将其打开或重建索引。,独立索引文件的查找速度快。,不同索引文件的比较,一个/多个,与表同名,CDX,与表同步,一个/多个,自定,CDX,用命令,一个,自定,IDX,用命令,索引类型和索引文件种类的区别:,区 别,4种类型的索引可以同时包含在一个复合索引文件之中。

50、,一个复合索引文件也可含有多个同种类型的索引(主索引只能有一个)。,独立索引文件中只有一个索引,且无索引类型之分。,创建结构复合索引,表设计器,命令方式,INDEX ON 索引表达式 TAG 索引标识 ; FOR 条件表达式 ; ASCENDING | DESCENDING ; UNIQUE | CANDIDATE ,举 例,在JS表中男教师按照GH的升序建立候选索引,索引标识为GH1。,Index ON GH Tag GH1 FOR XB=“男” Candi,Index ON XB Tag XB1 Unique Desc,Index ON STR(JBGZ)+STR(GWJT) Tag AB

51、C,在JS表中按照XB的降序建立唯一索引,索引标识为XB1。,在GZ表中,建立一个普通索引ABC,先按JBGZ排序,JBGZ相同的情况下按GWJT排序。,习 题,分别以JS表中的ZC和GZ字段为索引关键字,按ZC的升序和GZ的降序分别建立普通索引(索引标识名分别为JSZC和JSGZ)。,USE JS INDEX ON ZC TAG JSZC ASCE INDEX ON GZ TAG JSGZ DESC,对XS表中的男生,先按XDH排序,XDH相同时再按CSRQ排序,建立一个唯一索引,索引标识为AA。,USE XS Index ON XDH+DTOC(CSRQ,1) Tag AA ; FOR X

52、B=男 unique,索引的修改,用表设计器修改索引 对于结构复合索引,可以在表设计器中修改索引的标识名、类型以及索引表达式等。,用命令修改索引 如果不修改索引标识,可以再用INDEX命令建立同标识名的索引,以覆盖原索引。,索引的删除,用表设计器删除索引,用命令方式删除索引 DELETE TAG 标识名1 , DELETE TAG ALL,如果试图删除一个主索引标识或候选索引标识,且当前系统环境设置为SET SAFETY ON,系统会显示是否删除的确认对话框。,主控索引的概念,一个打开的表可以同时打开多个索引文件(独立的或复合的),但要决定显示或访问表中记录的顺序,还要设置一个索引作为主控索引

53、。,主控索引可以是复合索引(.CDX)文件中的一个标识,或者是一个独立索引(.IDX)文件。,虽然结构复合索引文件在表打开的同时,也被打开,但结构复合索引文件中的任何一个索引都不会被自动设置为主控索引,表中的记录仍按物理顺序显示和访问。,主索引和主控索引的区别,主索引是索引的一种类型。 主控索引是在某一时刻对表的显示顺序起作用的索引。,主控索引可以是结构复合索引文件或非结构复合索引文件中的主索引或其它类型的索引(或者是独立索引文件中的索引)。,表打开时,可以有一个主控索引,也可以无主控索引(按物理顺序排序)。,指定主控索引的方法(一),打开表的同时指定主控索引 USE 表名 ORDER 索引标

54、识名,例1:在打开XS表的同时,指定索引标识XBXM为主控索引。,USE XS ORDER XBXM,例2: USE xs IN 0 ALIAS xs2 AGAIN ORDER xb,指定主控索引的方法(二),打开表后再设置主控索引,(1)若表处于浏览状态:“表”菜单 “属性”,(2)若表不处于浏览状态:,“数据工作期”窗口 “属性”按钮,命令方式: SET ORDER TO 索引标识名 ; IN 工作区 | 别名 ; ASCENDING | DESCENDING ,(2)在已打开XS表的情况下,设置索引标识XH1为主控索引。,(1)在打开XS表的同时设置索引标识XH1为主控索引。,习 题,写

55、出以下命令:,USE XS ORDER XH1,SET ORDER TO XH1,SET ORDER TO GH1 IN 3 Desc,(3)为3号工作区中的JS表设置索引标识GH1为主控索引,并按降序排列。,SEEK命令(一),SEEK命令用于在一个表中搜索指定的表达式的值首次出现的记录。,这个记录的索引关键字必须与指定的表达式匹配。,SEEK 表达式 ORDER 标识名; ASCENDING | DESCENDING IN 工作区 | 别名 ,SEEK命令(二),判断是否找到相应记录的方法。,若找到相应记录,则:,(1)RECNO()= 最大记录号,(2)EOF()= .F.,(3)FOU

56、ND()= .T.,区 别,SEEK命令和LOCATE命令的区别:,(1)SEEK命令只能快速查找指定索引的索引关键字的值。,(2)LOCATE命令可在没有建立索引的表中顺序查找记录。,区 别,命令 GOTO 1 和 GOTO TOP 的区别:,& 定位到物理顺序中记录号为1的记录,& 定位到逻辑顺序中的首记录,USE XS ORDER XH1,GOTO 1,GOTO TOP,举例,物理顺序:,逻辑顺序(按XH排序):,习 题,打开XS 表的同时已设置索引标识XDH1为主控索引,搜索第一个XDH为“05”的记录。,SEEK “05”,SEEK “05” ORDER XDH1,?FOUND(),

57、XS表中有一个以XDH为索引关键字的索引标识XDH1。打开XS 表的同时没有设置主控索引。,(1)搜索第一个XDH为“05”的记录。,(2)判断是否找到该记录。,有关表操作的常用命令,FIELD(n)函数: 返回已打开的表的指定序号的字段,FCOUNT()函数: 返回已打开表的字段个数,DELETE()函数: 测试表的当前记录是否带有删除标记,RECCOUNT()函数: 返回已打开表的记录个数,自由表,所谓自由表,指不属于任何数据库的表。,自由表不能创建数据库表的扩展属性。,数据库表的添加和移去,其本质是 _。,自由表可以添加到数据库中,成为数据库表。,建立与删除数据库与表之间的双向链接,数据

58、库中添加与移去表的方法,利用“项目管理器”,添加表:ADD TABLE 自由表名 NAME 长表名 ,移去表:REMOVE TABLE 表文件名 DELETE ,注意:在执行上述的两条命令之前,数据库必须事先打开。,利用“数据库设计器”,使用命令,数据库表移为自由表后,一个数据库表变成自由表后:,原来数据库表中的主索引_。,一切扩展属性自动丢失。,变成候选索引,利用命令创建、修改表结构,利用命令创建表结构,利用命令修改表结构,利用命令创建表结构(一),CREATE TABLE|DBF 表文件名( 字段名1 类型(宽度 ,小数位) NULL|NOT NULL ,字段名2 , . ),例1:创建一个xs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论