《vf第三章visualfoxpro数据库及其操作.ppt》由会员分享,可在线阅读,更多相关《vf第三章visualfoxpro数据库及其操作.ppt(47页珍藏版)》请在三一办公上搜索。
1、第三章 Visual FoxPro数据库及其操作,本章重点(考点):visual foxpro数据库及其建立建立数据库表表的基本操作索引数据完整性自由表多个表的同时使用排序,3.1 visual foxpro数据库及其建立,3.1.1 基本概念 1.项目文件的后缀名为.pjx,数据库文件的后缀名为.dbc,而表文件的后缀名为.dbf 2.一个项目包含若干个数据库,而一个数据库又可以包含若干个表 3.VFP中的表可以分为自由表和数据库表,3.1.2 建立、打开和修改数据库,有三种方法建立数据库:在项目管理器中建立通过文件菜单使用命令建立数据库 用create database命令建立 用open
2、 database来打开数据库 关闭所有数据库close all 用modify database来修改数据库 用delete database来删除数据库,3.2 建立数据库表,3.2.1 在数据库中建立表,1.先建立以“订货管理”为数据库名,2.通过“数据库”菜单中的“新建表”建立以仓库“为数据库表名,3,4,练习1 建立数据库表,建立一个以“仓库”为表名的数据库表,表结构如下:,建好后按“确定”并要求输入一些记录。,表中涉及到的一些基本概念,1.字段名 表中的列名。一个表由若干列(字段)构成,vfp中可以使用中文字段名。数据库表字段名最长为128个字符。自由表字段名最长为10个字符。字段
3、名可以由字母、汉字、数字和下划线组成。字段名必须以字母或汉字开头。字段名中不能有空格。,2.字段类型和宽度 3.空值4.字段有效性组框5.显示组框6.字段注释打开表的命令为:use 表名 3.2.2 修改表结构如果已打开一个表如果用命令,首先要用use打开要修改的表;然后用modi stru打开表设计器,进行修改。,3.3 表的基本操作,3.3.1 浏览表浏览操作(打开表后)在项目管理器中浏览表记录;用browse命令浏览表记录。,2.增加记录的命令,Append命令 在表的尾部增加记录,有两种格式:appe-需要输入新的记录值;appe blank-在表尾部增加一条空白记录,然后再用edit
4、、change或browse命令来输入新的记录。,2.Insert 命令 可以在表中任何位置插入新的记录。格式:insert beforeblankBefore是在当前记录之后插入一条新记录,否则在当前记录之前插入新记录;Blank是在表尾插入一空白记录。注意:如在表上建立了主索引或候选索引,则不能用以上的append或insert命令插入记录,必须用SQL的insert命令,3.删除记录 有两种:逻辑删除和物理删除。逻辑删除 只是在记录旁作了删除标记,并没有真正在表中将之删除。1.置删除标记的命令 delete for 条件如:dele for 年龄=202.恢复记录的命令 recall f
5、or 条件如:reca for 年龄=20,物理删除有只删除带删除标记的记录 命令:pack物理删除表中的所有记录 命令:zap,4.修改记录的命令,用edit或change命令交互式修改 用edit或change命令直接进入当前记录的编辑状态 命令格式有:edit 或chan edit 记录号如要修改第5条记录-edit 5,2.用replace命令替换原内容 格式:repl 替换字段1 with 表达式1,替换字段2 with 表达式2.for 条件例如:将学生表中“总学分”字段值都替换为100。repl all 总学分 with 100例如:将学生表中所有男同学的“总学分”字段值都替换为
6、100。repl all 总学分 with 100 for 性别=.t.,5.显示记录的命令,Brow命令是浏览并修改List 和display只是将所找的记录显示在工作区。格式:List fields 字段名 for 条件offto printerto file 文件名List命令与display命令的区别:在不使用条件时:List命令显示所有记录 Disp命令显示当前一条记录,Fields 后面跟要显示的字段,如有多个字段就用分号隔开;To printer是输出到打印机;To file是输出到其他文件;Off 不显示记录号。例如:显示所有男同学的记录 list all for 性别=.t.
7、(逻辑型字段)例如:显示所有姓张的学生 list all for 姓名=“张”(字符型)例如:显示所有总学分=200的记录 list all for 总学分=200(数值型),6.查询定位命令,直接将指针定位到某个记录上,然后对其进行操作。Go或goto直接定位格式:go 记录号|top|bottomTop是到表中第一条记录;Bottom指向表尾。,2.Skip 从当前位置向前或向后移动若干条记录位置。格式:skip 记录号“+”号向下移动“-”号向上移动3.用locate命令定位 Loca是按条件定位记录位置。格式:loca for 条件 定位在满足条件的第一条记录上。,3.4 索引,3.4
8、.1 基本概念 索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序。在表设计器中可定义索引,vfp中有四种:主索引、候选索引、唯一索引和普通索引。,3.4.2 在表设计器中建立索引,单项索引复合字段索引 在多个字段上的索引为复合索引。在一个表上可以建立多个普通索引、多个唯一索引、多个候选索引和一个主索引。主索引用于主关键字;普通索引用于一般提高查询速度;唯一索引用于一些特殊的程序设计。,3.4.3 用命令建立索引,命令index,格式:Index on 字段名 tag 索引名 of 多个复合索引名 for 条件 asce|desc说明:asce是升序|desc是降序,默认为升序。一
9、般的索引扩展名为.cdx。例如:建立以仓库号为索引 index on 仓库号 tag 仓库号,3.4.4 使用索引,打开索引文件 一般与表名相同的结构索引随表自动打开,非结构索引可用:set index to 索引文件列表设置当前索引 在特定索引项查询时需要指定 set order to 索引号|tag 索引名 例如:将结构索引文件中的“学号”设为当前索引。set order to tag 学号(或 set order to 学号),3.使用索引快速定位 用seek命令,格式:seek 值 order 索引名。例如:将记录指针定位在学号为1995220212的记录上。seek“19952202
10、12”order 学号4.删除索引 dele tag 索引名 dele tag all 删除所有的索引,建立数据库及数据库表要求:在订货管理数据库中建立“仓库”、“职工”、“订货单”和“供应商”四个表。并做相应的索引。注意:同名字段的类型和宽度。,课堂练习,3.5 数据完整性,在数据库中数据完整性是指保证数据正确的特性,数据完整性一般包括实体完整性、域完整性和参照完整性等,vfp 提供了实现这些完整性的方法和手段。351实体完整性与主关键字 将主关键字称作主索引,将候选关键字称作候选索引。,352域完整性与约束规则 域完整性应该是数据类型的定义范畴,对于字段的取值类型和取值范围,还可用一些域约
11、束规则来进一步保证域完整性。域约束规则也称作字段有效性规则,在插入或修改字段值时被激活,主要用于数据输入正确性的检验。,建立字段有效性规则(只有对数据库表才起作用),在表设计器中建立,在表设计器的“字段”选项卡中有一组定义字段有效性规则的项目,它们是“规则”(字段有效性规则)、“信息”(违背字段有效性规则时的提示信息)、“默认值”(字段的默认值)三项。具体操作步骤如下:首先单击选择要定义字段有效性规则的字段;然后分别输入和编辑规则、信息及默认值等项目。,例以“订货管理”数据库中的职工表为例,设职工的工资有效性规则在1000至3000元之间,当输入的职工工资不在此范围时给出出错信息,职工的默认工
12、资值是1200。,353参照完整性与表之间的关联,参照完整性与表之间的联系有关,它的大概含义是:当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。假如:一个职工记录由仓库号、职工号和工资三个字段构成,当插入一条这样的记录时,如果没有参照完整性检查,则可能会插入一个并不存在的仓库的职工记录,这时插入的记录肯定是错误的。,参照完整性是关系数据库管理系统的一个很重要的功能。在VFP中为了建立参照完整性,必须首先建立表之间的联系。实体之间的联系和联系类型。最常见的联系类型是一对多的联系,在关系数据库中通过连接字段来体现和表示联系。连接字段在父表中
13、一般是主关键字,在子表中是外部关键字。如果一个字段或字段的组合不是本表的关键字,而是另外一个表的关键字,则这样的字段称为外部关键字。,1建立表之间的联系,在数据库设计器中设计表之间的联系时,要在父表中建立主索引,在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立起两个表之间的联系。,仓库和职工之间有一个一对多的联系,连接字段是仓库号;职工和订购单之间有一个一对多的联系,连接字段是职工号;供应商和订购单之间有一个一对多的联系,连接字段是供应商号。,例分别建立仓库和职工之间,职工和订购单之间,供应商和订购单之间的一对多联系。,1.建立:用鼠标左键选中仓库表中的主索引仓库号,按住鼠标左键
14、,并拖动鼠标到职工表的仓库号索引上,鼠标箭头会变成小矩形状,最后释放鼠标。2.编辑修改和删除联系:用鼠标右键单击要修改的联系,连线变粗,从弹出的快捷菜单中选择“编辑关系”。,2设置参照完整性约束,建立了表之间的联系,VFP默认没有建立任何参照完整性约束。在建立参照完整性之前必须首先清理数据库,所谓清理数据库是物理删除数据库各个表中所有带有删除标记的记录。只要数据库设计器为当前窗口,主菜单栏上就会出现“数据库”菜单,这时可以在“数据库”菜单下选择“清理数据库”,该操作与命令PACK DATA功能相同。在清理完数据库后,用鼠标右键单击表之间的联系并从快捷菜单中选择“编辑参照完整 性”,打开的参照完
15、整性生成器界面。注意,不管单击的是哪个联系,所有联系将都出现在参照完整性生成器中。,3.6 自由表,不属于数据库中的表就是自由表1.数据库表与自由表2.将自由表添加到数据库3.从数据库中移出表,37多个表的同时使用,在VFP中一次可以打开多个数据库,在每个数据库中都可以打开多个表,另外还可以打开多个自由表。371多工作区的概念 在以前版本中一直沿用了多工作区的概念,在每个工作区中可以打开一个表,即在一个工作区中不能同时打开多个表。如果在同一时刻需要打开多个表,则只需要在不同的工作区 中打开不同的表就可以了。系统默认总是在第1个工作区中工作,以前没有指定工作区,实际都是在第1个工作区打开表和操作
16、表。,指定工作区的命令是:select 工作区号|cTableAlias工作区号是一个大于0的数字,132767。cTableAlias是已打开的表名或表的别名。,例412分别在第1、2、3工作区打开学生、课程和成绩三个表,并选择当前工作区。OPEN DATA 学生管理 SELECT l USE 学生 SELECT 2 USE 课程 SEIECT 3 USE 成绩 如果要到第1个工作区操作学生表,则命令:SELECT 学生 和 SELECT l 是等价的,也可以在USE命令中直接指定在哪个工作区中打开表,例如:OPEN DATA 学生管理 USE 学生 IN l USE 课程 IN 2 USE
17、 成绩 IN 3 每个表打开后都有两个默认的别名,一个是表名自身,另一个是工作区所对应的别名。在前10个工作区中指定的默认别名是工作区字母A到J,工作区11到32 767中指定的别名是W11到W32767。另外,还可以在USE命令中用Alias短语指定别名。如命令:USE 学生 IN l alias student 为学生表指定了别名student。,372使用不同工作区的表,除了可以用SELECT命令切换工作区使用不同的表外,也允许在一个工作区中使用另外一个工作区中的表。格式:in 工作区号|表名(或别名)例如当前使用的是第2个工作区中的课程表,现在要将第1个工作区中的学生表定位在学号为99
18、21104的记录上,可以使用命令:seek 1995220212 order 学号 in student,在一个工作区中还可以直接利用表名或表的别名引用另一个表中的数据,具体方法是在别名后加上点号分隔符“”或“-”操作符,然后再接字段名。例如当前使用的是第2个工作区中的课程表,现在要显示第1个工作区中的学生表的学号和姓名字段的值,可以使用命令:?student.学号,student-姓名,第一个工作区的表名,373表之间的关联,前面介绍参照数据完整性时介绍了表之间的关联或联系,它们是基于索引建立的一 种“永久联系”,虽然永久联系在每次使用表时不需要重新建立,但永久联系不能控制不同工作区中记录指
19、针的联动。所以在开发VFP应用程序时,不仅需用永久联系,有时也需使用能 够控制表间记录指针关系的临时联系。这种临时联系称为关联,使用SET RELATION命令 建立。,格式:Set rela to eExpression1 INTO 工作区号|别名eExpression1指建立临时索引关键字,一般应是父表的主索引、子表的普通索引。例:设当前工作区是1号区,通过“学号”索引建立学生表和成绩表之间的临时联系。open data 学生管理use student in 1 order 学号use cj in 2 order 学号set rela to 学号 into cj,38 排 序,索引可以使用户按照某种顺序浏览或查找表中的记录,这时的顺序是逻辑的,是通过索引关键字实现的。数据库提供一种物理排序的命令,它可以将表中的记录物理地按顺序重新排列。物理排序的命令是SORT,常用格式如下:Sort to TableName ON 字段/a|/d/cfor条件TableName是排序后存放到一个新表中。/a是升序(默认值),/d是降序,/c不分大小写。,例如:对student表中姓名排序,use studentsort to aa on 姓名 use aaBrow说明:aa是一个新建的表文件名,通过排序的内容装在里面,如要查看排序结果,必须要打开aa表,才能查看。,