3、VF数据库及其操作_第1页
3、VF数据库及其操作_第2页
3、VF数据库及其操作_第3页
3、VF数据库及其操作_第4页
3、VF数据库及其操作_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二级辅导VFP数据库程序设计全国计算机等级考试第三章Visual FoxPro数据库及其操作本章学习目标:了解并掌握Visual FoxPro数据库的建立和操作等内容,包括建立和管理数据库,建立和使用表,以及索引和完整性等方面的内容。重点:表的建立及使用,索引。难点:索引。3.1 VF数据库及其建立一、基本概念数据库表文件:.dbf文件数据库文件:.dbc文件数据库备注文件:.dct文件数据库索引文件:.dcx文件二、建立数据库常用的建立数据库的方法有三种: 在项目管理器中建立数据库; 在“新建”对话框建立数据库; 用命令交互建立数据库。1、在项目管理器中建立数据库在项目管理中建立数据库的界面

2、如图3.1所示:图3.1 项目管理器中的“数据”选项卡2、从“新建”对话框中建立数据库单击工具栏上的“新建”按钮或选择菜单“文件新建“对话框 (如图3.2所示):图3.2 新建对话框3、用命令交互建立数据库建立数据库的命令格式: create database databasename | ? 使用命令建立数据库后不打开数据库设计器,只是数据库处于打开状态,要进入设计器,就需执行修改数据库的命令: modify database databasename三、使用数据库在数据库中建立表或使用数据库中的表时,都必须首先打开数据库,常用的打开数据库的方法有三种: 在项目管理器中建立数据库; 在“打开

3、”对话框建立数据库; 用命令打开数据库。打开数据库的命令是open database,具体语法格式如下: open database filename | ? exclusive | shared *独占或共享 noupdate *只读 validate *指定系统检查 数据库中的对象是否合法注意: 这里的noupdate选项并不起作用,如果需要使数据库中的表是只读的,需要在用use命令打开表时使用noupdate选项;数据库打开,数据库中的所有表都可以使用,但是这些表不会自动打开,使用时需要用use命令;用use命令打开一个表时,VF首先在当前数据库中查找该表,如果没有,VF会在数据库外继续

4、查找并打开。在同一时刻可以打开多个数据库,但在同一时刻只有一个当前数据库,所谓当前数据库即所有作用于数据库的命令或函数都是对当前数据库而言的。 指定当前数据库的命令: set database to databasename 如果不指定参数(数据库名),即输入命令: set database to 此时使得所有打开的数据都不是当前数据库(注意:所有数据库都没有关闭,只是不是当前数据库)四、修改数据库在VF中修改数据库实际上是打开数据库设计器,用户可以在设计器中完成各种数据库对象的建立、修改和删除等操作,用一下三种方法可以打开数据库设计器: 从项目管理器中打开数据库设计器; 在“打开”对话框打开

5、数据库设计器; 用命令打开数据库设计器。 命令格式: modify database databasename | ? nowaitnoedit五、删除数据库删除数据库文件的方法 从项目管理器中删除数据库(不能删除表); 移去:从项目管理器中删除数据库; 删除:从项目管理器中删除数据库,并从磁 盘上删除。 用命令方式删除数据库(数据库必须处于关闭状态); 命令格式是: delete database databasename | ? deletetables recycle3.2 建立数据库表一、在数据库中建立表 一个数据库中数据就是由表的集合构成的,一般一个表对应于磁盘上的一个扩展名为.db

6、f的文件,如果有备注或通用型字段则磁盘上还会有一个对应扩展名为.fpt的文件(文件主名和表文件主名相同)。打开数据库设计器后利用菜单或设计器中的工具箱按钮新建表,执行命令后,出现下面的对话框(如图3.3所示): 图3.3 选择新建表给表文件命名及确定保存路径,随之会打开表设计器即设计表的结构(如图3.4)所示: 图3.4 建立表的界面建立表结构就是确定表文件中每一个字段的字段名、字段类型、字段宽度、小数位数以及允许是否为空。(1)字段名(Field Name) 字段名是以汉字、字母或下划线开头,后面可以是汉字、字母、数字或下划线组成,但不可以有空格,自由表的长度不超过10个字符。(2). 字段

7、类型(Type) 字段类型对应于二维表格栏目填写内容的类型,是字段变量的类型。(3).字段宽度(Width) 字段宽度用以表明该字段存放数据所需的宽度。用户在建立表时,只有字符型、数值型、浮点型需要用户输入所需的宽度,其他类型字段的宽度由系统自动确定。(4). 小数位(Dec) 只有数值型和浮点型字段才有小数位, 小数位的宽度是015位。(5).是否允许为空 表示是否允许该字段接受空值(NULL),关键字的字段不能为空。 二、修改表结构 在VF中,表结构可以任意修改:可以增加、删除字段,可以修改字段名、字段类型、字段的宽度,可以建立、修改或删除索引,可以建立、修改或删除有效性规则等。 如果表在

8、当前数据库中,直接用鼠标右击要修改的表,然后从弹出菜单中选择”修改“则会打开相应的表设计器,在表设计器中完成修改。 如果表没有在当前数据库中(即自由表),需要执行下面的命令: use 表名 (打开表) modify structure (修改表结构) 表一旦建立起来以后,自然就需要对它进行相应的操作。例如,向表中添加新纪录、删除无用的纪录、修改有问题的纪录、查看纪录等,对表的操作的命令都是对当前表进行操作,即都需要首先用use命令打开要操作的表3.3 表的基本操作一、 使用浏览器操作表 如果交互对表中的数据进行操作,最简单、方便的方法是使用Browse浏览器,即打开表的数据编辑界面,常用的方法

9、有: (1)、利用项目管理器 (2)、利用数据库设计器 (3)、利用命令,在命令窗口输入: use browse在编辑界面下,可以查看纪录、修改纪录、追加纪录、删除纪录。二、增加纪录的命令 1、append命令(在表尾追加) 命令格式: append blank 2、insert命令 (在当前纪录之前或之后) 命令格式: insert beforeblank三、删除纪录的命令 1、置删除标记的命令(逻辑删除) 命令格式: delete for 条件表达式 2、恢复纪录的命令 (去掉删除标记) 命令格式: recall for 条件表达式 3、物理删除有删除标记的纪录(彻底删除) 命令格式: p

10、ack 4、物理删除表中的全部纪录 命令格式: zap四、 修改纪录的命令 1、交互修改的edit和change命令(默认编辑当前纪录) 命令格式: edit | change 2、直接修改的replace(替换)命令 命令格式: replace 字段名1 with 表达式1 ,字段名2,with 表达式2 for 条件表达式 例 将当前表中所有学生的年龄加1. replace all 年龄 with 年龄+1五、显示纪录的命令命令格式List / display fields 字段名表 for 条件 to printerprompt | to file 文件名无条件或范围时 List 是连续

11、显示所有纪录;Display是显示当前纪录。 有条件或范围时List是连续显示满足条件的纪录;Display是分屏显示满足条件的纪录。 例 显示当前表中所有男生的纪录。 list for 性别=“男”六、查询定位命令 1、用goto命令直接定位(绝对定位) 命令格式: goto 记录号 | top | bottom goto和go命令是等价的,注意不能写成go to. 2、skip命令(相对定位) 命令格式: skip nrecords 其中nrecords可以是正整数或负整数,默认是1。 注意:skip是按逻辑顺序定位,即如果使用索引时,是按索引项的顺序定位的。 3、用locate命令定位(

12、查询定位) 命令格式: locate for 条件表达式 如果要使指针指向下一条满足条件的纪录,用continue命令。七、表的复制命令 1、复制表的结构 命令格式: copy structure to fields 2、复制表的纪录 命令格式: copy to fieldsfor 重要补充: 四个函数: 表头测试函数bof() 表尾测试函数eof() 纪录号测试函数recno() 纪录个数测试函数reccount() 一个命令: set default to e:vfp (设置默认目录)3.4 表的排序与索引排序与索引的概念及二者的区别。重点:索引及其使用一、 表的排序 排序(SORT):对

13、表中的记录进行物理排序。 格式: SORT TO ON /A|/D/C,/A|/D/C ASCENDING|DESCENDINGFORWHILE FIELDS 功能:按给定的字段名值由大到小或由小到大的顺序对当前表文件重新排列,并生成一个新的表文件。 例 把stud.dbf中入学成绩大于520的,按入学成绩从高到低排序,保存在strxcj.dbf中。 use studSort to strxcj on 入学成绩/d for 入学成绩480use strxcjlist例 把stud.dbf表按入学成绩(升序)、性别、姓名均按降序排列,保存在strxcj2.dbf中。 use studSort t

14、o strxcj2 on 入学成绩/a,性别,姓名 descuse strxcj2list二、索引概述 1索引的概念 索引(INDEX):对表中的记录进行逻辑排序。即另外形成一个索引关键表达式值与记录号之间的对照表,这个对照表就是索引文件。 索引文件是一个二维表,其中仅有二列数据:关键字值和记录的物理位置。关键字值是包含有字段的排序规则表达式,记录的物理位置指向关键字值在表中所在的物理位置。 例如,在表3-1的Stud表中,根据入学成绩的高低来建立索引文件。建立好的索引文件如表3-2所示。记录号 学号 姓名 性别出生日期 入学成绩 103083101王文 男 09-20-81 510 2020

15、83106李道 男 01-15-83 520 302083103邓轩斌男 11-28-78 524 402093108王瑞姝 女 01-01-84 522502093105刘光辉 男 11-06-80 526表3-1 Stud表中的记录 关键字(入学成绩)值 记录的物理位置 52655243 5101 52025224表3-2 根据入学成绩字段建立的索引文件 注意:索引并未改变表中记录的物理位置,仅仅改变了表中记录的逻辑排序。但是,当用户将建立好的索引文件打开以后,记录的显示顺序或读取处理记录的顺序将会按照索引文件排列的记录顺序进行。这样大大提高了记录的检索速度。 可以为一个表同时建立多个索引

16、文件,每个索引文件表示处理记录的不同顺序。2.索引文件的种类单一索引文件 (.IDX)复合索引文件 (.CDX)索引文件结构复合索引文件(与相关表文件同名)非结构复合索引文件(与相关表文件不同名) 复合索引文件的内部结构如图3.5所示。复合索引文件的扩展名为.CDX。 图3.5 复合索引文件结构 11-28-7806-09-8301-01-84关键字值2135物理位置1354物理位置2510520526关键字值1 03083101 0208310602083103关键字值 n1 23物理位置n 索引标识1 索引标识2 索引标识n 从图中可以看到复合索引文件可以由多个关键字值和其对应的多个记录的

17、物理位置构成。每一个关键字值和其对应的记录的物理位置构成了一个索引标识(TagName)。在复合索引文件中,每一个索引标识等价于一个单一索引文件。换句话说,复合索引文件等价于多个单一索引文件。 结构复合索引文件的文件名称与相关的表同名,另外结构复合索引文件将随着相关表的打开而自动打开。 非结构复合索引文件的文件名称与相关的表不同名,另外非结构复合索引文件不会随着相关表的打开而自动打开,要由用户自行打开。 索引与排序的不同点: 生成的文件不是.dbf文件,不需占用单独的工作区; 索引不改变原表文件中各记录的物理顺序。 索引文件占用空间小;3.索引的类型索引可分为4种类型:索引主索引 候选索引不允

18、许在指定字段和表达式中出现重复值的索引。一个表可以建立多个候选索引。不允许在指定字段和表达式中出现重复值的索引。只有数据表才能建立。惟一索引只在索引文件中保留第一次出现的索引关键字值。普通索引存储在.cdx结构复合索引文件中,与表文件同时打开和关闭。可存储在.cdx独立复合索引文件和.idx单索引文件中4 建立索引文件 VFP中,为表建立索引可以采用两种方法来完成:一、菜单方式:在表设计器中通过直观的操作来建立索引二、命令方式:使用INDEX命令来建立索引格式: INDEX ON TO 功能:对当前表建立一个索引文件或增加索引标识。TAG OF FOR COMPACT ASENDING|DES

19、CENDING UNIQUECANDIDATEADDITIVE说明:(1)若给出TO 子句,则建立一个单索引文件。 若给出TAG OF ,则建立一个结构复合索引文件,或为已建立并打开的复合索引文件增加索引标识。 OF 选项用于指定非结构复合索引文件的名字,省略此选项时,表示建立结构复合索引文件。(2)COMPACT 参数仅在建立单一索引文件时使用。该参数用于为单一索引文件获得压缩处理快速存取索引文件技术的支持,从而大大提高单一索引文件的使用效率。(3)ASCENDING|DESCENDING 参数用于指定复合索引文件的某一索引标识是按照升序(ASCENDING)还是降序(DESCENDING)

20、方式进行排序。(4)UNIQUE 参数用于建立唯一索引。也就是说对于拥有相同关键键值的若干条记录而言,只有第一条记录才会列入该索引文件中,其他具有此关键值的所有记录都将被排除在该索引文件之外。(5)CANDIDATE 参数用于建立候选索引。(6)ADDITIVE 参数用于在建立新的索引文件时,已打开的其他索引文件仍保持打开状态。【例】对stud表按入学成绩升序建立索引文件 Use stud index on 入学成绩 to cja List Use stud index on -入学成绩 to cjd List【例】对stud表按入学成绩降序建立索引文件 建立单一索引文件 单一索引文件只能按照

21、升序方式进行排列。 建立结构复合索引(在INDEX命令中使用 TAG 标识名 参数 )【例】对stud.DBF: 用学号作关键字,建立结构复合索引文件,标识名为xhUse studIndex on 学号 tag xh 用姓名作关键字,建立结构索引文件,标记名为xmUse studIndex on 姓名 tag xm 在建立复合索引文件时,可使用ASCENDINGDESCENDING参数指定某一索引标识是按照升序(ASCENDING)还是降序(DESCENDING)方式进行排序。【例】 若要为 Stud表根据入学成绩字段建立结构复合索引文件,索引标识为Et,并且希望按降序方式排列,那么应执行的命

22、令为:USE StudINDEX ON 入学成绩 TAG Et DESCENDING【例】对stud.DBF,用入学成绩, 出生日期, 姓名作关键字,建立结构索引文件,标记为strcx。Use studIndex on str(入学成绩) +dtoc(出生日期)+姓名 tag strcx上述操作相当于键入如下命令:Use studIndex on 入学成绩 tag rxcj additiveIndex on 出生日期 tag csrq additiveIndex on 姓名 tag xm additive【例】对stud表按学号建立非结构复合索引文件,文件名为scxh.CDX,索引标识为xh。

23、Use stud index on 学号 tag xh of scxh 建立非结构复合索引(在INDEX命令中使用 TAG OF参数)【例】若要为Stud表根据入学成绩字段建立单一索引文件(单一索引文件名为en1.IDX),希望只有满足入学成绩大于520这一条件的记录才会出现在索引文件的索引关键字值列表中,那么应执行命令:Use stud INDEX ON 入学成绩 TO En1.IDX FOR 入学成绩520 设置有条件的索引【例】若要为Stud表根据出生日期字段建立单一索引文件(单一索引文件名为 nl.IDX),并且该索引文件是唯一索引,那么应执行的命令:Use stud INDEX ON

24、 出生日期 TO nl.IDX unique 设置惟一索引【例】若要为Stud表根据学号字段建立结构复合索引文件(索引标识为stuid),并且该索引标识为候选索引,那么应执行命令:Use stud INDEX ON 学号 Tag stuid candidate 设置候选索引5、索引文件的使用 命令格式:USE INDEX ORDER TAG 标记名 OF ASCENDING | DESCENDING IN 1.打开索引文件 (1) 打开表文件的同时打开索引文件功能:打开指定的表及其索引文件。【例】 已知stud.DBF有scxh.cdx(标记名有xh,xm) 、cja.idx 和 nl.idx

25、 等索引文件。Use stud index cja, nl, scxh 打开表文件时打开所有索引文件,并以cja.idx作为主索引文件,命令是:Use stud index nl,cja,scxh order cja或:Use stud index cja, scxh, nl order tag xm of scxh 打开表文件时打开所有索引文件,并以scxh.cdx作为主索引文件,标记名为xm,命令是:【例】 已知stud.DBF有scxh.cdx(标记名有xh,xm) 、cja.idx 和 nl.idx 等索引文件。 命令格式:SET INDEX TO 索引文件名表 ADDITIVE (2

26、) 在打开表后再打开索引文件 除结构复合索引能随着表文件的打开而打开外,其他索引文件必须用索引文件的打开命令来打开。功能:在已打开表文件的前提下,打开指定的索引文件。ORDER |TAG 标记名 OF ASCENDING|DESCENDINGUse stud 打开索引文件cja.idx和nl.idx,并用nl作为主控制索引(主索引)。命令为:Set index to nl, cja 【例】 已知stud.DBF有scxh.cdx(标记名有xh,xm) 、cja.idx 和 nl.idx 等索引文件。命令格式:SET ORDER TO | TAG 索引标记名 OF 2.确定主控索引 功能:指定表

27、的主控索引文件或主控索引标识。注:命令 SET ORDER TO 可以取消主控索引。Use stud index cjaSet order to xh 【例】 已知stud.DBF有结构复合索引文件(标记名有xh,xm) 、单索引文件cja.idx 和 nl.idx 等,现要使用这些索引对stud表进行操作。listlistSet order to xm listSet order tolistUse stud index cja? recno( ) 【例】 分析在已打开索引文件情况下记录指针的移动。Go 3skip? Recno( ) Go top? Recno( )Go bottom? R

28、ecno( )3. 关闭索引文件 当关闭表文件时,同时关闭同一工作区中所有已打开的索引文件。此外,还有下列关闭索引文件的命令:格式1 : SET INDEX TO格式2 : CLOSE INDEX 功能:关闭当前工作区中除结构索引文件外的所有索引文件。(1)删除索引文件 若用索引文件命令来删除索引文件,须遵循先关闭后删除的原则。命令格式: DELETE file 功能: 删除打开的单索引文件。4.删除索引 (2)删除索引标识 命令格式: DELETE TAG ALL | 功能: 删除打开的复合索引文件的所有(或指定)索引标识。5. 使用索引快速定位 SEEK是利用索引快速定位的命令,格式如下:

29、 SEEK eExpression ORDER nIndexnumber | tag tagname Ascending | Descending 在数据库中数据完整性是指保证数据正确的特性。数据完整性一般包括实体完整性、域完整性和参照完整性。3.5 数据完整性一、 实体完整性与主关键字 实体完整性事保证表中记录惟一的特性,即不允许有重复的纪录,在VF中利用主关键字或候选关键字来保证表中的纪录惟一,即保证实体惟一性。 如果一个字段的值或几个字段的值能惟一标识表中的一条记录,则这样的字段称为候选关键字。在一个表中,候选关键字可能有多个,可从中选择一个作为主关键字,表中最多只有一个主关键字。 二、

30、 域完整性与约束规则 域完整性:限制数据的范围。 约束规则:字段有效性规则 1、规则 2、信息 3、默认值三、 参照完整性与表之间的关联 参照完整性:当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。其设置与表的关联有关。 有三个规则: 1、更新:(对应可有三个选择) 级联:当更改父表中某一纪录时,子表中相应纪录将会改变。 限制:当更改父表中某一纪录时,若子表中有相应纪录,则禁止该操作。 忽略:两表更新操作将互不影响。 2、删除:(对应可有三个选择) 级联:当删除父表中某一纪录时,将删除子表中相应纪录。 限制:当删除父表中某一纪录时,若子

31、表中有相应纪录,则禁止该操作。 忽略:两表删除操作将互不影响。3、插入:(对应可有两个个选择) 限制:当在子表中插入某一纪录时,若父表中没有相应纪录,则禁止该操作。 忽略:两表插入操作将互不影响。表之间的关联 在数据库设计器中设计表之间的联系时,要在父表中建立主索引,在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立两个表之间的联系。在数据库中,建立联系的两个表一般具有相同的字段。建立参照完整性 在建立参照完整性之前必须首先清理数据库。3.6 自由表自由表的概念: 不属于数据库中的表就是自由表。 一、 数据库表与自由表 两者之间的关系: 1、可以将自由表添加到数据库中,使之成为数据

32、库表,也可以将数据库表从数据库中移出,使之成为自由表。 2、当没有数据库打开时,建立的表就是自由表。 建立自由表的方法: 1、项目管理器中建立 2、确认没有数据库打开时,选择:“文件-新建”菜单。 3、确认没有数据库打开时,使用create命令,格式如下: create tablename | ?二、 将自由表添加到数据库 1、在项目管理器中添加。 2、在数据库设计器中添加。 3、使用命令添加。 add table tablename | ?name longtablename 注意:一个自由表只能添加到一个数据库。 三、 从数据库中移出表 1、在项目管理器中移出。 2、在数据库设计器中移出。

33、 3、使用命令移出。 remove table tablename | ?delete recycle 注意:一个自由表只能添加到一个数据库。 3.7 多个表的同时使用1、工作区的概念 工作区是用来保存表及其相关信息的一片内存空间。在每个工作区中只能打开一个表文件,但可以同时打开与表相关的其他文件。有了工作区的概念,就可以同时打开多个表,但在任何一个时刻用户只能选中一个工作区进行操作。当前正在操作的工作区称为当前工作区。 2、工作区号与别名 不同工作区可以用其编号或别名来加以区分。 Visual FoxPro提供了32,767个工作区,系统以132 767作为各工作区的编号。 工作区的别名有两

34、种:一种是系统定义的别名,另一种是用户定义的别名。 3. 工作区的选择 格式:SELECT 工作区号别名|0 功能:该命令选择一个工作区为当前工作区,以便打开一个表或把该工作区中已打开的表作为当前表进行操作。 4. 工作区的互访 在当前工作区中可以访问其他工作区中的表的数据,但要在非当前表的字段名前加上别名和连接符,引用格式为:别名.字段名或别名-字段名5、表的关联 建立数据库文件中的表间关联,一是要保障建立关联的表具有相同属性的字段;二是每个表都要以该字段建立索引。在这一前提下,以其中一个表中的字段(主键)与另一表中的同名字段(外键)建立关联,两个表间就具有了一定的关系。(1)、 一对一的关联 格式:SET RELATION TO 关联表达式1 INTO 工作区号1别名1,关联表达式2 INTO 工作区号2别名2 ADDITIVE功能:该命令使当前表与INTO子句所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论