版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 数据库和数据表的操作第二部分3.4 索引文件及其应用数据表中的顺序是按输入的顺序存储在表中。如果查找某条记录怎么办?3.4.1 索引文件及分类索引文件及分类1. 索引文件索引文件:它仅由两个字段组成,一个字段是排序的关键字值也可以是一个表达式),另一个字段是每个关键字在原始数据表中对应的记录号。例,在Rsda.dbf数据表中,以编号为关键字段并按升序建立的索引文件的示意图如下图所示。 在索引文件中,记录是按索引关键字值的顺序排列的,在索引文件中,记录是按索引关键字值的顺序排列的,当要查找某一编号的记录时,当要查找某一编号的记录时,VFP先在索引文件中查找先在索引文件中查找该编号,找到后
2、再根据对应的记录号,在数据表中将记该编号,找到后再根据对应的记录号,在数据表中将记录指针快速移动到该记录上。录指针快速移动到该记录上。 一个索引文件中可以只有一个索引,也可以有多个索引。一个索引文件中可以只有一个索引,也可以有多个索引。可以包含多个索引的索引文件称该文件为复合索引文件。可以包含多个索引的索引文件称该文件为复合索引文件。在复合索引文件中,需要为每个索引指定一个索引标识在复合索引文件中,需要为每个索引指定一个索引标识名,以便于通过索引标识相互区分各个索引。名,以便于通过索引标识相互区分各个索引。 3.4.1 索引文件及分类索引文件及分类 2. 索引的类型索引的类型 (1)主索引主索
3、引 主索引通常是数据表的关键字索引,作为主索引的字段主索引通常是数据表的关键字索引,作为主索引的字段称为主关键字。主索引不能用在自由表中,而只能用在称为主关键字。主索引不能用在自由表中,而只能用在数据库表中,可用于在永久关系中建立参照完整性。创数据库表中,可用于在永久关系中建立参照完整性。创建主索引的字段不允许有重复值,且一个表只能有一个建主索引的字段不允许有重复值,且一个表只能有一个主索引。主索引。 例如,在数据表中,常用学生证号、身份证号、工作证例如,在数据表中,常用学生证号、身份证号、工作证号等作为主索引,而姓名可能有同名的情况,一般不能号等作为主索引,而姓名可能有同名的情况,一般不能作
4、为主索引。作为主索引。 3.4.1 索引文件及分类索引文件及分类 (2)候选索引候选索引 候选索引类似于主索引,其索引值就不能有重复值。与候选索引类似于主索引,其索引值就不能有重复值。与主索引不同的是,一个数据表中可以有多个候选索引,主索引不同的是,一个数据表中可以有多个候选索引,而且侯选索引不能用来在永久关系中建立参照完整性。而且侯选索引不能用来在永久关系中建立参照完整性。 (3)惟一索引惟一索引 惟一索引表示索引值只能取一个,如果有两个或两个以惟一索引表示索引值只能取一个,如果有两个或两个以上的索引值,则只能取其中一个,因此,惟一索引使用上的索引值,则只能取其中一个,因此,惟一索引使用时可
5、能会隐藏一些记录。例如,若有两个同名的人员,时可能会隐藏一些记录。例如,若有两个同名的人员,将姓名字段作为惟一索引,则只能找到一个记录,另一将姓名字段作为惟一索引,则只能找到一个记录,另一个记录将不会找到。个记录将不会找到。3.4.1 索引文件及分类索引文件及分类 (4)普通索引普通索引 普通索引没有上面各索引的限制,是允许重复索引值的普通索引没有上面各索引的限制,是允许重复索引值的索引。作为普通索引的字段,其字段值可以重复,也可索引。作为普通索引的字段,其字段值可以重复,也可以作为排序的依据,但因为可能有多个相同的索引值,以作为排序的依据,但因为可能有多个相同的索引值,因此查询时会找到多个符
6、合条件的记录。一个数据表中因此查询时会找到多个符合条件的记录。一个数据表中可以有多个普通索引。可以有多个普通索引。3.4.1 索引文件及分类索引文件及分类 3. 索引文件的分类索引文件的分类 单入口索引文件扩展名为单入口索引文件扩展名为.IDX)( IDX索引文件索引文件中只包含一个索引中只包含一个索引) 复合索引文件扩展名复合索引文件扩展名.CDX),),.CDX索引文件索引文件中可以包含有一个或多个索引,所以称为复合索中可以包含有一个或多个索引,所以称为复合索引文件。引文件。 结构化复合索引文件结构化复合索引文件 非结构化复合索引文件非结构化复合索引文件(独立符合索引文件独立符合索引文件)
7、结构化复合索引的主文件名与数据表的结构化复合索引的主文件名与数据表的主文件名相同,并随着数据表的打开而主文件名相同,并随着数据表的打开而打开,在添加、更改或删除记录时会自打开,在添加、更改或删除记录时会自动进行维护;动进行维护;非结构化复合索引文件非结构化复合索引文件(独立符合索引文独立符合索引文件件)的主文件名与数据表文件不同,必须的主文件名与数据表文件不同,必须用命令打开。用命令打开。 3.4.2 创建索引文件创建索引文件1. 建立结构化复合索引文件建立结构化复合索引文件(1) 在表设计器中创建索引文件在表设计器中创建索引文件 (2) 命令方式创建索引命令方式创建索引 【格式】【格式】IN
8、DEX ON 表达式表达式 TAG 索引标识名索引标识名 FOR 条件表达式条件表达式 ASCENDING|DESCENDING UNIQUE|CANDIDATEADDITIVE 【功能】建立结构化复合索引文件。【功能】建立结构化复合索引文件。 对对rsda表表1按编号升序建立索引;(按编号升序建立索引;(2按工作日期降按工作日期降序;(序;(3先按性别升序,若性别相同,则按工作日期升序先按性别升序,若性别相同,则按工作日期升序建立索引建立索引rsda.cdx) USE rsda INDEX ON 编号编号 TAG bh INDEX ON 工作日期工作日期 TAG gzrq desc INDE
9、X ON 性别性别+dtoc(工作日期工作日期) TAG xbrq 2. 建立独立复合索引文件建立独立复合索引文件 独立复合索引文件的扩展名也是独立复合索引文件的扩展名也是.CDX,但,但其主文件名与数据表文件名不相同,且使用其主文件名与数据表文件名不相同,且使用时还需单独打开。独立复合索引文件主要用时还需单独打开。独立复合索引文件主要用来创建那些使用不太频繁的索引。来创建那些使用不太频繁的索引。 独立复合索引文件不能在表设计器中创建,独立复合索引文件不能在表设计器中创建,命令建立。命令建立。 【格式】【格式】INDEX ON 表达式表达式TAG 索引标索引标识名识名 OF 独立复合索引文件名
10、独立复合索引文件名 FOR 条件表达式条件表达式 ASCENDING|DESCENDING UNIQUE|CANDIDATEADDITIVE 例:对例:对rsgl.dbf表,(表,(1编号升序建立索引;编号升序建立索引;(2先按性别升序,若性别相同,则按工作先按性别升序,若性别相同,则按工作日期升序建立独立索引文件日期升序建立独立索引文件gl.cdx use rsgl index on 编号编号 tag bh cand of gl.cdx index on 性别性别+dtoc(出生日期出生日期) tag xbcsrq of gl.cdx 3. 重新建立索引文件重新建立索引文件 在数据表的使用过
11、程中,当增删记录或数据表在数据表的使用过程中,当增删记录或数据表中被索引文件使用的关键字段改动时,结构化中被索引文件使用的关键字段改动时,结构化复合索引会随着数据表的打开自动打开并能及复合索引会随着数据表的打开自动打开并能及时得到更新,但如果在使用数据表时未打开相时得到更新,但如果在使用数据表时未打开相应的独立复合索引文件或传统的单入口应的独立复合索引文件或传统的单入口.IDX索索引文件,则索引文件会因为无法及时更新而产引文件,则索引文件会因为无法及时更新而产生错误索引。这时须打开索引文件,并对其重生错误索引。这时须打开索引文件,并对其重新索引。新索引。菜单方式:菜单方式:打开数据表打开数据表
12、“显示显示”“”“阅读阅读”,菜单,菜单“表表”、“重重建建立索引命令,或打开数据表后用建建立索引命令,或打开数据表后用REINDEX命令命令重新建立索引。重新建立索引。命令方式命令方式【格式】【格式】REINDEX 4、索引的删除 若单索引:直接在windows中删除 若复合索引,删除索引标识 删除所有的索引标识: Delete tag all 删除特指的索引标识 Delete tag , 3.4.3 索引文件的使用索引文件的使用 1. 指定主控索引指定主控索引 一个数据表可以建立多个索引文件,每个索引一个数据表可以建立多个索引文件,每个索引文件中又可能包含多个索引,而一种索引就是文件中又可
13、能包含多个索引,而一种索引就是一种排序方式一种排序方式 在使用索引时,必须指明哪一个索引是对数据在使用索引时,必须指明哪一个索引是对数据表记录排序起作用的,即指定主控索引。表记录排序起作用的,即指定主控索引。 在没有指定哪一个索引为主控索引之前,数据在没有指定哪一个索引为主控索引之前,数据表的访问顺序仍然是原来的物理顺序,即按记表的访问顺序仍然是原来的物理顺序,即按记录号的顺序访问。录号的顺序访问。 主控索引和主索引有什么区别?主控索引和主索引有什么区别? 主控索引和主索引是完全不同的概念。主主控索引和主索引是完全不同的概念。主索引是用来控制数据的完整性的,而主控索引是用来控制数据的完整性的,
14、而主控索引是用来指定目前记录排列顺序的。索引是用来指定目前记录排列顺序的。1. 指定主控索引设定主控索引后,利用设定主控索引后,利用LIST、DISPLAY命令输出命令输出的记录顺序也是排序后的顺序。的记录顺序也是排序后的顺序。主控索引只是改变了记录的输出顺序,记录在数主控索引只是改变了记录的输出顺序,记录在数据库中的顺序并没有发生变化。据库中的顺序并没有发生变化。 命令方式命令方式 【格式一】【格式一】USE 数据表名数据表名 ORDER TAG ASCENDING|DESCENDING 【功能】打开表,同时指定结构化复合索引文件的索引【功能】打开表,同时指定结构化复合索引文件的索引为主控索
15、引。为主控索引。 【格式二】【格式二】SET ORDER TO TAG ASCENDING|DESCENDING 【功能】打开表后,指定结构化复合索引文件的索引为【功能】打开表后,指定结构化复合索引文件的索引为主控索引。主控索引。 (4) 关闭索引文件 【格式一】SET INDEX TO 【格式二】CLOSE INDEX2. 使用索引快速查找记录 FIND命令和命令和SEEK命令都可在指定主控命令都可在指定主控索引的情况下进行记录的查找操作。索引的情况下进行记录的查找操作。 SEEK 表达式表达式USE Rsda ORDER TAG bh & 打开打开Rsda同时同时指定指定BH为主控索引为主
16、控索引SEEK 03002disp SET ORDER TO gzrq& 重新指定重新指定rq为主控索引为主控索引seek 1963/09/02& 日期格式要与设置相同,否则会出错日期格式要与设置相同,否则会出错dispUse rsdaset order to bh3.5 数据表的统计计算 3.5.1 累加求和及求平均值 对每个记录的横向求和和统计可以用前面介绍的操作或命令方便地给出,如REPLACE命令。对于每个记录的纵向求和统计可以用累加求和命令实现。 【格式】SUM|AVERAGE 表达式表范围 FOR 条件表达式 TO 内存变量名表|TO 数组变量名 【例】求出【例】求出Rsgz.db
17、f中计算机系所有职工的月中计算机系所有职工的月基本工资平均值及全年实发工资之和并显示。基本工资平均值及全年实发工资之和并显示。 AVERAGE 基本工资基本工资 TO a FOR SUBSTR(编编号号,1,2)=03 SUM 实发工资实发工资*12 TO b FOR SUBSTR(编编号号,1,2)=03“ 【例】求出【例】求出xscj每门课的平均成绩,每个每门课的平均成绩,每个同学的平均成绩和总成绩。同学的平均成绩和总成绩。 use xscj.dbf brow average 英语英语,数学数学,计算机计算机 to a,b,c ?a,b,c repl all 总成绩总成绩 with 英语英
18、语+数学数学+计算机,计算机,平均成绩平均成绩 with 总成绩总成绩/3 3.5.2 统计记录个数统计记录个数 【格式】【格式】COUNT 范围范围FOR 条件表达式条件表达式 WHILE 条件表达式条件表达式TO 内存变量名表内存变量名表|TO 数组变量名数组变量名 例:统计每门课成绩均在例:统计每门课成绩均在90分以上的人数,以及不及格分以上的人数,以及不及格的人数。的人数。 count for 英语英语=90 and 数学数学=90 and 计算机计算机=90 to s1 count for 英语英语60 or 数学数学60 or 计算机计算机60 to s2 ? S1,s2 3.5.
19、3 分类汇总分类汇总 分类汇总对已经建立了索引并且指定了主控索引的数据表,分类汇总对已经建立了索引并且指定了主控索引的数据表,可以按关键字进行分类求和可以按关键字进行分类求和 【格式】【格式】TOTAL ON 关键字表达式关键字表达式 TO 新表名新表名 FIELDS 字段名表字段名表 范围范围FOR 条件表达式条件表达式WHILE 条件表达式条件表达式2 当前数据表必须是按关键字表达式索引过,并当前数据表必须是按关键字表达式索引过,并指定该索引为主控索引,以保证具有相同关键字值的记指定该索引为主控索引,以保证具有相同关键字值的记录能连续访问。录能连续访问。 FIELDS短语给出了需分类求和的
20、字段名,这些字段短语给出了需分类求和的字段名,这些字段只能是数值型或货币型的,如果缺省,则对当前表中的只能是数值型或货币型的,如果缺省,则对当前表中的所有数值型或货币型字段分类求和。不管选不选所有数值型或货币型字段分类求和。不管选不选FIELDS短语,新表与当前表的结构是一样的。短语,新表与当前表的结构是一样的。 对当前数据表中的若干个关键字表达式相同的记录,对当前数据表中的若干个关键字表达式相同的记录,生成新表中的一条记录。这条记录的非数值型或非货币生成新表中的一条记录。这条记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应字段,型字段取自关键字相同的一组记录中首记录的相应字
21、段,参加求和的字段值取自求和结果。参加求和的字段值取自求和结果。例题 (1)统计本月每种商品的台数和总价,以及统计本月每种商品的台数和总价,以及每个售货员销售的台数和总价每个售货员销售的台数和总价例题 (2)统计每天的销售台数和总价,以及本月统计每天的销售台数和总价,以及本月每天每个售货员的销售台数和总价。每天每个售货员的销售台数和总价。 Index on 日期日期 tag rq Total on 日期日期 to rqtj fields 台数台数,总价总价 Index on 日期日期+售货员售货员 tag rqshy Total on 日期日期+售货员售货员 to rqshtj fields
22、台台数数,总价总价3.6 数据交换 3.6.1 数组与数据表的数据交换 1. 将数据表中的记录数据保存到数组中 【格式一】SCATTER FIELDS 字段名表 MEMO TO 数组名 【格式二】COPY TO ARRAY 数组名FIELDS 字段名表 范围FOR 逻辑表达式 【功能】将当前打开的数据表中的某些记录数据存储在数组中。 2. 将数组中的数据传递到当前数据表中将数组中的数据传递到当前数据表中 【格式一】【格式一】GATHER FROM 数组名数组名 FIELDS 字段名表字段名表MEMO 【格式二】【格式二】APPEND FROM ARRAY 数组名数组名 FOR 逻辑表达式逻辑表
23、达式FIELDS 字段名表字段名表 【功能】将数组中各元素的数据传递给当前打开的【功能】将数组中各元素的数据传递给当前打开的数据表中。数据表中。 留意:请读者将留意:请读者将COPY TO ARRAY与与SCATTER、APPEND FROM ARRAY与与GATHER FROM的差的差别搞清楚。别搞清楚。 例:将第例:将第1条记录与第条记录与第4条记录互换条记录互换 go 1 Scatter to a &把第一条记录存到变量把第一条记录存到变量a中中 go 4 Scatter to b &把第四条记录存到变量把第四条记录存到变量b中中 go 1 gather from b &把把b中存的第中
24、存的第4条记录复制到条记录复制到第第1条记录条记录 go 4 gather from a &把把a中存的第中存的第1条记录复制到第条记录复制到第4条记录条记录 例:将前四条记录复制到另一新表例:将前四条记录复制到另一新表xscjtemp中中 copy to array b next 4 &将前四条记录复制到内存变将前四条记录复制到内存变量中量中 disp memo&显示内存变量显示内存变量 copy stru to xscjtemp&生成一个与生成一个与xscj相同的表结相同的表结构,空表构,空表 use xscjtemp&打开表打开表 append from array b &将内存中存储的
25、记录追加到将内存中存储的记录追加到表表 brow3.6.2 文件复制文件复制 1. 复制部分记录或整个数据表生成新表)复制部分记录或整个数据表生成新表) 【格式】【格式】COPY TO 表文件名表文件名 FOR|WHILE FIELDS DATABASE NAME WITH CDX | WITH PRODUCTION | SDF | SYLK | WK1 | WKS | WR1 | WRK | XLS | XL5 | DELIMITED WITH | WITH BLANK | 例题:将例题:将rsda中中1980年以后工作的员工复年以后工作的员工复制到新表制到新表rsda80 use rsda
26、 copy to rsda1 fields 姓名姓名,性别性别,职称职称,工作工作日期日期 for year(工作日期工作日期)1980 use rsda1 brow 2. 复制数据表的结构复制数据表的结构 【格式】【格式】COPY STRUCTURE TO 表文件名表文件名FIELDS 字段名表字段名表 WITH CDX | WITH PRODUCTION 阐明:阐明: 若不选可选项,生成的表结构具有与原若不选可选项,生成的表结构具有与原数据表相同的字段名、类型和宽度。数据表相同的字段名、类型和宽度。 若选若选FIELDS子句,生成的表结构只有字段子句,生成的表结构只有字段名表中的字段,字段
27、名之间用逗号隔开。名表中的字段,字段名之间用逗号隔开。 CDX和和PRODUCTION的意义与复制记录时的的意义与复制记录时的意义一致。意义一致。3.7 多数据表操作 在一个数据库中,一般都有着许多个数据在一个数据库中,一般都有着许多个数据表。而在对这些表的使用中,也经常是多表。而在对这些表的使用中,也经常是多个表中的数据同时被用到。个表中的数据同时被用到。VFP提供了强提供了强有力的多数据表操作能力,引入了工作区有力的多数据表操作能力,引入了工作区和表的别名这两个概念。用户可以在不同和表的别名这两个概念。用户可以在不同的工作区中同时打开多个表,也可以在不的工作区中同时打开多个表,也可以在不同
28、的工作区打开同一个表,通过表的别名,同的工作区打开同一个表,通过表的别名,用户可以引用在不同工作区打开的表中的用户可以引用在不同工作区打开的表中的数据。数据。 3.7.1 工作区的基本概念 所谓“翻开数据表,实际上就是VFP在内存中开辟了一个区域亦称缓冲区与磁盘上数据表之间建立起一种映射关系,使VFP通过缓冲区使用磁盘上数据表里的数据,这个内存中的缓冲区就称为工作区。 1. 工作区的性质 (1在每一个工作区中只能打开一个表,VFP最多可以开辟32767个工作区,打开32767个表。允许一个表在几个工作区中同时打开。( 2 )在某一时刻只能选择一个工作区为在某一时刻只能选择一个工作区为“当前工作
29、区当前工作区”,对,对其中的表进行操作。系统初始状态默认其中的表进行操作。系统初始状态默认1号工作区为当前号工作区为当前工作区。工作区。(3每一工作区打开的数据表都有各自的记录指针。在每一工作区打开的数据表都有各自的记录指针。在一般情况下,对数据表的操作只能移动当前工作区的记录一般情况下,对数据表的操作只能移动当前工作区的记录指针。当使得数据表之间建立临时关系以后,另一工作区指针。当使得数据表之间建立临时关系以后,另一工作区的记录指针才能根据要求伴随当前工作区的记录指针作相的记录指针才能根据要求伴随当前工作区的记录指针作相应的移动。应的移动。(4内存变量对各工作区是公用的,每一工作区的字段内存
30、变量对各工作区是公用的,每一工作区的字段变量对其它各工作区也是公用的。在任意工作区都可以对变量对其它各工作区也是公用的。在任意工作区都可以对其它工作区的当前记录进行读、写操作。其它工作区的当前记录进行读、写操作。 工作区的编号和别名工作区的编号和别名 为了标识每一个工作区,系统给每一工为了标识每一个工作区,系统给每一工作区编号,号码为作区编号,号码为1、2、32767。同时还。同时还为工作区规定了别名,其中为工作区规定了别名,其中1至至10号工作区别名号工作区别名为为A、B、J;11至至32767号工作区别名为号工作区别名为W11、W12、W32767。 给数据表命名时,不要与工作区的别名冲给
31、数据表命名时,不要与工作区的别名冲突,否则容易引起混乱。突,否则容易引起混乱。 数据表别名数据表别名 在打开数据表的同时,可以为数据表起一在打开数据表的同时,可以为数据表起一个别名,这个别名也作为打开该数据表的工作区个别名,这个别名也作为打开该数据表的工作区别名。别名。 格式格式USE ALIASIN|again 阐明:阐明: 若不指定工作区,则默认为在当前工作若不指定工作区,则默认为在当前工作区上打开指定的数据表,并同时关闭以前在当前区上打开指定的数据表,并同时关闭以前在当前工作区上打开的数据表。工作区上打开的数据表。 ALIAS 为可选项,不指定别名时,原数为可选项,不指定别名时,原数据表
32、名就是它的别名。据表名就是它的别名。 USE Rsda ALIAS da &表表Rsda的别名的别名就是就是da USE Rsda &默认默认Rsda表的别名表的别名若选择了若选择了IN 0短语,表示在当前空闲的编号短语,表示在当前空闲的编号最小工作区上打开数据表。最小工作区上打开数据表。该命令只是在指定的工作区上打开数据表,该命令只是在指定的工作区上打开数据表,并不能改变当前工作区。改变当前工作需要单并不能改变当前工作区。改变当前工作需要单独的命令。独的命令。一旦一个工作区上打开了一个数据表,数据一旦一个工作区上打开了一个数据表,数据表就和该工作区建立起对应关系,所以打开数表就和该工作区建立
33、起对应关系,所以打开数据表后可以用数据表的别名来代替工作区别名。据表后可以用数据表的别名来代替工作区别名。3.7.2 工作区的选择和使用工作区的选择和使用 1. 选择工作区 (1) 利用“数据工作区窗口选择工作区 选择窗口菜单中的数据工作期命令,或单击常用工具栏中的数据工作期窗口按钮,翻开数据工作期窗口。 这时默认当前工作区为1。单击翻开按钮选择一个数据表打开。若再次单击翻开按钮,可以依次在其它工作区打开其它数据表,并且可以用显示的别名选择工作区。 在数据工作期窗口还可以浏览各工作区打开的数据表,还可以关闭他们。 (2) 利用利用SELECT命令选择工作区命令选择工作区 格式格式SELECT
34、| 阐明:选择当前工作区,选择的工作区中阐明:选择当前工作区,选择的工作区中可以是在前面已经打开了数据表,也可以可以是在前面已经打开了数据表,也可以是未曾打开表。是未曾打开表。例:例:USE Rsda &默认在默认在1号工作区打开号工作区打开Rsda.dbf SELECT d &选择选择4号工作区为当前工作区号工作区为当前工作区 USE Rsgl &在当前在当前4号工作区打开号工作区打开Rsgl.dbf USE Rsgz ALIAS gz &在当前在当前4号工作区打开号工作区打开Rsgz,同时关闭,同时关闭Rsgl SELECT 1 &选择选择1区为当前工作区区为当前工作区 LIST & 显示
35、当前显示当前1号工作区数据表号工作区数据表Rsda的记录的记录 SELECT gz & 或或SELE 4,SELE d ,但不能但不能SELE Rsgz LIST &显示显示Rsgz的记录的记录 SELE Rsda &是否可以?为什幺?是否可以?为什幺? LIST ?SELECT() &给出当前工作区号函数,返回当前工作区号例:给出当前工作区号函数,返回当前工作区号例: USE Rsgl IN 10 ?SELECT() USE &关闭当前工作区上的数据表关闭当前工作区上的数据表 USE Rsgl IN 0 ?SELECT() 2在不同工作区打开同一个数据表在不同工作区打开同一个数据表 例例 S
36、ELE 1 USE Rsda USE Rsda ALIAS da IN 3 AGAIN SELE 2 USE Rsda AGAIN 3. 使用非当前工作区中表的数据使用非当前工作区中表的数据 方法是在非当前工作区的表的字段名前加注工方法是在非当前工作区的表的字段名前加注工作区别名或表的别名。格式为:作区别名或表的别名。格式为: - 或或 . 留意,这里的符号留意,这里的符号“-”是是“-”和和“”两个均为两个均为半角符号复合而成。半角符号复合而成。 例例 (rsgl(编号、部门名、姓名、性别、出编号、部门名、姓名、性别、出生日期、文化程度、职位、婚否生日期、文化程度、职位、婚否),Rsda(编
37、号、姓名、性别、工作日期、职编号、姓名、性别、工作日期、职称、简历、照片称、简历、照片) select 1 use rsgl use rsda in 2 sele 1 List 姓名姓名,部门名部门名, 出生日期出生日期, b-姓名姓名,b-工作日期工作日期 显示结果如下:显示结果如下: 在VFP中,表之间关联有临时关系和永久关系两种关联1. 设置表的临时关系(1) 利用数据工作期窗口建立表的临时关系3.7.3 数据表的关联数据表的关联123List 姓名姓名,部门名部门名, 出生日期出生日期, b-姓名姓名,b-工作日期工作日期 (2) 利用命令建立表之间的临时关系利用命令建立表之间的临时关
38、系 【格式】【格式】SET RELATION TO 关键字表达式关键字表达式|数值表数值表达式达式1 INTO 工作区别名工作区别名1|子表别名子表别名1 ,关键字表达式关键字表达式2|数值表达式数值表达式2 INTO 工作区别名工作区别名2|表别名表别名2 ADDITIVE 阐明:阐明: 建立临时关系以后,父表和子表记录指针的移动的规则是:建立临时关系以后,父表和子表记录指针的移动的规则是:父表指针每移动到一个记录,子表则按关键字表达式的值进行父表指针每移动到一个记录,子表则按关键字表达式的值进行索引查找,并将记录指针定位在相应记录上。若子表中没有记索引查找,并将记录指针定位在相应记录上。若
39、子表中没有记录和父表的当前记录相关联,子表的记录指针将指向录和父表的当前记录相关联,子表的记录指针将指向EOF;若;若子表中有多个记录和父表的当前记录相关联,则子表的记录指子表中有多个记录和父表的当前记录相关联,则子表的记录指针将指向第一个相匹配的记录。针将指向第一个相匹配的记录。 必须选择父表所在工作区为当前工作区,然后再使用本命令必须选择父表所在工作区为当前工作区,然后再使用本命令与非当前工作区中的数据表子表建立关联。与非当前工作区中的数据表子表建立关联。 选ADDITIVE项可使父数据表与子表建立关联时,原先已存在的关联仍然保留。如果不选用该项,则建立新关联时将取消原有关联。 子表必须按
40、关键字表达式中的关键字段建立索引,且被指定为主控索引。通常情况下,用两个表都具有的相同字段作为建立临时关系的关键字表达式。 不选任何可选项则取消已与当前表建立的关联。父表可以与多个子表建立关联。 【例】某书店有一个图书库存数据表【例】某书店有一个图书库存数据表Tskc.dbf,存放有该书店所有的图书信息,存放有该书店所有的图书信息,另有一个图书调价数据表另有一个图书调价数据表tstj.dbf,其中存,其中存放着图书调价后的新价格放着图书调价后的新价格 ,现要求编制程,现要求编制程序,用序,用Tstj.dbf中的单价数据更新中的单价数据更新Tskc.dbf中的单价数据。假设中的单价数据。假设Ts
41、tj.dbf数据表中的记数据表中的记录和录和Tskc.dbf中的记录是一一对应的,即中的记录是一一对应的,即凡是出现在凡是出现在Tskc.dbf中图书都调价了,则中图书都调价了,则可用如下的程序:可用如下的程序: select 1 use tskc select 2 use tstj index on 图书编号图书编号 tag tsbh set order to tsbh select 1 set relation to 图书编号图书编号 into b repl all 单价单价 with b-单价单价 list 2设置表间的永久关系设置表间的永久关系 永久关系是存储在数据库文件(永久关系是存
42、储在数据库文件(.DBC中的数据表之间中的数据表之间的关系,它作为数据库的组成部分一直保留。它不像临时的关系,它作为数据库的组成部分一直保留。它不像临时关系每次打开数据表时都要重新建立。关系每次打开数据表时都要重新建立。 数据库中的数据表建立永久关系后,借助这种关系不仅仅数据库中的数据表建立永久关系后,借助这种关系不仅仅从当前选定的表中访问数据,而且还可以访问相关数据表从当前选定的表中访问数据,而且还可以访问相关数据表中的数据。中的数据。 当在查询设计器,视图设计器、表单设计器中的数据环境当在查询设计器,视图设计器、表单设计器中的数据环境中使用这些数据表时,这些永久关系将作为这些表之间的中使用
43、这些数据表时,这些永久关系将作为这些表之间的默认连接关系自动出现。而且以后使用查询文件,视图文默认连接关系自动出现。而且以后使用查询文件,视图文件及表格文件时,这些永久关系也自动把相关数据表连接件及表格文件时,这些永久关系也自动把相关数据表连接起来。起来。 与永久关系的作用不同,临时关系是控制表之与永久关系的作用不同,临时关系是控制表之间记录指针的连动关系。永久关系不具有这个间记录指针的连动关系。永久关系不具有这个功能,而是使相关数据建立连接关系。功能,而是使相关数据建立连接关系。 在永久关系中还可以建立参照完整性,对各数在永久关系中还可以建立参照完整性,对各数据表之间进行完整性约束。据表之间
44、进行完整性约束。 表之间关系的类型表之间关系的类型 表与表之间的关系实际上就是,按照某一关键字表与表之间的关系实际上就是,按照某一关键字建立的几个数据表之间相关记录的关系。建立的几个数据表之间相关记录的关系。 根据一个表中的记录与另一表中相关记录之间的根据一个表中的记录与另一表中相关记录之间的对应数量关系,关系的类型可分为:对应数量关系,关系的类型可分为: 一对一关系:是指一个表中的一个记录与另一表一对一关系:是指一个表中的一个记录与另一表中的唯一记录相关联。中的唯一记录相关联。 一对多关系:是指一个表中的一个记录与另一表一对多关系:是指一个表中的一个记录与另一表中的多个记录相关联,但另一表中
45、的一个记录则中的多个记录相关联,但另一表中的一个记录则只能与这个表中的唯一记录相对应。只能与这个表中的唯一记录相对应。 在关系数据库设计时,应避免将表设计成在关系数据库设计时,应避免将表设计成“多多对多关系对多关系”,通过数据规范化设计将,通过数据规范化设计将“多对多多对多关系转换成关系转换成“一对多关系来建立数据库。一对多关系来建立数据库。也可以在两个表间建立一个连接表,两个表分也可以在两个表间建立一个连接表,两个表分别和连接表建立一对多关系,间接实现多对多别和连接表建立一对多关系,间接实现多对多关系关系 (1建立表间的永久连接建立表间的永久连接 建立建立Rsbm与与Rsgl的关联、的关联、
46、Rsgl与与Rsda的关联。的关联。Rsgl与与Rsda根据编号建立一对根据编号建立一对一的关联;由于在一的关联;由于在Rsbm中一个部门可以中一个部门可以在在Rsgl中找到多条记录,所以两个数据中找到多条记录,所以两个数据表之间的关系为一对多的关系。两个表已表之间的关系为一对多的关系。两个表已根据共同字段根据共同字段“部门名建立了索引,部门名建立了索引,“一方一方Rsbm建立了以建立了以“部门名部门名为索引标识的主索引,为索引标识的主索引,“多方建立了以多方建立了以“部门名为索引标识的普通索引。部门名为索引标识的普通索引。 在数据库设计器中建立永久关系 (2) 编辑数据表之间的关联 永久关系
47、永久关系临时关系临时关系区别区别作用作用主要用来设置参照完整性主要用来设置参照完整性控制两张打开的表之间记录的访问控制两张打开的表之间记录的访问创建方创建方法法创建主表的创建主表的主索引或候选索主索引或候选索引引 创建子表的创建子表的任意任意类型类型索引索引 基于索引创建永久关系基于索引创建永久关系打开两张要创建临时关系的表打开两张要创建临时关系的表 设置子表的主控索引设置子表的主控索引 选择主表工作区选择主表工作区 用用SET RELATIONSET RELATION 命令创建临时关命令创建临时关系系创建条创建条件件只能在同一数据库中的表之只能在同一数据库中的表之间创建间创建可以在任意库表、
48、自由表、视图、可以在任意库表、自由表、视图、临时表之间创建临时表之间创建主表数主表数一张表可以作为多张永久关一张表可以作为多张永久关系的子表,即一张子表可以系的子表,即一张子表可以有多张主表有多张主表一张表只能作为一张临时关系的子一张表只能作为一张临时关系的子表表生命期生命期永久存储在数据库文件中永久存储在数据库文件中随表的关闭而解除随表的关闭而解除联系联系创建永久关系或临时关系的基础是两张表之间确实存在着关系创建永久关系或临时关系的基础是两张表之间确实存在着关系 VFPVFP根据表之间的永久关系在表单或报表的数据环境中自动创建临根据表之间的永久关系在表单或报表的数据环境中自动创建临时关系时关
49、系 一张主表可以有多张子表一张主表可以有多张子表3.8 管理数据库 3.8.1 使用多个数据库 1在项目中新建或添加数据库 2从项目中移去数据库 3打开多个数据库 4设置当前数据库5访问其它数据库中的表访问其它数据库中的表 OPEN DATABASE Rsgl.dbc &打开数据库打开数据库Rsgl OPEN DATABASE Example.dbc &打开打开Example并自动将其设为当前数据库并自动将其设为当前数据库 ?DBC() &显示当前数据库名显示当前数据库名 SELECT 4 &选择第选择第4工作区为当前工作区工作区为当前工作区 USE Rsgl!Rsda.dbf &在第在第4工作区上打开数据表工作区上打开数据表 BROWSE &浏览当前工作区第浏览当前工作区第4工作区上的数据工作区上的数据 SELE 2 &选择第选择第2工作区为当前工作区工作区为当前工作区 ?Rsda.姓名姓名 &显示显示Rsda数据表的当前记录的姓名字段数据表的当前记录的姓名字段 6关闭数据库关闭数据库 SET DATABASE TO Rsgl CLOSE DATABASE 另外,用另外,用CLOSE A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年河北省高三上学期省级联测化学试题及答案
- 跨国公司数据退役合规方案
- 地下人防消防演练实施方案
- 智慧工地智能监控与警报方案
- 幼儿园水上活动安全保障应急预案
- 公共场所饮用水管理规范
- 冬令春荒救助工作自查报告
- 科技公司员工暑期读书方案
- 城市建设突发环境事件应急预案
- 传奇故事演讲稿
- 2023年工程项目全过程跟踪审计实施方案(4篇)
- 公寓de全人物攻略本为个人爱好而制成如需转载注明信息
- 数据中心机房建设方案课件
- 二年级群文阅读:读:童话中的不可思议-课件
- Citect软件培训教程课件
- 产品质量法-产品质量法课件
- 水资源管理知识竞赛参考题(100题)
- 四年级上册道德与法治4《少让父母为我操心》教学反思三篇
- 护理工作中的语言沟通课件
- 冲击钻施工工艺及步骤
- 环保知识竞赛考试题库200题(含答案)
评论
0/150
提交评论