![第3章 数据库与数据表的基本操作_第1页](http://file4.renrendoc.com/view/4128d3f6867ea38f1e335c91bef01c81/4128d3f6867ea38f1e335c91bef01c811.gif)
![第3章 数据库与数据表的基本操作_第2页](http://file4.renrendoc.com/view/4128d3f6867ea38f1e335c91bef01c81/4128d3f6867ea38f1e335c91bef01c812.gif)
![第3章 数据库与数据表的基本操作_第3页](http://file4.renrendoc.com/view/4128d3f6867ea38f1e335c91bef01c81/4128d3f6867ea38f1e335c91bef01c813.gif)
![第3章 数据库与数据表的基本操作_第4页](http://file4.renrendoc.com/view/4128d3f6867ea38f1e335c91bef01c81/4128d3f6867ea38f1e335c91bef01c814.gif)
![第3章 数据库与数据表的基本操作_第5页](http://file4.renrendoc.com/view/4128d3f6867ea38f1e335c91bef01c81/4128d3f6867ea38f1e335c91bef01c815.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章
数据库和数据表的操作3.1.1VFP数据库及数据表
数据库管理系统主要是通过数据库对数据进行有效的组织和管理。VFP引入了大型数据库管理系统的“数据库”概念,数据采用“数据库——表与视图——记录——字段”的逻辑结构进行存储,并且引入了数据字典(数据字典是在创建数据库文件时系统自动生成的相应文件,是一个记录数据库中所有信息的表。)功能对数据库进行管理,增强了数据的可靠性、一致性和完整性。数据库及作用按照关系数据库理论,二维表就是关系模型中的一个关系,称为表(Table)。数据库则是关系的集合,即表的集合,这些表协同完成某项任务。数据库中各表之间是有联系的,称为关系。所以利用数据库除了可以存储一系列表之外;还可以在表之间建立永久关系,并存储在数据库中;可以设置表属性、字段属性及有效性规则和默认值;还可以建立和存储本地视图和外地视图,存储与远程服务器的连接。实际上,数据库主要用于组织表,但数据并不存储于数据库文件(.DBC)中,而是存储在表文件(.DBF)中。但表间的永久关系、表属性、字段属性、视图定义、远程连接的定义等是真正存储在数据库文件中。数据库及作用二表表是基本的数据组织单位,数据管理的核心是对表的管理,表是按一定结构组织起来的。二表根据表是否属于数据库,可将表分为数据库表(DatabaseTable,也称数据表)和自由表(FreeTable)。在同一时间一个表只能属于一个数据库。可以在数据库中创造新据库表,也可以向数据库中添加自由表转为数据库表。还可以从数据库中移出表使之变为自由表,或者移出添加到别的数据库中。二表我们日常用到的二维表格,对应于数据库中的一个数据表。日常二维表格有两大部分组成:表头和表格内容。在数据库的数据表中,数据表结构对应于表头,记录对应于表格内容。(见RSDA.DBF数据表)表3-1人事档案信息表
编
号姓
名性别工作时间职
称简
历照
片05002苗
莉女1963.7.1
04002林文灵男1963.9.2教授
04001姜瑞青男1984.9.3教授
01001韩伟东男1985.9.4
03001王为冬男1988.7.5副教授
02002贾贵红女1988.9.6主治医师
02001刘巧玲女1993.9.7
从表3-1可以看到,它是由以下几部分组成的:①表的名字(标题):每张表都有一个名字,是用来概括表的内容。例如上表的名字人事档案信息表②表中每一列的栏目标题序列为表头,它标明了每一列对应数据的属性。例如在表3-1中的编号、姓名、出生日期、简历……等等,即是表头。③表中每一行的数据是表的内容,由每行中具体的数据项内容组成的,它标明了某一事物的基本内容。例如在表3-1中,第二行反映的便是林文灵的个人情况。数据表中一行称为一个记录一列称为一个字段记录描述实体字段描述实体的属性字段应是数据表中不可再分割的基本数据项。二维表与数据表的对应关系一张二维表由表名、表头、表的内容三部分组成,一个数据表则由数据表名、数据表的结构、数据表的记录三要素构成。①数据表的文件名相当于二维表中的表名,它是数据表的主要标识,用户可以依靠数据表名在磁盘上存取、使用指定的数据表。②数据表的结构相当于二维表的表头,二维表的每一列对应数据表中的一个字段,其属性决定了字段名、字段类型和字段长度。③数据表中的记录是数据表中不可分割的基本项,即二维表中的表的内容。一个数据表的大小,主要取决于它拥有的数据记录的多少。不包含记录的数据表称为空表。1.数据表名数据表及自由表都有各自的名字标识符,以区别于其它表。每个表都是以单独的文件存储于磁盘中,数据表名就是对应的文件名,文件名应符合Windows的规定,扩展名默认为.DBF。可以使用字母、汉字、数字、下划线及它们的组合,但不能使用*、?、空格等字符。注意:由于系统已设定了A、B、……、J和W11、W12、……、W32767
作为数据库工作区别名,所以用户不要单独用它们作文件名。2.数据表结构在创造数据表时,首先要定义数据表的结构,然后按数据表结构输入记录数据。定义数据表结构就是依次定义每个字段的字段名、字段类型、字段宽度、小数位数及是否允许NULL(空)值。1)字段名字段名是用来标识字段的,又称为字段变量。其命名规则同内存变量。在VFP运行期间,许多操作都是通过字段名来访问这个字段的,所以字段名的定义最好与该字段所代表的数据属性相符,例如用英文单词、汉语拼音、汉字作为字段名,尽量遵循“见名知义”的原则。
2)字段类型和字段宽度VFP中的每一项数据都有固定的类型,每一个字段中的数据必须是同一种数据类型。数据类型定义了该种数据的表示方法、取值范围、所能进行的运算。在VFP数据表中,字段的数据类型共有13种,应根据具体的需要进行设置。
2.数据表结构数据表的结构 ③小数位数只对数值型和浮动型数据有效。小数位的取值范围为0~15。
④NULL值
该属性指定记录中字段是否允许输入NULL(空)值。需要注意的是,NULL值与空格、空字符串或0是不同的。NULL不是一种数据类型,当一个字段的值被置为NULL时,其数据类型并不发生改变。
2.数据表的存在方式
数据表可以有两种存在方式:单独的一个数据表,我们称之为自由表(FreeTable);存在于数据库中的表,我们称之为数据库表(DatabaseTable)。自由表是扩展名为.DBF的文件,它独立存在,不与任何数据库相关联;而数据库表的扩展名虽然也是.DBF,但是,它与某一个数据库相关联(也只能和惟一数据库相关联),隶属于某一数据库。
2.数据表的存在方式
数据库中的表可以有一些自由表所没有的特性。这两种类型的数据表建立方式基本相同,只是数据库表需设定较多的属性,可以设置表和字段的各种规则。自由表可以很容易地添加到数据库中,使之转化成数据库表;反之,将一个数据库表从数据库中移走,则可将其转化为一个自由表,这时,表原有的一些特性或规则将会丢失。
3.1.2建立数据库和数据表的准备工作
1.确定数据库的组织结构
在建立数据库和数据表时,应首先确定应用系统中的数据有哪些,这些数据应存放在几个数据表中,每个数据表中应包含哪些数据、数据表文件如何命名等。例如,对于一个人事管理系统,可能包含有人员编号、工作部门、姓名、性别、籍贯、出生日期、婚姻状况、工资状况、学历、职称、职务、简历等许多数据,为便于管理和避免数据的冗余,可以将这些数据组织到不同的数据表中,如档案信息数据表、工资信息表、管理信息数据表等。
3.1.2建立数据库和数据表的准备工作
2.数据规范化
日常生活中的表格大都是不规则表格,需要首先将其改造为规则的二维表格,按照关系理论中关系的规范化原则,设计数据库的总体结构和各个数据表的结构。
4.1.2建立数据库和数据表的准备工作
3.确立数据表的结构
在设置数据表的字段类型和宽度时,一般应遵循以下原则:(1)文字性质内容的字段(如姓名、职称、职务、家庭住址等)以及不参加运算的数字性质内容的字段(如职工编号、身份证号、电话号码、商品代码等),其类型应定义为字符(C)型。
4.1.2建立数据库和数据表的准备工作(2)参与运算的数字性质内容的字段(如工资、成绩、金额、单价等),其类型应定义为数值(N)型,并应根据实际需要保留相应的小数位。不要忘记负号和小数点都各占一位。(3)日期性质内容的字段(如出生日期、制表日期等),其类型应定义为日期(D)型。(4)内容只能在两者中取一的字段(如婚否、性别等),其类型应定义为逻辑(L)型。
3.1.2建立数据库和数据表的准备工作(5)字符个数较多的字段(如简历、简介等),其类型应定义为备注(M)型。
(6)内容为OLE对象的字段(如照片、音乐等),其类型应定义为通用(G)型。
对非固定长度的字段,在定义其字段宽度时,既要注意目前的实际情况,也要考虑到将来的发展(如职工编号、学生证号等),要留有一定的余地。
3.1.2建立数据库和数据表的准备工作根据上述原则,人事档案信息表中各字段定义字段名类型宽度小数位字段名类型宽度小数位编号字符型(C)5
职称字符型(C)8
姓名字符型(C)8
简历备注型(M)4
性别字符型(C)2
照片通用型(G)4
工作时间日期型(D)8
3.2数据表结构的建立、修改和显示
3.2.1建立数据库
1.建立数据库
(1)在项目管理器中建立数据库文件
(建立一个名为rsgl.dbc的数据库文件
)(2)利用菜单建立数据库文件
(3)利用命令建立数据库文件
CREATEDATABASE[<数据库名>|?]3.2.1建立数据库2.打开数据库
(1)在项目管理器中打开数据库文件
(2)利用菜单打开数据库文件
(3)利用命令打开数据库3.关闭数据库【格式】CLOSEDATABASE|ALL
3.2.2建立数据表结构
所谓建立数据表的结构,就是把数据表的字段名、字段类型、字段长度和小数位个数等数据输入到VFP系统中并保存到数据表文件中。
1.利用表设计器创建数据表结构
(1)在项目管理器中打开表设计器
(2)利用菜单打开表设计器
(3)利用命令打开表设计器
3.2.2建立数据表结构2.利用表向导建立数据表结构①在数据库设计器中打开数据库rsgl.dbc,然后选择“文件”菜单中的“新建”命令,出现“表向导步骤1-字段选取”对话框。把rsda表添加到样表当中;选择rsda数据表;并选择样表中的字段②“表向导步骤1a—选择数据库”对话框,③“修改字段设置”对话框,④“步骤3-为表建立索引”对话框,忽略后将出现“步骤3a-建立关系”对话框,也忽略出现“步骤4—完成”对话框,选择“保存表,然后在表设计器中修改”
3.2.2建立数据表结构3.设置数据库表的字段属性和表属性(1)设置数据库的字段属性①显示区域“格式”属性“输入掩码”属性“标题”属性②匹配字段类型到类③字段有效性“规则”信息默认值④字段注释3.2.2建立数据表结构(2)设置数据表的属性①记录有效性规则:指定记录中各字段取值必须满足的条件,也是通过[表达式生成器]对话框,将有效性规则用逻辑型表达式表示出来。信息:指定当记录有效性验证不符合规则时,则弹出警告框,所显示的提示信息。②触发器触发器也是一种检查表中记录数据有效性的机制。当对表中的记录进行插入、更新或删除操作时,将分别激活插入触发器、更新触发器、删除触发器,根据定义的验证条件进行检查。定义触发器的验证条件,也是用逻辑型表达式来表示。
③表注释3.2.3数据表结构的修改修改表结构主要包括:修改字段名、字段类型、字段宽度、小数位数、插入(添加)一个字段、删除一个字段、调换字段的顺序等内容。
1.打开表设计器(1)在项目管理器中选择要修改结构的表,然后单击“修改”按钮。(2)数据库设计器中选择要修改结构的表,右单击其表名,然后从弹出的快捷菜单中选择“修改”命令。(3)使用MODIFYSTRUCTURE命令。3.2.3数据表结构的修改2.修改数据表结构(1)若要修改字段名、类型、宽度和小数位等(2)若要调换字段的位置(3)若要插入字段,(4)若要删除某字段,(5)若要在尾部添加字段,3.2.4数据表结构的显示1.在表设计器中显示数据表结构2.命令方式显示数据表结构【格式】LIST|DISPLAYSTRUCTURE[IN<工作区号>|<表别名>][TOPRINTER[PROMPT]|TOFILES<文件名>]说明:LIST和DISPLAY可以选择任意一个,所不同的是:若字段很多,一页显示不下,LIST连续显示信息直到显示完为止;DISPLAY采用分页显示信息,即显示一屏信息后暂停,按任意键或单击鼠标就可以继续显示后面的内容。
3.2.4数据表结构的显示例如,可在命令窗口输入以下命令来显示数据表rsda.dbf的结构:
USErsdaLISTSTRU从显示的信息中可以看出,字段宽度的总计数目比各字段宽度之和大1,这时因为系统保留了1个字节的宽度用来存放逻辑删除标记
3.3数据表的基本操作3.3.1数据表的打开和关闭1.打开数据表(1)在项目管理器中打开数据表(2)通过“文件”菜单打开数据表(3)通过“数据工作期”窗口打开数据表(4)用命令打开数据表【格式】USE[<表文件名>|?][IN<工作区号>|<工作区别名>][ALIAS<表别名>]3.3.1数据表的打开和关闭2.关闭数据表USE:关闭当前工作区中打开着的数据表。CLEARALL:关闭所有打开着的数据库和数据表,释放所有的内存变量。CLOSEALL:关闭所有打开着的数据库和数据表、设计器、项目管理器。CLOSEDATABASE:关闭当前数据库和数据表,并选择1区为当前工作区。CLOSETABLES:关闭当前数据库中的所有数据表。QUIT:在退出VFP的同时关闭所有的数据库和数据表等。3.3.2记录的输入1.记录输入根据输入到数据表中的顺序,数据表中的每个记录都被自动赋予一个顺序号,称为记录号。
注意以下几点:(1)通用型和备注型字段的输入方法是双击字段名后的“gen”和“memo”,或是把光标移动到“gen”和“memo”上时按Ctrl+PageUp(PageDown)键,打开相应的输入窗口,之后即可输入通用型和备注型字段的内容,输入完毕后单击窗口关闭按钮或按Ctrl+W键即可保存输入的内容(若按Ctrl+Q键则不保存输入的内容),返回到数据记录输入窗口。输入内容后,“memo”和“gen”分别变为“Memo”和“Gen”。3.3.2记录的输入(2)备注型字段的内容可直接输入,但通用型数据的输入一般使用插入对象的方法来插入数据。打开通用型字段的输入窗口后,选择“编辑”菜单下的“插入对象”,即出现插入对象对话框,
(3)如果需要向一个字段输入空值(NULL),则必须使用组合键:CTRL+0,或者输入“.NULL.”。(4)在数据输入过程中,可随时移动插入点对输入的错误进行修改。
(5)按Esc键或Ctrl+Q键也可关闭记录输入窗口
3.3.2记录的输入2.记录追加【格式】APPEND[BLANK][IN<工作区号>|<表的别名>]3.3.2记录的输入3.从其它数据表文件中追加记录(1)菜单方式(2)命令方式【格式】APPENDFROM<文件名>|?[FIELDS<字段名表>][FOR<条件表达式>]由于通用字段用于存储OLE对象,和其它字段不同,因此需要用特殊的命令:【格式】APPENDGENERAL<通用字段名>FROM<对象的文件名.扩展名>3.3.3记录的浏览和显示1.在“浏览”窗口中显示浏览记录(1)在项目管理器,选数据表,单击“浏览”按钮。(2)在数据库设计器中,右单击要浏览的数据表名,在快捷菜单中选择“浏览”命令。(3)打开数据表后,选择“显示”菜单中的“浏览”命令。(4)打开数据表,在命令窗口中用BROWSE命令。【格式】BROWSE[FIELDS<字段名表>][FOR<条件表达式>][FREEZE<字段名>][LOCK<字段序号>][NOAPPEND]
[NODELETE][NOEDIT|NOMODIFY]3.3.3记录的浏览和显示2.列表方式显示数据表记录【格式】LIST|DISP[[FIELDS]<字段名表>][<范围>][FOR<条件表达式1>][WHILE<条件表达式>][OFF][TOPRINTER][TOPROMPT][TOFILES<文件名>]3.3.4记录指针及其操作1.当前记录虽然一个数据表中可能含有多条记录,但记录指针某一时刻只能指向某一记录或数据表的首尾。当记录指针指向某一记录时,该记录就被称为当前记录。“当前记录”是一个非常重要的概念,它既关系到字段变量的取值,也关系到许多命令的执行,因为在默认情况下(不指定操作范围时),VFP中一些命令只对当前记录进行操作,例如DISPLAY命令、REPLACE命令等。3.3.4记录指针及其操作记录指针是虚拟的,不能直接看到,VFP中常用函数RECNO()来判断记录指针位置,如输入命令“?RECNO()”时,可以在桌面上显示出当前记录的记录号。另外,在浏览窗口中,窗口左侧的按钮上带有一个黑三角的记录就是当前记录。3.3.4记录指针及其操作2.记录指针的定位(1)菜单方式定位记录指针选择“表”菜单中的“转到记录”项
3.3.4记录指针及其操作(2)命令方式定位记录指针a.指针的绝对移动【格式一】GO|GOTOTOP|BOTTOM[IN<工作区号>|<表的别名>]【格式二】[GO|GOTO]<数值表达式>[IN<工作区号>|<表的别名>]b.指针的相对移动【格式】SKIP[[+|-]<数值表达式>][IN<工作区号>|<表的别名>]3.3.4记录指针及其操作
USErsda&&打开数据表rsda.dbf,该表共11条记录
?RECNO(),BOF()&&当前记录号为1,BOF()为.F.SKIP-1&&记录指针从当前位置向表头部相对移动1条记录
?RECNO(),BOF()&&当前记录号为1,BOF()为.T.GO4&&记录指针绝对移动到第4条记录
?RECNO()&&当前记录号为4SKIP&&记录指针从当前位置向表尾部相对移动1条记录
SKIP-3&&记录指针从当前位置向表头部相对移动3条记录
?RECNO()&&当前记录号是2GOBOTTOM&&记录指针绝对移动到数据表最后1条记录
?RECNO(),EOF()&&当前记录号为11,EOF()为.F.SKIP&&记录指针从当前位置向表尾部相对移动1条记录
?RECNO(),EOF()&&当前记录号为12,EOF()为.T.3.3.4记录指针及其操作(3)按条件定位【格式】LOCATE[<范围>][FOR<条件表达式1>][WHILE<条件表达式2>]LOCATE命令只能将记录指针定位到第一条符合条件的记录上,若要继续查找满足条件的其它记录,可以执行继续查找命令。【格式】CONTINUE3.3.5记录数据的修改1.在浏览窗口中修改记录数据2.EDIT或CHANGE命令【格式】EDIT|CHANGE[FIELDS<字段名表>][<范围>][FOR<条件表达式>]【功能】在编辑窗口显示并编辑指定的字段。说明:①EDIT和CHANGE只能选择其中之一,两者等价。②缺省范围和条件时,将从当前记录编辑到最后的记录。③FIELDS短语用来指定显示和编辑的字段。3.3.5记录数据的修改3.批量修改记录数据以上介绍的修改数据的方法是手工一条记录一条记录地修改,若数据表中的记录很多,且许多记录都需要有规律地修改数据,……VFP提供了成批修改某字段有规律数据的方法。(1)利用菜单批量修改数据3.3.5记录数据的修改(2)利用REPLACE命令批量修改数据【格式】REPL<范围><字段名1>WITH<表达式1>[ADDITIVE][,<字段名2>WITH<表达式2>[ADDITIVE]][,…][<范围>][FOR<条件表达式>]说明:①不选用范围和条件,只对当前记录进行字段更改。②只选了范围短语,对指定范围内的所有记录进行字段更改。③只选了条件短语,则默认范围ALL。④可以同时更改几个不同字段的值。WITH后面的<表达式n>的值用来替换对应字段的值。3.3.6记录的删除与恢复在VFP中删除操作分为两步,首先是进行逻辑删除,然后再进行物理删除。
1.逻辑删除(逻辑删除只对记录作删除标记)(1)在浏览窗口中逻辑删除记录单击窗口左边框和要删除的记录的第一个字段之间的小方块(称为删除标记)一般情况下,逻辑删除的记录和其他记录一样参与操作,除非使用了SETDELETEON命令。此时,被逻辑删除的记录将被隐藏起来,不参加有关的计算。3.3.6记录的删除与恢复(2)利用命令逻辑删除记录【格式】DELETE[<范围>][FOR<条件表达式>][WHILE<条件表达式>][IN<工作区号>|<表的别名>]2.恢复逻辑删除记录(1)在浏览窗口中恢复逻辑删除的记录(2)利用命令恢复已逻辑删除的记录【格式】RECALL[<范围>][FOR<条件表达式>][WHILE<条件表达式>][IN<工作区号>|<表的别名>]3.3.6记录的删除与恢复3.物理删除已作了逻辑删除标记的记录(1)菜单方式选择菜单“表”、“彻底删除”命令,VFP将弹出一个确认对话框,单击“确定”按钮即可物理删除(2)命令方式【格式】PACK
4.删除表中所有记录【格式】ZAP[IN<工作区号>|<表的别名>]说明:ZAP等效于DELEALL和PACK两条命令连用。
3.4索引文件及其应用3.4.1索引文件及分类1.索引文件索引文件:它仅由两个字段组成,一个字段是排序的关键字值(也可以是一个表达式),另一个字段是每个关键字在原始数据表中对应的记录号。例,在Rsda.dbf数据表中,以编号为关键字段并按升序建立的索引文件的示意图如下图所示。1.索引文件原数据表中的顺序是按输入的顺序存储在表中的,在索引文件中,记录是按索引关键字值的顺序排列的,当要查找某一编号的记录时,VFP先在索引文件中查找该编号,找到后再根据对应的记录号,在数据表中将记录指针快速移动到该记录上。一个索引文件中可以只有一个索引,也可以有多个索引。可以包含多个索引的索引文件称该文件为复合索引文件。在复合索引文件中,需要为每个索引指定一个索引标识名,以便于通过索引标识相互区分各个索引。3.4.1索引文件及分类2.索引文件的分类VFP支持传统的单入口索引文件(扩展名为.IDX)和复合索引文件(扩展名.CDX),其中.IDX索引文件中只包含一个索引,而.CDX索引文件中可以包含有一个或多个索引,所以称为复合索引文件。复合索引文件,又可分为结构化复合索引文件和非结构化复合索引文件两种,其区别在于:结构化复合索引的主文件名与数据表的主文件名相同,并随着数据表的打开而打开,在添加、更改或删除记录时会自动进行维护;而非结构化复合索引文件的主文件名与数据表文件不同,必须用命令打开。3.4.1索引文件及分类3.索引的类型(1)主索引主索引通常是数据表的关键字索引,作为主索引的字段称为主关键字。主索引不能用在自由表中,而只能用在数据库表中,可用于在永久关系中建立参照完整性。创建主索引的字段不允许有重复值,且一个表只能有一个主索引。例如,在数据表中,常用学生证号、身份证号、工作证号等作为主索引,而姓名可能有同名的情况,一般不能作为主索引。3.4.1索引文件及分类3.索引的类型(2)候选索引候选索引类似于主索引,其索引值就不能有重复值。与主索引不同的是,一个数据表中可以有多个候选索引,而且侯选索引不能用来在永久关系中建立参照完整性。(3)惟一索引惟一索引表示索引值只能取一个,如果有两个或两个以上的索引值,则只能取其中一个,因此,惟一索引使用时可能会隐藏一些记录。例如,若有两个同名的人员,将姓名字段作为惟一索引,则只能找到一个记录,另一个记录将不会找到。3.4.1索引文件及分类3.索引的类型(4)普通索引普通索引没有上面各索引的限制,是允许重复索引值的索引。作为普通索引的字段,其字段值可以重复,也可以作为排序的依据,但因为可能有多个相同的索引值,因此查询时会找到多个符合条件的记录。一个数据表中可以有多个普通索引。3.4.2创建索引文件1.建立结构化复合索引文件
(1)在表设计器中创建索引文件(2)命令方式创建索引【格式】INDEXON<表达式>
TAG<索引标识名>
[FOR<条件表达式>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]【功能】建立结构化复合索引文件。USERSDAINDEXON编号TAGNBHCANDINDEXON性别+CTOD(出生日期)TAGXBCSRQ2.建立独立复合索引文件独立复合索引文件的扩展名也是.CDX,但其主文件名与数据表文件名不相同,且使用时还需单独打开。独立复合索引文件主要用来创建那些使用不太频繁的索引。独立复合索引文件不能在表设计器中创建,只能用命令建立。【格式】INDEXON<表达式>TAG<索引标识名>OF<独立复合索引文件名>
[FOR<条件表达式>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]
如:USERSDAINDEXON编号TAGbhOFRs.cdxINDEXON姓名+STR(职务补贴)TAGxbbtOFRs.cdx3.重新建立索引文件在数据表的使用过程中,当增删记录或数据表中被索引文件使用的关键字段改动时,结构化复合索引会随着数据表的打开自动打开并能及时得到更新,但如果在使用数据表时未打开相应的独立复合索引文件或传统的单入口.IDX索引文件,则索引文件会因为无法及时更新而产生错误索引。这时须打开索引文件,并对其重新索引。重执行一遍INDEX命令即可重新索引,更简捷的方法是在浏览窗口中打开数据表,然后选择菜单“表”、“重建建立索引”命令,或打开数据表后用REINDEX命令重新建立索引。【格式】REINDEX3.4.3索引文件的使用1.指定主控索引一个数据表可以建立多个索引文件,每个索引文件中又可能包含多个索引,而一种索引就是一种排序方式,所以,在使用索引时,必须指明哪一个索引是对数据表记录排序起作用的,即指定主控索引。在没有指定哪一个索引为主控索引之前,数据表的访问顺序仍然是原来的物理顺序,即按记录号的顺序访问。主控索引和主索引是完全不同的概念。主索引是用来控制数据的完整性的,而主控索引是用来指定目前记录排列顺序的。1.指定主控索引(1)指定结构化复合索引文件中的索引为主控索引在浏览窗口中打开数据表(以表Rsgz.dbf为例),选择菜单“表”、“属性”命令,即弹出“工作区属性”对话框,单击“索引顺序”下拉列表,选择一个索引标识名,浏览窗口中记录的排列顺序会立即根据选择的主控索引发生变化设定主控索引后,利用LIST、DISPLAY命令输出的记录顺序也是排序后的顺序。需要特别强调的是,主控索引只是改变了记录的输出顺序,记录在数据库中的顺序并没有发生变化。通过VFP的USE命令和SETORDERTO命令也可以指定主控索引。
【格式一】USE<数据表名>ORDER[TAG]<索引标识名>[ASCENDING|DESCENDING]【格式二】SETORDERTO[[TAG]<索引标识名>]ASCENDING|DESCENDING]【功能】指定结构化复合索引文件的索引为主控索引。(2)指定独立复合索引文件中的索引为主控索引对于独立的复合索引文件或单入口的索引文件,需要用命令将其打开和关闭,只有打开要使用的独立复合索引文件后,才能指定其中的索引为主控索引。
【格式一】USE<数据表名>ORDER[TAG]<索引标识名>[OF<独立复合索引文件名>][ASCENDING|DESCENDING]【格式二】
SETINDEXTO[TAG]<索引标识名>[OF<独立复合索引文件名>](4)关闭索引文件【格式一】SETINDEXTO【格式二】CLOSEINDEX2.使用索引快速查找记录FIND命令和SEEK命令都可在指定主控索引的情况下进行记录的查找操作。
SEEK<表达式>USERsdaORDERTAGbh&&打开Rsda同时指定BH为主控索引
SEEK"03001"SETORDERTOrq&&重新指定rq为主控索引
SEEKCTOD("1988.09.06")&&日期格式要与设置相同,否则会出错
DISPLAY3.5数据表的统计计算3.5.1累加求和及求平均值对每个记录的横向求和和统计可以用前面介绍的操作或命令方便地给出,如REPLACE命令。对于每个记录的纵向求和统计可以用累加求和命令实现。【格式】SUM|AVERAGE[<表达式表>][<范围>][FOR<条件表达式>][WHILE<条件表达式>][TO<内存变量名表>]|[TO<数组变量名>]【例】求出Rsgz.dbf中计算机系所有职工的月基本工资平均值及全年实发工资之和并显示。
CLEARSETTALKOFFUSERsgz
AVERAGE基本工资TOpj_jbgzFORSUBSTR(编号,1,2)="03"
SUM实发工资*12TOqn_sfgzFORSUBSTR(编号,1,2)="03"?"计算机系职工的月平均工资为:",pj_jbgz?"计算机职工的全年实发工资之和为:",qn_sfgzUSESETTALKONRETURN3.5.2统计记录个数
【格式】COUNT[<范围>][FOR<条件表达式>][WHILE<条件表达式>][TO<内存变量名表>]|[TO<数组变量名>]3.5.3分类汇总分类汇总对已经建立了索引并且指定了主控索引的数据表,可以按关键字进行分类求和
【格式】TOTALON<关键字表达式>TO<新表名>
[FIELDS<字段名表>][<范围>][FOR<条件表达式1>][WHILE<条件表达式2>]①当前数据表必须是按<关键字表达式>索引过,并指定该索引为主控索引,以保证具有相同关键字值的记录能连续访问。②FIELDS短语给出了需分类求和的字段名,这些字段只能是数值型或货币型的,如果缺省,则对当前表中的所有数值型或货币型字段分类求和。不管选不选FIELDS短语,新表与当前表的结构是一样的。③对当前数据表中的若干个关键字表达式相同的记录,生成新表中的一条记录。这条记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应字段,参加求和的字段值取自求和结果。3.6数据交换3.6.1数组与数据表的数据交换1.将数据表中的记录数据保存到数组中【格式一】SCATTER[FIELDS<字段名表>][MEMO]TO<数组名>【格式二】COPYTOARRAY<数组名>[FIELDS<字段名表>][<范围>][FOR<逻辑表达式>]【功能】将当前打开的数据表中的某些记录数据存储在数组中。2.将数组中的数据传递到当前数据表中【格式一】GATHERFROM<数组名>[FIELDS<字段名表>][MEMO]【格式二】APPENDFROMARRAY<数组名>[FOR<逻辑表达式>][FIELDS<字段名表>]【功能】将数组中各元素的数据传递给当前打开的数据表中。3.6.2文件复制1.复制部分记录或整个数据表【格式】COPYTO<表文件名>
[<范围>]
[FOR|WHILE<逻辑表达式>][FIELDS<字段名表>][DATABASE<数据库名>[NAME<长表名>]] [[WITH]CDX]|[[WITH]PRODUCTION] |SDF|SYLK|WK1|WKS|WR1|WRK|
XLS|XL5|DELIMITED[WITH<定界符>|WITHBLANK|……2.复制数据表的结构【格式】COPYSTRUCTURETO<表文件名>
[FIELDS<字段名表>
[[WITH]CDX|[WITH]PRODUCTION]3.7多数据表操作VFP提供了强有力的多数据表操作能力,引入了工作区和表的别名这两个概念。用户可以在不同的工作区中同时打开多个表,也可以在不同的工作区打开同一个表,通过表的别名,用户可以引用在不同工作区打开的表中的数据。3.7.1工作区的基本概念所谓“打开”数据表,实际上就是VFP在内存中开辟了一个区域(亦称缓冲区)与磁盘上数据表之间建立起一种映射关系,使VFP通过缓冲区使用磁盘上数据表里的数据,这个内存中的缓冲区就称为工作区。1.工作区的性质(1)在每一个工作区中只能打开一个表,VFP最多可以开辟32767个工作区,打开32767个表。允许一个表在几个工作区中同时打开。(2)在某一时刻只能选择一个工作区为“当前工作区”,对其中的表进行操作。系统初始状态默认1号工作区为当前工作区。(3)每一工作区打开的数据表都有各自的记录指针。在一般情况下,对数据表的操作只能移动当前工作区的记录指针。当使得数据表之间建立临时关系以后,另一工作区的记录指针才能根据要求伴随当前工作区的记录指针作相应的移动。(4)内存变量对各工作区是公用的,每一工作区的字段变量对其它各工作区也是公用的。在任意工作区都可以对其它工作区的当前记录进行读、写操作。2.工作区的编号和别名
为了标识每一个工作区,系统给每一工作区编号,号码为1、2、…、32767。同时还为工作区规定了别名,其中1至10号工作区别名为A、B、…、J;11至32767号工作区别名为W11、W12、…、W32767。给数据表命名时,不要与工作区的别名冲突,否则容易引起混乱。3.数据表别名
在打开数据表的同时,可以为数据表起一个别名,这个别名也作为打开该数据表的工作区别名。[格式]
USE<数据表名>[ALIAS<别名>][IN<数值表达式>|<工作区别名>][AGAIN]说明:①若不指定工作区,则默认为在当前工作区上打开指定的数据表,并同时关闭以前在当前工作区上打开的数据表。②ALIAS<别名>为可选项,不指定别名时,原数据表名就是它的别名。例如,当执行了命令“USERsdaALIASda”后,表Rsda的别名就是da;而执行了命令“USERsda”后,则默认Rsda表的别名。③若选择了IN0短语,表示在当前没有使用的编号最小工作区上打开数据表。④该命令只是在指定的工作区上打开数据表,并不能改变当前工作区。改变当前工作需要单独的命令。⑤一旦一个工作区上打开了一个数据表,数据表就和该工作区建立起对应关系,所以打开数据表后可以用数据表的别名来代替工作区别名。3.7.2工作区的选择和使用1.选择工作区(1)利用“数据工作区”窗口选择工作区选择[窗口]菜单中的[数据工作期]命令,或单击常用工具栏中的[数据工作期窗口]按钮,打开[数据工作期]窗口。这时默认当前工作区为1。单击[打开]按钮选择一个数据表打开。若再次单击[打开]按钮,可以依次在其它工作区打开其它数据表,并且可以用显示的别名选择工作区。在数据工作期窗口还可以浏览各工作区打开的数据表,还可以关闭他们。
(2)利用SELECT命令选择工作区[格式]
SELECT<工作区号>|<工作区别名>|<表别名>说明:选择当前工作区,选择的工作区中可以是在前面已经打开了数据表,也可以是未曾打开表。例:USERsda&&默认在1号工作区打开Rsda.dbf
SELECTd&&选择4号工作区为当前工作区
USERsgl&&在当前(4号)工作区打开Rsgl.dbf
USERsgzALIASgz&&在当前4号工作区打开Rsgz,同时关闭Rsgl
SELECT1&&选择1区为当前工作区
LIST&&显示当前(1号)工作区数据表(Rsda)的记录
SELECTgz&&或SELE4,SELEd,但不能SELERsgz
LIST&&显示Rsgz的记录
SELERsda&&是否可以?为什幺?
LIST
?SELECT()&&给出当前工作区号函数,返回当前工作区号
USERsglIN10
?SELECT()
USE&&关闭当前工作区上的数据表
USERsglIN0
?SELECT()2.在不同工作区打开同一个数据表例:SELE1USERsdaUSERsdaALIASdaIN3AGAINSELE2USERsdaAGAIN3.使用非当前工作区中表的数据方法是在非当前工作区的表的字段名前加注工作区别名或表的别名。格式为:<别名>-><字段名>
或<别名>.<字段名>注意,这里的符号“->”是“-”和“>”两个(均为半角)符号复合而成。例:SELE2USERsgl&&未指定主索引顺序,指向1号记录
USERsdaIN3SELE3LOCATEFOR姓名=b->姓名&&指向同个人
DISPLY部门名,姓名,出生日期,c.工作日期
显示结果如下:记录号部门名姓名出生日期C->工作日期
1机关韩伟东1960.10.101985.09.04在VFP中,表之间关联有临时关系和永久关系两种关联
1.设置表的临时关系
(1)利用数据工作期窗口建立表的临时关系3.7.3数据表的关联(2)利用命令建立表之间的临时关系
【格式】SETRELATIONTO[<关键字表达式1>|<数值表达式1>
INTO<工作区别名1>|<子表别名1>
[,<关键字表达式2>|<数值表达式2>
INTO<工作区别名2>|<表别名2>…][ADDITIVE]]说明:①必须选择父表所在工作区为当前工作区,然后再使用本命令与非当前工作区中的数据表(子表)建立关联。②选ADDITIVE项可使父数据表与子表建立关联时,原先已存在的关联仍然保留。如果不选用该项,则建立新关联时将取消原有关联。③子表必须按关键字表达式中的关键字段建立索引,且被指定为主控索引。若选择数值表达式,则两个表是按照记录号相联系,此时子表不要求索引。通常情况下,用两个表都具有的相同字段作为建立临时关系的关键字表达式。④不选任何可选项则取消已与当前表建立的关联。父表可以与多个子表建立关联。⑤建立临时关系以后,父表和子表记录指针的移动的规则是:父表指针每移动到一个记录,子表则按关键字表达式的值进行索引查找,并将记录指针定位在相应记录上。若子表中没有记录和父表的当前记录相关联,子表的记录指针将指向EOF;若子表中有多个记录和父表的当前记录相关联,则子表的记录指针将指向第一个相匹配的记录。【例】某书店有一个图书库存数据表Tskc.dbf,存放有该书店所有的图书信息,另有一个图书调价数据表tstj.dbf,其中存放着图书调价后的新价格.
现要求编制程序,用Tstj.dbf中的单价数据更新Tskc.dbf中的单价数据。假设Tstj.dbf数据表中的记录和Tskc.dbf中的记录是一一对应的,即凡是出现在Tskc.dbf中图书都调价了,则可用如下的程序:
SETTALKOFFSETSAFETYOFFUSETSKCSELECT2USETSTJINDEXON图书编号TAGTSBHSETORDERTOTSGHSELECT1SETRELATIONTO图书编号INTOBREPLACEALL单价withTSTJ.单价
CLOSEALLSETSAFETYONSETTALKONRETURN2.设置表间的永久关系永久关系是存储在数据库文件(.DBC)中的数据表之间的关系,它作为数据库的组成部分一直保留。它不像临时关系每次打开数据表时都要重新建立。数据库中的数据表建立永久关系后,借助这种关系不仅仅从当前选定的表中访问数据,而且还可以访问相关数据表中的数据。当在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技产品与消费者心理的关联研究
- 2025年日光灯消防应急装置项目可行性研究报告
- 大头儿子小头爸爸亲子故事征文
- 科技企业如何把握绿色能源的商业机会
- 油漆涂料承包合同
- 农产品质量检验和认证手册
- 绿野仙踪名著读后感
- 水凝胶基多孔材料用于净化含油和含Cu(Ⅱ)废水的研究
- 勇敢追梦的故事集锦
- 基于BOPPPS教学模式的高中地理教学设计与实践研究
- 电网工程设备材料信息参考价(2024年第四季度)
- 2025年江苏农牧科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 数据中心运维服务投标方案(技术标)
- 瑞幸对赌协议
- 幼儿园一日活动流程教师培训
- 征信入校园教育课件
- 《你当像鸟飞往你的山》读书分享读书分享笔记
- 《电子商务系统分析与设计》课件-电子商务系统规划
- 2025年山东铁投集团招聘笔试参考题库含答案解析
- 2024-2030年中国数控机床行业运营趋势与前景动态预测研究报告
- 心血管医疗器械白皮书
评论
0/150
提交评论