新浪博客

计算机二级vf_第3章  Visual FoxPro数据库及其操作

2014-07-06 08:08阅读:

计算机二级VF


第3章 Visual FoxPro数据库及其操作


1.1 表的基本维护

在Visual FoxPro中,根据表是否属于某数据库,可以把表分为数据库表和自由表两类。在本节课程中只介绍自由表的基本维护,本节课的关键词有:create、use、close all、modify structure、go、skip。

1.1.1 字段

所谓字段就是表中的列(关系中的属性),一个表可由若干个字段构成,字段在表中出现时应包括不可或缺的3部分内容:字段名、字段类型、字段宽度。
用户可以根据实际需要来选择合适的类型及宽度,常见的字段类型及宽度见表 3.1。
3.1常见的字段类型及宽度
名称
表示字母
宽度
实例
字符型
C
254B(最大)
姓名、地址等
数值型
N
20B(最大)
成绩、工资等
整型
I
4B(固定)
年龄等
日期型
D
8B(固定)
出生日期、签订日期等
逻辑型
L
1B(固定)
.T.(真)、.F.(假)
备注型
M
4B(固定)
大量字符
通用型
G
4B(固定)
OLE对象

1.1.2 新建表

在Visual FoxPro中新建表的常用方式有2种,即菜单操作和命令操作方式。
1.菜单操作方式
在Visual FoxPro中,建立文件可从“文件”菜单项中选择“新建”命令,然后根据系统提供的相关窗口、对话框以及提示信息来完成相应的操作。
2.命令操作方式
格式:create 表文件名
功能:创建一个指定名称的表文件,打开“表设计器”窗口,后续的操作与在菜单操作方式建立表的操作相同。

1.1.3 为表输入记录

在表结构定义结束后,如果选择了图 3.1所示对话框中的“是”按钮,就可以为表中直接输入任意多条记录。

3.1 是否输入记录对话框

1.1.4 表的打开

任何文件经打开后才能对其操作,表文件也不例外。打开表文件常见的方法有:
1.菜单操作方式
选择“文件”菜单下的“打开”命令,系统弹出“打开”对话框,在该对话框中先选择要打开的表文件,然后单击“确定”按钮即可。
2.命令操作方式
格式:use 表文件名 [noupdate][exclusive|shared]
功能:打开指定的表文件。noupdate指定以只读方式打开表,exclusive指定以独占方式打开表,shared指定以共享方式打开表。

1.1.5 表的关闭

关闭表的操作大多都是用命令来实现的。
①格式1:use
功能:关闭当前使用的表。
②格式2:close all
功能:关闭所有文件。

1.1.6 修改表结构

当已定义的表结构不能满足使用需要时,可以对表结构进行修改。对表结构的修改是依赖于表设计器完成的,当表打开后可以从“显示”菜单中选择“表设计器”命令,也可以用modify structure命令来调用“表设计器”窗口。

1.1.7 记录指针的定位(移动)

对表中记录处理时,首先要将记录指针u(指示记录的标记)定位在该记录上,然后才能进行相关操作。记录指针正在指向的记录为当前记录。利用命令方式进行记录指针定位的方法有:
1.用go命令绝对定位
①格式1:go n
功能:将记录指针直接定位到记录号为n的记录上。
②格式2:go top
功能:将记录指针定位在表中的第一条记录上。
③格式3:go bottom
功能:将记录指针定位在表中的最后一条记录上。
2.用skip命令相对定位
格式:skip n
功能:从当前记录开始(含当前记录在内),将记录指针向下()或向上(-)移动的次数(n)。skip是按钮记录的逻辑顺序定位的,即如果使用索引,则skip是按索引的顺序定位的。n如果是正数,可以省略,其中skip 1相当于skip。

1.2 对记录的操作

对记录的操作主要包括显示、增加、删除和修改。本节课的关键词有:display、list、append、delete、pack、zap、replace。

1.2.1 显示记录

显示记录的命令是list和display,在这两个命令后还可以出现其他子句,命令格式为:
list|display [范围词][fields 字段名列表][for 表达式][to file 文本文件名]
1.list与display
当没有范围词和筛选条件时,list默认显示表中的所有记录,而display只负责显示当前记录。
2.范围词
范围词是对表中记录数目多少所做的限定。在Visual FoxPro中范围词有4个:
①all
all表示所有记录。
例3.1 显示“学生”表中的所有记录。
list
等价于:
display all
注:本节中操作的表对象均为“学生”表。
②next n
next n表示从当前记录开始(含当前记录在内)向下连续的n条记录。
例3.2 显示记录号为2、3、4的3条记录。
go 2
list next 3
等价于:
go 2
display next 3
注:当list和display命令后出现范围词子句或for子句时,它们的操作是等价的,所以后文只以list为例进行介绍,不再书写等价命令。
③rest
rest表示从当前记录开始(含当前记录在内)以后所有的记录。
例3.3 显示记录号为3及其以后的所有记录。
go 3
list rest
④record n
record n表示记录号为n的记录(仅指1条)。
例3.4 显示表中记录号为5的记录。
list record 5
3.fields(投影)
投影是从原来的表中提取个别的列从而产生一个新表的操作。Visual FoxPro中使用fields子句来实现投影操作。
例3.5 显示学生的姓名、性别和出生日期信息。
在命令窗口中输入命令:
list fields 姓名,性别,出生日期
4.for(选择)
选择是从原表中筛选出符合条件记录行的操作, Visual FoxPro中使用for子句来表示选择运算。
例3.6 显示笔试及格的学生信息。
在命令窗口中输入命令:
list for 笔试>=60
在这里,笔试>=60是关系表达式,其中的60是常量;笔试是字段变量名,它可以从表中的每个行中引用该字段的值。可以看出,for只对能使表达式返回值为.T.的记录运算。
例3.7 显示性别为“男”的学生信息。
在命令窗口中输入命令:
list for 性别='男'
本例中,'男'是字符型常量,成对的半角双引号('')是字符型常量的定界符。
例3.8 显示在1985年5月1日(含)以后出生的学生信息。
在命令窗口中输入命令:
list for 出生日期>={^1985/05/01}
本例中,{^1985/05/01}日期型常量(严格格式),一对大括号({})是日期型常量定界符。
例3.9 显示是党员的学生信息。
在命令窗口中输入命令:
list for 是否党员=.T.
等价于:
list for 是否党员
本例中,.T.是逻辑型常量,一对句点(..)是逻辑型常量的定界符。
例3.10 显示笔试和机试都在80分以上(含)的学生信息。
在命令窗口中输入命令:
list for 笔试>=80 and 机试>=80
例3.11 显示性别为“男”或者是党员的学生信息。
在命令窗口中输入命令:
list for 性别='男' or 是否党员=.T.
例3.12 显示VF专业和NIT专业的男生信息。
在命令窗口中输入命令:
list for (专业='VF' or 专业='NIT') and 性别='男'
例3.13 显示男生的姓名、出生日期信息。
在命令窗口中输入命令:
list for 性别='男' fields 姓名,出生日期
等价于:
list fields 姓名,出生日期 for 性别='男'
5.to file
to file子句表示可以将list或display的显示结果存储到指定的文本文件中,文本文
件的扩展名是.txt。
例3.14 显示笔试和机试都及格的学生姓名、性别和出生日期,并将显示结果存储到“及格.txt”中。
list fields 姓名,性别,出生日期 for 笔试>=60 and 机试>=60 to file 及格

1.2.2 删除记录

在Visual FoxPro中,删除记录有逻辑删除和物理删除2种方式。
1.逻辑删除
格式:delete [范围词][for 表达式]
功能:逻辑删除只是在记录前加上删除标记(*),它并没有彻底的删除记录,这种删除是可以恢复的(去掉删除标记)。如果没有范围词和for子句,delete只删除当前记录。
2.逻辑删除记录的恢复
格式:recall [范围词][for 表达式]
功能:去掉记录前的删除标记。如果没有范围词和for子句,recall只恢复当前记录。
3.物理删除带有删除标记的记录
格式:pack
功能:从表中彻底删除已加上删除标记的所有记录,这种删除无法恢复。如果要从表中删除部分记录应先逻辑删除,然后物理删除。
4.物理删除表中所有记录
格式:zap
功能:zap只是物理删除表中的所有记录,执行完命令后表结构依然存在。zap执行时与记录是否有删除标记无任何关系。
例3.15 物理删除“学生”表中笔试和机试任意一门不及格的学生记录。
delete for 笔试<60 or 机试<60
pack

1.2.3 修改记录

1.手工方式
2.直接修改的replace命令格式
格式:replace [范围词] 字段名with 表达式 [for 表达式]
功能:利用with后的表达式修改指定字段的值,如果不使用范围词和for子句,replace只对当前记录修改。
例3.16 给“学生”表增加“总分 n(3)”字段,然后计算每个学生的总分。
replace all 总分 with 笔试 机试
例3.17 给“学生”表增加“年龄 n(2)”字段,然后计算每个学生的年龄。
replace all 年龄 with year(date())-year(出生日期)
例3.18 给“学生”表中是党员的学生的总分加10分。
replace 总分 with 总分 10 for 是否党员=.T.

1.3 索引

1.3.1 索引概述

1.索引的概念
Visual FoxPro中的索引是一个由指向表文件记录的指针构成的文件,这些指针逻辑上按照索引关键字的值进行排序(升序或降序,系统默认为升序)。
索引文件和表的.dbf文件分别存储。若要根据特定顺序处理表中的记录,可以选择一个相应的索引,使用索引可以加速对表的查询操作。
2.索引文件的分类
索引文件的分类如图 3.2所示。

3.2 索引文件的分类
从图 3.2可以看出,Visual FoxPro中提供两类索引文件:独立索引文件和复合索引文件。
1.独立索引文件
独立索引文件是指一个索引文件中只能保存一个索引,其扩展名为.idx。
2.复合索引文件
复合索引文件可以存储多个索引,其扩展名为.cdx。复合索引文件中的每个索引用一个
索引标签来表示。
在Visual FoxPro中有一类特殊的复合索引为结构复合索引,它的文件名与相应的表
文件名相同,扩展名为.cdx。

1.3.2 独立索引

1.创建独立索引
格式:index on 表达式 to 索引文件名
功能:创建一个升序的独立索引文件,其扩展名为.idx。索引创建成功后,表中的记录将按钮索引的逻辑顺序进行排序。
2.关闭独立索引
格式:close index
功能:关闭当前的索引文件,但不关闭表文件。

1.3.3 结构复合索引

1.在表设计器中建立索引
在表设计器的“字段”选项卡中定义字段时就可以直接指定某些字段是否有索引项,用
鼠标单击定义索引的下拉列表框可以看到3个选项:无、升序和降序(默认为无)。如果选择了升序或降序,则在表设计器的“索引”选项卡中会出现一个普通索引,该索引的索引名和表达式相同(均为字段名)。
2.结构复合索引文件的特点
当在某表的表设计器中的“索引”选项卡中创建了多个索引方案时,系统会自动将这些方案压缩合成在一个基本名与表名相同的、以.cdx为扩展名的文件中,即结构复合索引文件。结构复合索引的特点有:
①随着表的打开而打开,关闭亦然;
②在一个结构复合索引文件中可包含多个索引方案,或索引关键字;
③在添加、更改或删除记录时自动维护索引。
3.主控索引方案的指定
尽管在一个结构复合索引文件中可包含多个索引方案,但在其中只能有任意一个索引方案起索引作用,这个索引方案就是主控索引方案。指定某索引方案为主控索引方案的命令格式为:
①set order to 索引方案序号
②set order to tag 索引名
4.索引方案的类型
在表设计器中定义索引时,可以看到索引的类型有4种:主索引(数据库表才有)、候选索引、惟一索引和普通索引。
①主索引
在指定字段或表达式中不允许出现重复值的索引,只有数据库表才能建立主索引。
建立主索引的字段可以视之为主关键字,一个表中只能有一个主关键字,即一个表中只能建立一个主索引。
②候选索引
候选索引和主索引具有相同的作用。
建立候选索引的字段可以视之为候选关键字,一个表中可以有多个候选关键字,即一个表中可以建立多个候选索引。
③惟一索引
建立索引的字段可以出现重复值,而在索引中只存储重复值中第一个出现的值。因此惟一索引的“惟一性”是指“索引项”的惟一。一个表中可以建立多个惟一索引。
④普通索引
普通索引也可以决定记录的处理顺序,它允许建立索引的字段中可以出现重复值。一个表中可以建立多个普通索引。
5.用命令创建索引方案
格式:index on 表达式 tag 索引名 [ascending|descending][unique|candidate]
功能:创建一个索引方案,多个索引方案可以在一个文件中。其中各子句的含义是:
①ascending或descending表示升序或降序索引,默认为升序;
②unique指明建立惟一索引;
③candidate指明建立候选索引。

1.4 查找

1.4.1 顺序定位查找

格式:locate for 表达式
功能:从表中的第1条记录开始向下顺序查找满足条件的记录,若有满足条件的记录则把记录指针定位在满足条件的第1条记录上;若没有则把记录指针定位到文件末尾。
如果要使指针指向下一条满足条件的locate条件的记录,使用continue命令。同样,如果没有记录满足条件,则把记录指针定位到文件末尾。
为了判断locate和continue命令是否找到了满足条件的记录,可以使用found()函数来判断,如果有满足条件的记录该函数返回.T.,否则返回.F;也可以用eof()函数来判断,如果有满足条件的记录该函数返回.F.,否则返回.T.。

1.4.2 使用索引快速定位

seek是利用索引快速定位的命令,常用格式是:
seek 表达式
其中表达式的值是索引项或索引关键字的值,seek在索引中的查找定位完成后同时会影响表中记录指针的定位(按记录号相同)。

1.5 数据库

在Visual FoxPro中,数据库是将有关系的表和数据库对象(如视图、连接等)集合在一起进行统一管理和组织的文件。数据库文件的扩展名是.dbc。

1.5.1 数据库的基本操作

1.新建数据库
在Visual FoxPro中,建立数据库文件的方法有:
①菜单操作方式
选择“文件”菜单中的“新建”命令,在弹出的“新建”对话框中选择“数据库”单选按钮,然后再单击“新建文件”按钮,出现“创建”对话框。在“创建”对话中输入数据库文件名,选择“保存”按钮,系统打开数据库设计器。
②命令操作方式
格式:create database 数据库名
功能:创建一个指定名称的数据库。使用命令建立的数据库是自动打开的,但不出现数据库设计器,用户可以用modify database来调用数据库的设计器。
2.打开数据库
在Visual FoxPro中,打开数据库文件的方法有:
①菜单操作方式
选择“文件”菜单下的“打开”命令,系统弹出“打开”对话框,在该对话选择要打开的数据库文件名,单击“确定”按钮打开数据库。
②命令操作方式
格式:open database 数据库名 [noupdate][exclusive|shared]
功能:打开一个指定名称的数据库。noupdate指定以只读方式打开数据库,exclusive指定以独占方式打开数据库,shared指定以共享方式打开数据库。
3.修改数据库
格式:modify database
功能:调用当前数据库的设计器。
4.关闭数据库
数据库文件操作完成后,应将其关闭以确保数据的完整和安全。关闭数据库的命令有:
①格式:close all
功能:关闭Visual FoxPro中打开的所有对象,如数据库、表和索引等。
②格式:close database
功能:仅关闭当前数据库及其中的对象。

1.5.2 数据库表与自由表

所谓数据库表,是指那些属于某数据库的表;相应地,自由表就是指那些不属于任何数据库的表(非数据库表)。
可以将自由表添加到数据中,使其成为数据库表,也可以将数据库表从数据库中移去,使其成为自由表。
与自由表相比,数据库表主要具有以下特点:

我的更多文章

下载客户端阅读体验更佳

APP专享