第四章VFP数据库及其操作4.1节数据库的建立一、概念数据库:数据库是一个逻辑上的概念和手段,通过一组系统文件将相互联系的数据库表及其相关的数据库对象统一组织和管理。数据库文件:*.dbc备注文件:*.dct索引文件:*.dcx二、建立数据库①在项目管理器中建立②通过“新建”对话框③应用命令createdatabase[databasename]注意:a在执行该命令前先执行setsafetyon,否则,如果数据库重名就有可能会覆盖已经存在的数据库。b在执行createdatabase[databasename]前要设置好默认目录,否则它会建立在VFP系统文件夹中。三、使用数据库数据库的打开:在项目管理器中打开通过“新建”对话框打开应用命令打开opendatabase[databasename|?][exclusive|shared][noupdate][validate]数据库的修改:在项目管理器中打开通过“新建”对话框打开应用命令修改modifydatabase[databasename|?][nowait][noedit]数据库的删除:项目管理器中删除应用命令修改deletedatabase[databasename|?][deletetables][recycle]4.2节建立数据库表一、复习1、什么是数据库?2、项目文件、数据库文件及表文件的后缀名分别为什么?3、建立数据库时自动建立哪两个文件?4、建立数据库、打开数据库及修改数据库的命令是什么?二、建立数据库表1、在数据库中建立表表:在关系数据库中将关系称做表方法一:使用数据库设计器数据库设计器中任意空白区域单击鼠标右键,弹出“数据库”快捷菜单,从中选择新建表。方法二:用命令建立表opendatabase订货管理creat仓库注意:如果没有用opendatabase打开数据库,直接使用creat建立的表称为自由表。①字段名字段名即关系的属性名或表的列名自由表字段名最长为10个字符数据库表字段名最长为128个字符字段名必须以字母或汉字开头字段名可以由字母、汉字、数字和下划线组成字段名中不能包含空格②字段类型和宽度注意:没有时间型③空值空值就是缺值或没有确定的值,与空(或空白)字符串,数值0等具有不同的意义。例:表示价格的字段值,空值表示没有定价,数值0表示免费。注意:关键字段不允许为空值,允许暂缺的字段允许为空值。Ctrl+0输入null④字段有效性组框⑤显示组框三、修改表的结构1、修改已有的字段2、增加新字段3、删除不用的字段方法一:使用数据库设计器在当前数据库设计器中直接用鼠标右键单击要修改的表,然后从快捷菜单中选择“修改”,则打开相应的表设计器。方法二:用命令修改表use仓库表modifystructure练习:1、建一名称为订货管理的项目,其数据库名称为dhgl,它包含p.116页的四张表:仓库表、职工表、订购单表、供应商表(做题前先建以自己姓名命名的文件夹,并设置vfp的默认目录为该文件夹)2、用三种方法打开订货管理数据库命令为:4、用两种方法删除数据库命令为:5、修改表的结构命令为:①将仓库表中的字段“面积”改为“仓库面积”②将仓库表中的“城市”字段宽度增加二⑥将职工表中的“工资”字段类型改为数值型,长度为7,小数位数为24.3节表的基本操作复习:1、关系数据为把什么称为表?2、什么为自由表?3、定义字段变量的条件是什么?定义字段类型和宽度时应注意什么?新课内容:表的操作包括向表中添加新的数据记录、删除无用的记录、修改有问题的的记录、查看记录等等。对表进行操作前要先用use命令打开要操作的表。一、使用浏览器操作表4、浏览表①在项目管理器中将数据库展开至表,并且选择要操作的表,然后单击“浏览”按钮。②在项目管理器中选择数据库,单击修改出现数据库设计器,选择要操作的表,然后从“数据库”菜单中选择“浏览”,或者右键单击要操作的表,然后选择“浏览”。5、修改表将光标定位在要修改的记录和字段上,然后直接修改就行了。增加记录时可用ctrl+Y追加一条新空记录后输入数据。6、删除记录删除分为逻辑删除和物理删除两种。逻辑删除:只是在记录旁作删除标记,必要时还可以去掉删除标记恢复记录。物理删除:真正从表中删除记录,物理删除是在逻辑删除的基础上进行的。置删除标记和取消删除标记的命令是ctrl+T二、使用命令操作表一般命令格式:命令动词[范围][条件forwhile][字段fields]表示范围的词:recordnumber指定一条记录next指定当前记录以下的一条或多条记录all指定所有的记录rest指定当前记录一直到最后一条记录1、增加记录命令append[blank]在表尾部增加记录该命令相当于ctrl+Yinsert[before][blank]在表任意位置插入新记录2、删除记录命令置删除标记的命令:delete[forlexpressinon]恢复记录的命令:recall[forlexpressinon]物理删除有删除标记的记录:pack物理删除有删除标记的记录物理删除表中的全部记录:zap3、修改记录命令用edit或change命令交互式修改用replace命令直接修改replacefieldname1witheExpressino1[,fieldname2whiteExpressino2]·······[forlexpressinon]注意:一次可以修改多个字段例:repl面积with500for城市=“北京”replall面积with面积+100或repl面积with面积+100all4、显示记录命令listdisplay区别:在不使用条件时,list默认显示全部记录,disp默认显示当前记录5、查询定位命令绝对定位命令:goNgotopgobottom相对定位命令:skipNN是正或负的整数,默认是1,正数向后移,负数向前移。条件定位命令:locatefor表达式使指针指在满足条件的第一条记录上,继续查找下一满足条件的记录用continue.练习:1、在仓库表增加一条记录号为3的记录,其仓库号为WH5,城市为常州,面积为600。表仓库表尾增加一记录,其仓库号为WH6,城市为广州,面积为300。(注意用insert命令前必须先用go命令定位)2、逻辑删除记录号为1,2,3的记录(命令中要含有范围词next),物理删除仓库号为WH3的记录。3、在仓库表中将城市为北京的面积加100。4、在屏幕上显示仓库表中面积大于300的记录并且只显示城市和面积字段。作业:1、什么是数据库?项目文件、数据库文件及表文件的后缀名分别为什么?2、打开、删除订货管理数据库命令是什么?3、将仓库表中的字段“面积”改为“仓库面积”的命令?4、关系数据为把什么称为表?什么是自由表?5、定义字段变量的条件是什么?定义字段类型和宽度时应注意什么?6、在仓库表增加一条记录号为3的记录,其仓库号为WH5,城市为常州,面积为600。表仓库表尾增加一记录,其仓库号为WH6,城市为广州,面积为300。(注意用insert命令前必须先用go命令定位)7、逻辑删除记录号为1,2,3的记录(命令中要含有范围词next),物理删除仓库号为WH3的记录。8、在仓库表中将城市为北京的面积加100。9、在屏幕上显示仓库表中面积大于300的记录并且只显示城市和面积字段。4.4节索引一、基本概念VFP中索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序。索引文件(数据库索引文件.dcx,表索引文件.cdx)和表的.dbf文件记录分别存储。索引分为:主索引、候选索引、唯一索引、普通索引1、主索引在指定字段或表达式中不允许重复值的索引,这样的索引可以起到主关键字的作用,所以一个表只能创建一个主索引,但可以为它添加候选索引。(学号、身份证号等无重复值的可以设置为主索引,姓名不一定能设置为主索引,因为可能有同名同姓的人)2、候选索引候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。3、唯一索引唯一索引是为了保持同早期版本的兼容性,它的唯一性是指索引项的唯一,而不是字段值的唯一。它以字段的首次现现值为基础,选定一组记录,并对记录进行排序。一个表中可建立多个唯一索引。4、普通索引它不仅允许字段中出现重复值,并且索引项中也允许出现重复值。在一个表中可以建立多个普通索引。总结:主索引和候选索引具有相同功能,除具有按升序或降序索引的功能外,还具有关键字的特性,它拒绝重复的字段值。唯一索引和普通索引含义相同,它们只起到索引排序的功能。唯一索引的唯一是指在使用相应的索引时,重复的索引字段值只有唯一一个值出现在索引项中。二、在表设计器建立索引1、单项索引:在对应的字段上建立上建立了一个索引,索引名与字段名同名,索引表达式就是对应的字段。在表设计器界面中有“字段”,“索引”,“表”三个选项卡,在字段选项卡中定义字段时可直接指定字段是否有索引项。2、复合字段索引:在多个字段上建立索引。注意:在一个表上可以建立多个普通索引、多个唯一索引、多个候选索引、但只能建立一个主索引。主索引用于主关键字字段;候选索引用于那些不作为主关键字但字段值又必须唯一的字段;普通索引用于一般地提高查询速度;唯一索引用于一些特殊的程序设计。索引可以提高查询速度,但索引也会降低插入、删除和修改等操作的速度。所以,并不是说索引可以提高查询速度,就在每个字段上都建立一个索引。三、用命令建立索引1、命令格式:Indexon表达式to索引文件名|tag索引名to索引文件名:建立一个单独的索引文件,为了与以前版本兼容tag索引名:多个索引可以建立在一个索引文件中,这种索引称做结构复合索引,其文件名与相关的表同名,扩展名为.cdxcompt:只对单独的索引文件起作用,说明建立压缩的.idx文件,复合索引总是压缩的.Ascending或Descending:说明建立升序或降序索引,默认是升序.Unique:建立唯一索引Candidate:说明建立候选索引Additive:与建立索引本身无关,说明现在建立索引时是否关闭以前的索引,默认是关闭已经使用的索引,使新建立的索引成为当前索引.注意:用命令格式可以建立普通索引、唯一索引(unique)或候选索引(candidate),但没有主索引,主索引在表设计器中指定,指定一个主索引实际就是指定了一个主关键字.3、索引的分类(按索引组织方式来分)①单独的.idx索引,是一种非结构单索引②采用非默认名的.cdx索引,是非结构复合索引③与表同名.cdx索引,是结构复合索引结构复合压缩索引文件具有如下特性:a:在打开表时自动打开b:在同一索引文件中能包含多个索引方案或索引关键字c:在添加、更改或删除记录时自动维护索引四、使用索引1、打开索引文件与表名相同的结构索引在打开表时都能够自动打开,但是对于非结构索引必须在使用之前打开索引文件。格式:setindexto索引文件如果是复合索引文件,则默认索引项是它在创建时的第一个索引项,要使用其他索引项还必须具体指定。2、设置当前索引setorderto索引序号或索引名[ascending|descending]索引序号:是建立索引的先后顺序号不管索引是按升序或降序建立的,在使用时都可以使用ascending或descending重新指定升序或降序。3、使用索引快速定位格式:seek索引项或索引关键字[order索引序号或索引名][ascending|descending]4、删除索引格式:deletetag索引名deletetagall删除全部索引练习:1、对学生表,在学号上建立主索引2、在成绩表中增加语文(N/3/0)、数学(N/3/0)、计算机基础(N/3/0)、总分(N/4/0)四个字段,自己输入记录,用replace命令求出每个人的总分3、在总分字段上建立一个普通索引(索引名为ZF)4、在各门课成绩上建立升序的普通索引,索引名分别为yw,sx,yy5、分别设置当前索引为上述四个索引,查看表的排序变化6、显示总分前三名与后三名学生姓名与各门课程的成绩和总分7、用