模块三 数据库设计(6)

2019-02-14 21:36

Visual FoxPro 程序设计

子任务九 表的查询

在数据处理过程中,我们要求从庞大的数据t_book中找出电子工业出版社出版的图书,即查找出符合某种条件或要求的记录,即查询操作。VFP中提供了对表记录的两类查询命令:顺序查询和索引查询。 1、顺序查询

格式:LOCATE FOR <逻辑表达式1> [<范围>] [WHILE <逻辑表达式2>] 功能:在表中指定的范围内查找满足条件的第一条记录。

说明:若找到符合条件的第一条记录,则将记录指针指向该记录,此时FOUND()函数返回值为.T. 。否则,记录指针指向<范围>的底部,若<范围>为ALL则记录指针执行文件结束标志,此时FOUND()函数返回值为.F.。

若继续查找符合该条件的其余记录,可使用 CONTINUE 命令。CONTINUE命令必须在LOCATE命令之后使用。

该命令可以在没有打开任何索引文件的无序的表中进行查询操作,但是在数据良庞大的表中进行查询时速度慢。

在表t_book中查找出版社是\清华大学出版社\的图书。 index on 出版社 tag cbs set order to cbs

locate for 出版社=\清华大学出版社\display continue display 2、索引查询

无论是否有打开的索引文件都可以用LOCATE命令进行顺序查找,但打开索引文件后还可以用FIND命令和SEEK命令进行快速查询。

(1) FIND命令

格式: FIND <字符串>/<数值常量>

功能:在表文件和有关索引文件打开的情况下,查找出索引关键字值与所指定的<字符串>或<数值常量>相匹配的第一条记录。

说明:

如果找到,则把记录指针指向该记录,并且将FOUND()函数的值为.T.。

如果没有找到与其相符的记录,则将记录指针指向文件结束标志,且将FOUND()函数的值臵为.F.,将EOF()函数的值臵为.T.。

如果有多个与关键字匹配的记录,则记录指针定位于其中的第一条记录上。由于已经打开相关索引文件,所以关键字段值相同的记录排列在一起,若查询后续记录,可用SKIP。

<字符串>可以是字符串常量,此时不需使用定界符。也可以使用字符型变量,但需要用宏代换函数&进行转换。

26 Page 模块三 数据库设计

执行SET EXACT OFF命令后,用FIND命令查找字符串时,字符串可以是索引表达式值的全部或是从首字符开始的一个子串。执行SET EXACT ON命令后,用FIND命令来查找字符串,则字符串只能和索引表达式的值精确匹配。

边学边练 在表t_book中查找图书编号是\的图书。 index on图书编号 tag tsbh set order to tsbh find T0005 ?found() display

(2 )表达式查询命令 命令:SEEK <表达式>

功能:在表文件和有关索引文件打开的情况下,查找出索引关键字值与所指定的<表达式>的值相匹配的第一条记录。

说明:SEEK命令可查找字符型、数值型、日期型、逻辑型表达式的值。SEEK命令中的表达式必须使用相应的定界符,以确定表达式类型。

边学边练

在表t_book中查找图书编号是\的图书。 index on图书编号 tag tsbh set order to tsbh seek \?found() display

子任务十 统计与计算

在sf_books的数据管理过程中,我们经常需要对各出版社的图书进行统计计算、对单价按出版社进行求和、求平均值等,该怎么办呢?VFP给我们提供了这方面的命令。

1、统计记录数

命令:COUNT [TO<内存变量>][<范围>][FOR<逻辑表达式1>][WHILE<逻辑表达式2>] 功能:统计当前表中指定范围内满足条件的记录个数。

Page 27

Visual FoxPro 程序设计

说明:当缺省所有短语时计算所有记录的个数。使用TO <内存变量>可将统计的结果保存到指定的内存变量,否则将统计结果显示在屏幕上。使用SET DELETE OFF,则加删除标记的记录将被统计在内。

统计清华大学出版社的图书个数

count for 出版社=\清华大学出版社\2、求和

命令:SUM [<表达式表>][TO <内存变量名表>][<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>]

功能:将指定范围内满足条件的记录,按指定的各个表达式分别求和。

说明:<表达式表>是由数值型字段组成,若省略,则对当前表的所有数值型字段求和。TO <内存变量表>:将求和结果按顺序存入指定内存变量,<内存变量表>中的变量的个数不得少于<表达式表>中表达式的个数。省略范围和条件短语则对所有记录进行操作。

对出版社是清华大学出版社的图书的单价求和。 sum 单价 for 出版社=\清华大学出版社\3、求平均值

命令:AVERAGE [<表达式表>][TO <内存变量表>][<范围>][FOR <逻辑表达式1>] [WHILE <逻辑表达式2>]

功能:对当前表中指定范围内满足条件的记录的数值型字段求算术平均值。 说明:选项用法同SUM 求合计命令

对出版社是清华大学出版社的图书的单价求平均值。 AVERAGE 单价 for 出版社=\清华大学出版社\。

拓展知识 工作区与多表使用

在前面我们对表的操作中,每次只打开一个表。例如打开t_book.dbf与t_reader.dbf,但当t_book.dbf打开时,t_reader.dbf自动关闭。还有在表单操作中,在实际应用中很多情况都需要多表同时打开操作,同时从多表中获取有价值的数据。这类问题VFP用工作区方式给予解决。

1、工作区

VFP允许一个工作区只能打开一个表,但VFP提供32767个工作区,因此就可以打开多个表。

(1)指定表的别名

格式:USE [<表名>] [ALIAS <别名> | IN 工作区号]

功能:在打开表的同时为表指定一个别名,若省略了ALIAS<别名>子句,默认表名与表的别名相同。别名的命名规则与表名相同。或在打开表的同时指定工作区,工作区号为0~32767。

说明:

28 Page 模块三 数据库设计

①工作区号取值可为0~32767,若取0,则选择一个未使用的最小编号工作区为当前工作区。工作区号1~10也可用A~J字母表示。

②SELECT()函数可以返回当前工作区号。

(2)当前工作区为正在使用的工作区,可以通过“数据工作区窗口”或用SELECT命令将任何一个工作区设臵为当前工作区,其格式为:

SELECT <工作区号> |<别名> 如果要操作非当前工作区中的表,可以将其他工作区选为当前工作区,或在命令中强行指定工作区,其格式为:

IN<工作区>| <别名>

(3) ALIAS函数,测试指定工作区中标的别名,其格式为:

ALIAS([工作区号]) (4)关闭工作区中的表

格式:CLOSE ALL

功能:关闭所有工作区打开的表并选择工作区1位当前工作区。

边学边练 在不同的工作区分别打开t_book.dbf、t_reader.dbf然后进行浏览。结果如3-27所示。 SELECT 1

USE t_book ALIAS 图书表 TT1=ALIAS()

BROWSE TITLE \当前的工作区的别名为: &TT1\SELECT 2

USE t_reader ALIAS 读者表 TT2=ALIAS()

BROWSE TITLE \当前的工作区的别名为: &TT2\

CLOSE ALL &&若用USE只关闭当前工作区的表

图3-27 不同的工作区打开t_book.dbf、t_reader.dbf的浏览结果 2.多表使用 (1)表的关联

Page 29

Visual FoxPro 程序设计

表的关联是指在两个表之间,当一个表(父表)的记录指针移动时,另一个表(子表)的记录指针根据父表的要求(也称关联条件或称关联表达式)指向子表的相应记录上。VFP用这种关联控制或将表之间建立关系从而实现多表同时使用。在多表之间同时获取有价值的数据的目的。

(2)关系

①一对一关系

由关联条件,父表只有一条记录与子表只有一条记录相对应。 ②一对多关系

由关联条件,父表只有一条记录与子表多条记录相对应。 ③多对一关系

由关联条件,父表有多个记录与子表只有一条记录相对应。 ④多对多关系

由关联条件,父表有M条记录与子表有N条记录相对应。 表之间的多对多关系问题处理起来较为复杂,常是将其中的一个表分解,然后形成一对多或多对一关系。

(3)用命令建立关联

格式:SET RELATION TO [<关联表达式1>] INTO <别名1>, …<关联表达式n> INTO <别名N> [ADDITIVE]

功能:以当前表为父表<关联表达式1>为关联条件与别名1表为子表建立关联,以<关联表达式2>为关联条件与别名n为子表建立关联。

说明:

①若无任何选项,将已建立的关联删除。

②[ADDITIVE]子句是在建立关联时,保留以前建立的关联。

边学边练 用命令建立关系的应用。 CLEAR SELECT 1 USE 学生

INDEX ON 学号 TAG T1 ADDI SELECT 2 USE 学生成绩

INDEX ON 学号 TAG T2 ADDI SELECT 1

SET RELATION TO 学号 INTO 学生成绩 ADDITIVE LIST 学号, 姓名, B->数学, B->VFP, B->英语

BROWSE FIELDS 学号, 姓名, B->数学, B->VFP, B->英语 SET RELATION TO CLOSE ALL

30 Page


模块三 数据库设计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:六年级下册词语(读读写写读读记记)拼音

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: