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。
对记录的操作主要包括显示、增加、删除和修改。本节课的关键词有: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 索引概述
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个选项:无、升序和降序(默认为无)。如果选择了升序或降序,则在表设计器的“索引”选项卡中会出现一个普通索引,该索引的索引名和表达式相同(均为字段名)。
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 顺序定位查找
格式: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 数据库表与自由表
所谓数据库表,是指那些属于某数据库的表;相应地,自由表就是指那些不属于任何数据库的表(非数据库表)。
可以将自由表添加到数据中,使其成为数据库表,也可以将数据库表从数据库中移去,使其成为自由表。
与自由表相比,数据库表主要具有以下特点: