《VFP第3章数据管理与维护-多区操作.ppt》由会员分享,可在线阅读,更多相关《VFP第3章数据管理与维护-多区操作.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/27/20231在当前工作区打开一个表文件后,如果再打开第在当前工作区打开一个表文件后,如果再打开第二个表文件,系统将自动先关闭第一个表文件后,二个表文件,系统将自动先关闭第一个表文件后,再打开第二个表文件。这种操作称为再打开第二个表文件。这种操作称为“单表操作单表操作”。在实际运用中,常常需要对两个或两个以上的表在实际运用中,常常需要对两个或两个以上的表文件同时操作,这涉及到多表操作。多表操作是文件同时操作,这涉及到多表操作。多表操作是以工作区为基础的。以工作区为基础的。3.43.4多工作区数据表的操作多工作区数据表的操作1/27/20232一一.工作区与数据工作期工作区与数据工作期1.
2、1.多工作区多工作区工作区工作区:系统为当前正在使用的数据表文件开辟系统为当前正在使用的数据表文件开辟的一个内存区域。的一个内存区域。系统提供系统提供3276732767个工作区,每个工作区中的表都个工作区,每个工作区中的表都有自己的记录指针,各个工作区彼此独立,数据有自己的记录指针,各个工作区彼此独立,数据互不干扰。在任何时刻,操作对象只能占用一个互不干扰。在任何时刻,操作对象只能占用一个工作区,这个工作区称工作区,这个工作区称“当前工作区当前工作区”。启动启动Visual FoxPro Visual FoxPro 后系统默认后系统默认1 1号工作区为当号工作区为当前工作区。前工作区。1/2
3、7/20233别名别名:建立数据表文件时要为其命名,打开该表建立数据表文件时要为其命名,打开该表文件后,还可以为它另取一个别名。别名代表工文件后,还可以为它另取一个别名。别名代表工作区号或表文件名。作区号或表文件名。系统约定前系统约定前1010个工作区的别名分别为个工作区的别名分别为:A:A、B B、C C、D D、E E、F F、G G、H H、I I、J J。利用命令利用命令USE USE ALIAS ALIAS 可以为表可以为表文件指定别名。文件指定别名。例例:USE USE 学生学生 ALIAS XS ALIAS XS&XS&XS是学生是学生.DBF.DBF的别的别名名 不指定别名,系
4、统默认表文件的主名为别名。不指定别名,系统默认表文件的主名为别名。例例:USE USE 教师教师&教师也是教师教师也是教师.DBF.DBF的别名的别名 1/27/20234在主工作区上访问其他工作区上的数据,或调用在主工作区上访问其他工作区上的数据,或调用其它工作区中表文件字段时,必须使用别名调用其它工作区中表文件字段时,必须使用别名调用格式以示区别。格式以示区别。别名调用格式别名调用格式:别名别名.字段名字段名 或或 别名别名-字段名字段名 工作区命令工作区命令 命令命令:SELECTSELECT|SELECT 0 SELECT 0 选择当前没有使用过的最小工作选择当前没有使用过的最小工作区
5、号为当前工作区的区号。区号为当前工作区的区号。函数函数SELECT()SELECT()返回当前工作区的区号。返回当前工作区的区号。1/27/20235例例:工作区、别名示例工作区、别名示例CLOSE ALL CLOSE ALL?SELECT()&?SELECT()&显示显示:1:1 USE USE 学生学生 SELECT 2 SELECT 2 USE USE 教师教师 DISP A.DISP A.姓名姓名,A.,A.性别性别,姓名姓名 SELECT 0 SELECT 0 USE USE 课程课程DISP A.DISP A.姓名姓名,A.,A.性别性别,B.,B.姓名姓名,C.,C.课程名课程名
6、1/27/20236二二.多表的间的关系多表的间的关系1.1.关联的概念关联的概念在单表操作下,各个工作区表文件的记录指针彼在单表操作下,各个工作区表文件的记录指针彼此独立,互不影响。此独立,互不影响。关联是在两个表文件的记录指针之间建立一种关关联是在两个表文件的记录指针之间建立一种关系,当一个表的记录指针移动时,与之关联的另一系,当一个表的记录指针移动时,与之关联的另一个表的记录指针也随之作相应的移动。个表的记录指针也随之作相应的移动。1/27/202372.2.关联条件关联条件建立关联的两个表,一个父表,一个是子表。建立关联的两个表,一个父表,一个是子表。首先为子表按关键字建立索引,当父表
7、的记录指首先为子表按关键字建立索引,当父表的记录指针移动时,子表的记录指针自动移动到满足关联条针移动时,子表的记录指针自动移动到满足关联条件的记录上。件的记录上。1/27/202383.3.利用命令建立关联利用命令建立关联 命令命令:SET RELATION TOSET RELATION TOINTOINTO,INTOINTO,ADDITIVE2,ADDITIVE功能功能:当前表为父表与一个或多个子表建立关联。当前表为父表与一个或多个子表建立关联。被关联表的字段必须预先索引。被关联表的字段必须预先索引。选择选择ADDITIVEADDITIVE,保留先前已建立的关联,再建立,保留先前已建立的关联
8、,再建立新关联。否则,新关联将取消以前建立的关联。新关联。否则,新关联将取消以前建立的关联。不带任何参数的不带任何参数的SET RELATION TO SET RELATION TO 取消当前父表取消当前父表与子表的关联。与子表的关联。1/27/20239例例:利用学生利用学生.DBF.DBF、选课、选课.DBF.DBF、课程、课程.DBF.DBF显示学生选课显示学生选课的课程名与该课程的成绩。的课程名与该课程的成绩。分析分析:学生学生.DBF.DBF与选课与选课.DBF.DBF通过学号建立关联,课程通过学号建立关联,课程.DBF.DBF与选课与选课.DBF.DBF通过课程号建立关联。选课表作
9、主表,通过课程号建立关联。选课表作主表,在建立第二个关联时,保留第一个关联。在建立第二个关联时,保留第一个关联。1/27/202310SELECT 1 SELECT 1 USE USE 学生学生 INDEX ON INDEX ON 学号学号 TAG xh TAG xh SELECT 2 SELECT 2 USE USE 课程课程 INDEX ON INDEX ON 课程号课程号 TAG ckh TAG ckh SELECT 3 SELECT 3 USE USE 选课选课&选课选课.DBF.DBF为父为父表表 SET RELATION TO SET RELATION TO 学号学号 INTO A
10、 INTO A SET RELATION TO SET RELATION TO 课程号课程号 INTO B ADDITIVE INTO B ADDITIVEBROWSE FIELDS A.BROWSE FIELDS A.姓名姓名,B.,B.课程名课程名,成绩成绩1/27/202311例例:利用利用GZ1.DBFGZ1.DBF、GZ2.DBFGZ2.DBF、GZ3.DBFGZ3.DBF三个表文件,计三个表文件,计算算GZ3.DBFGZ3.DBF中的课时费和工资总额。中的课时费和工资总额。(课时费课时费=课时课时*40*40,工资总额,工资总额=基本工资基本工资+课时费课时费)。1/27/2023
11、12SELE 1SELE 1USE GZ1USE GZ1INDEX ON INDEX ON 姓名姓名 TAG XM1 TAG XM1SELE 2SELE 2USE GZ2USE GZ2INDEX ON INDEX ON 教师号教师号 TAG JS2 TAG JS2SELE 3SELE 3USE GZ3USE GZ3SET RELATION TO SET RELATION TO 教师号教师号 INTO B;INTO B;REPLACE ALL REPLACE ALL 课时费课时费 WITH B.WITH B.课时数课时数*40*40LIST OFFLIST OFFSET RELATION TO
12、SET RELATION TO 姓名姓名 INTO A ADDI;INTO A ADDI;REPLACE ALL A.REPLACE ALL A.工资总额工资总额 WITH A.WITH A.基本工资基本工资+C.+C.课时费课时费SELE 1SELE 1LIST OFF LIST OFF 1/27/202313三三.表间的连接表间的连接表文件之间的连接称为物理连接。物理连接是将表文件之间的连接称为物理连接。物理连接是将两个表的相关字段组合构成一个新表。两个表的相关字段组合构成一个新表。命令命令:JOIN WITHJOIN WITHTOTOFORFORFIELDSFIELDS被连接的两个表文件
13、,一个是当前表,另一个是被连接的两个表文件,一个是当前表,另一个是在别名中指定的工作区表。在别名中指定的工作区表。FORFOR 是必选项,它是构成连接的条件。是必选项,它是构成连接的条件。1/27/202314例例:由表由表TU-1.DBFTU-1.DBF和和TU-2.DBFTU-2.DBF,生成表,生成表TU-3.DBFTU-3.DBF,表,表内容为内容为:书名书名,出版社出版社,单价单价,册数,金额。册数,金额。1/27/202315SELECT 2SELECT 2USE TU-2USE TU-2SELECT 1SELECT 1USE TU-1USE TU-1JOIN WITH B TO
14、TU-3 FOR JOIN WITH B TO TU-3 FOR 书名书名=B.=B.书名书名 FIELDS FIELDS 书名书名,出版社出版社,单价单价,B.,B.册数册数,B.,B.金额金额SELECT 3SELECT 3USE TU-3USE TU-3BROWSEBROWSE说明:说明:TU-1.DBFTU-1.DBF和和TU-2.DBFTU-2.DBF分别有分别有1010条记录,但条记录,但只有只有9 9条记录的书名相同。按书名条件连接时,条记录的书名相同。按书名条件连接时,TU-3.DBFTU-3.DBF中只生成中只生成9 9条记录。条记录。1/27/202316四四.表文件的更新
15、表文件的更新用一个表文件数据修改另一个表文件数据,不必用一个表文件数据修改另一个表文件数据,不必在两表之间建立关联。在两表之间建立关联。命令命令:UPDATE ONUPDATE ONFROMFROMREPLACEREPLACE WITH WITH,WITH WITH RANDOM2RANDOM功能功能:用用 表文件的表达式值更新当前表文件表文件的表达式值更新当前表文件记录的字段值。记录的字段值。1/27/202317说明说明:为两表必须共有字段。用为两表必须共有字段。用 表表的字段更新当前表的字段。的字段更新当前表的字段。选择选择RANDOMRANDOM,要求当前表索引,否则,两个,要求当前表
16、索引,否则,两个表都必须按表都必须按 索引。索引。如果如果 表文件中有多个记录相同关键字段表文件中有多个记录相同关键字段值,则最后一条记录对当前表的更新有效;如果值,则最后一条记录对当前表的更新有效;如果当前表中有多个相同关键字段的记录,则只更新当前表中有多个相同关键字段的记录,则只更新第一条记录。第一条记录。1/27/202318例例:首先复制教师首先复制教师.DBF.DBF得到教师得到教师_1.DBF_1.DBF,给教师,给教师-1.DBF1.DBF增加一个字段增加一个字段 课程号课程号,并用授课,并用授课.DBF.DBF表的表的 课程号课程号 更新教师更新教师_1.DBF_1.DBF的的
17、 课程号课程号。1/27/202319CLOSE ALLCLOSE ALLSELECT 1SELECT 1USE USE 教师教师COPY TO COPY TO 教师教师_1_1USE USE 教师教师_1_1ALTER TABLE ALTER TABLE 教师教师_1 ADD _1 ADD 课程号课程号 C(4)C(4)LISTLISTINDEX ON INDEX ON 教师号教师号 TAG JSH1 TAG JSH1SELECT 2SELECT 2USE USE 授课授课INDEX ON INDEX ON 教师号教师号 TAG JSH2 TAG JSH2SELECT 1SELECT 1UPDATE ON UPDATE ON 教师号教师号 FROM FROM 授课授课 REPLACE REPLACE 课程号课程号 WITH B.WITH B.课程号课程号 RANDOM RANDOMLISTLIST1/27/2023201.1.本章习题;本章习题;2.2.熟练掌握多工作区的概念;熟练掌握多工作区的概念;3.3.熟练掌握多表之间关联的概念;熟练掌握多表之间关联的概念;4.4.熟练掌握多表关联的基本操作。熟练掌握多表关联的基本操作。习题与上机实验习题与上机实验1/27/202321
限制150内