《数据库》第3章 数据库及其操作_第1页
《数据库》第3章 数据库及其操作_第2页
《数据库》第3章 数据库及其操作_第3页
《数据库》第3章 数据库及其操作_第4页
《数据库》第3章 数据库及其操作_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第3章VisualFoxPro6.0数据库及其操作3.1数据库的建立3.1.1数据库概念数据库是一个包含多种数据对象的抽象的“容器”,可以简单地理解为存放数据的仓库。在VisualFoxPro中,数据库可以包括一个或多个表、视图、到远程数据源的连接和存储过程。在数据库的组织管理下,可以方便灵活地对表、记录、索引、表间关联以及表的参照完整性进行控制。3.1.2数据库的建立数据库是以文件形式存放在磁盘上,称为“数据库文件”,其扩展名为.dbc。可以通过菜单方式、项目管理器方式和命令方式来创建一个新的数据库。1、用菜单方式建立数据库用菜单方式创建新的数据库,可按如下步骤:(1)在系统主菜单中,选择“文件”下拉菜单中的“新建”命令,或直接单击常用工具栏上的“新建”按钮,系统将显示“新建”对话框。(2)从“文件类型”选项中选择“数据库”,再单击“新建文件”按钮,出现“创建”对话框。在“数据库名:”文本框中输入要建立的数据库名,如输入“JXGL”后单击“保存”按钮,系统就在当前盘的当前目录下生成名为JXGL.dbc的数据库文件,同时打开“数据库设计器”窗口,并显示“数据库设计器”工具栏。此时,用户已经建立了一个名为JXGL.dbc的空数据库,此外,系统还会自动生成一个扩展名为.dct的数据库备注文件和一个扩展名为.dcx的数据库索引文件。2、在项目管理器中建立数据库项目管理器是用于对VisualFoxPro6.0中各种类型的文件进行分类、管理的组织工具。在VisualFoxPro6.0数据库系统中的一个“项目”就是相关程序、数据、文档以及对象集成在一起的集成体,它以扩展名为.pjx的文件存盘。用户可以通过类似菜单方式创建数据库的方法创建一个项目。在项目管理器中创建数据库的方法是:打开“项目管理器”,选择项目管理器中的“数据”选项卡,然后再选择“新建”按钮,其余步骤同菜单方式。3、命令方式建立数据库格式:CREATEDATABASE[<数据库文件名>|?]功能:创建并打开一个数据库。说明:(1)<数据库文件名>指定要创建的数据库的名称,命名规则遵循文件名的命名规则,缺省扩展名为.dbc。(2)如果缺省<数据库文件名>或使用“?”号,将显示“创建”对话框,提示用户指定要创建的数据库的名称。(3)命令方式建立数据库,系统不显示数据库设计器,但确实建立了一个空数据库。【例3-1】用命令方式创建名为JXGL的数据库。命令:CREATEDATABASEJXGL建立好的数据库只是一个数据库的框架,里面还没有数据,用户可以向其中添加各种数据库对象,如表、视图、表之间的关系等。3.1.3在VisualFoxPro6.0中,可以同时打开多个数据库,打开数据库的常用方法有三种:菜单方式、命令方式和项目管理器方式。1、数据库的打开在数据库中建立表或对数据库中的表进行相关操作时,都必须先打开数据库。数据库的打开,就是指将数据库文件从所在磁盘调入内存。(1)菜单方式打开数据库单击工具栏上的“打开”按钮或在系统主菜单的“文件”下拉菜单中选择“打开”命令,在弹出的“打开”对话框中的“文件类型”下拉列表框中选择“数据库(*.dbc)”,选择数据库文件所在的文件夹,选择或输入数据库文件名后,单击“确定”按钮打开数据库。(2)命令方式打开数据库格式:OPENDATABASE[<数据库文件名>|?][EXCLUSIVE|SHARED]功能:打开一个指定的数据库。说明:①<数据库文件名>指定要打开的数据库文件名。如果缺省<数据库文件名>或使用“?”号将显示“打开”对话框,用户可以从中选择现有的数据库。②EXCLUSIVE表示以“独占”方式打开数据库,此时,其他用户在同一时刻无法使用该数据库,这是系统的默认设置。③SHARED表示以“共享”方式打开数据库,此时,其他用户也可以在同一时刻使用该数据库。④如果缺省EXCLUSIVE或SHARED参数,则系统按照默认方式打开数据库。命令SETEXCLUSIVEON|OFF可以设置数据库以何种方式打开。2、设置当前数据库VisualFoxPro6.0在同一时刻可打开多个数据库,但在同一时刻仅有一个为当前数据库。在打开多个数据库时,最后一个打开的数据库为当前数据库。使用DBC()函数可返回当前数据库文件名。格式:SETDATABASETO[<数据库文件名>]功能:设置当前数据库。说明:<数据库文件名>用来设置某一个打开的数据库文件为当前数据库。如果缺省,则所有打开的数据库都不是当前数据库,但数据库都没有被关闭。另外,在“常用”工具栏中的“数据库”列表框中显示的是当前数据库的名称。用户也可以在列表框中选择其他已经打开的数据库成为当前数据库。【例3-2】打开数据库和设置当前数据库(JXGL和MYDATA这两个数据库文件已经存在)CLOSEALLOPENDATABASEJXGL&&打开数据库JXGL,使其成为当前数据库OPENDATABASEMYDATA&&打开数据库MYDATA,当前数据库变成了数据库MYDATASETDATABASEJXGL&&设置数据库JXGL为当前数据库3、数据库的关闭当暂时不使用库文件时,应及时关闭数据库以防止意外断电或误操作而破坏数据库文件中的数据。格式1:CLOSEDATABASE功能:关闭数据库和表。格式2:CLOSEALL功能:关闭除“命令窗口”、“调试窗口”、“跟踪窗口”和“帮助窗口”以外的所有文件。4、数据库的删除当数据库文件不再需要时,可以将其删除。在删除数据库前,应先将其关闭。格式:DELETEDATABASE<数据库文件名>[DELETETABLES]功能:删除指定的数据库文件。说明:若选择参数DELETETABLES,则删除数据库的同时删除其中的数据库表;否则,只删除指定的数据库,其中的数据库表将变成自由表。5、数据库设计器的打开打开数据库文件后往往需要打开数据库设计器进行相关的操作,可以用如下命令打开:格式:MODIFYDATABASE[<数据库文件名>]功能:在数据库打开的状态下,使用MODIFYDATABASE命令可以打开数据库设计器。若当前没有打开数据库,使用MODIFYDATABASE<数据库文件名>可以在打开指定数据库文件的同时打开数据库设计器;若缺省数据库文件名,系统弹出“打开”对话框,用户可选择要打开的数据库文件。3.2数据表的设计与建立VisualFoxPro6.0数据表分为数据库表和自由表两种,当某一个表不从属于任何一个数据库的时候就是一个自由表。一个自由表可以被添加到某一个数据库中成为从属于该数据库的数据库表;反之,一个从属于某个数据库的数据库表也可以从该数据库中移出,使其成为自由表,两者可以相互转换。下面以建立“教学管理系统”中所涉及的学生档案表XSDA.dbf和成绩表XSCJ.dbf的设计与建立过程为例,具体介绍VisualFoxPro6.0系统中数据表的设计与建立。学生档案表XSDA.dbf和成绩表XSCJ.dbf分别如表3-1和表3-2所示。表3-1学生档案表XSDA.dbf学号姓名性别出生日期是否团员籍贯简历照片00001李平男12/11/78F江苏MemoGen00002陈遥女12/24/80F湖南MemoGen00003李肜女10/16/77F江苏MemoGen00004刘玲女10/15/78F浙江MemoGen00005王国胜男05/05/82T北京memoGen00006王刚男04/21/88T安徽memoGen00007宋海英女10/01/86T浙江MemoGen表3-2成绩表XSCJ.dbf学号高等数学英语计算机基础马哲总分0000185.086.092.095.00000230.077.067.085.00000396.087.095.095.00000441.054.064.085.00000570.069.076.085.00000660.074.071.085.00000762.046.067.075.03.2.1表结构的设计设计表的结构即定义表的字段个数、字段名、字段类型、字段宽度、小数位数、索引和NULL等特征。1、字段名字段名用来标识字段,它是一个以字母或汉字开头,由字母、汉字、数字、下划线组成的字符序列,字段名中不能包含空格,如:XH、学号、姓名、性别、SCORE_JSJ等。自由表中字段名长度不能超过10个字符,数据库表中字段名长度最多可达128个字符。2、字段类型和宽度字段类型决定了存储在字段中的值的数据类型及取值范围。字段可以通过宽度决定允许存储数据的最大字节数。VisualFoxPro6.0中常用的字段类型包括:(1)字符型:可以是英文字母、汉字、数字等各种字符型文本,所占用的宽度为1~254个字节,如学生档案表XSDA中的“姓名”字段的数据类型可以设置成字符型。(2)货币型:货币单位,如商品的价格。货币型数据的表示方法是在数据前加符号$。(3)数值型:可以是正数或负数,也可以是整数或小数,数据长度最多为20位。如成绩表XSCJ中的“高等数学”字段的数据类型可以设置成数值型。(4)浮点型:功能上类似于“数值型”,其长度在表中最长可达20位。(5)日期型:由年、月、日构成的数据类型,如学生档案表XSDA中的“出生日期”字段的数据类型可以设置成日期型。(6)日期时间型:由年、月、日、时、分、秒构成的数据类型,如学生上课的时间。(7)双精度型:双精度数值类型,一般用于要求精度很高的数据。(8)整型:不带小数点的数值类型,其优点在于比其他数值型数据占据的存储空间要小,它只用4个字节,简记I型。(9)逻辑型:值为“真”(.T.)或“假”(.F.),如学生档案表XSDA中的“是否团员”字段的数据类型可以设置成逻辑型。(10)备注型:不定长的字符型文本,如用于存放个人简历等。备注型数据类型的固定长度为4个字节,但实际长度仅受磁盘存储空间限制,并且所保存的数据信息实际上并不存放在表文件中,而是存放在与表文件同名,扩展名为.FPT的文件中。例如,学生档案表XSDA中的“简历”字段由于每个学生的简历长短不一,若把“简历”字段设置成字符型又恐受到字符型最大长度不能超过254个字节的限制,因此,通常把它设置成备注型字段。(11)通用型:用于标记电子表格、文档、图片等OLE对象。与备注型字段一样,通用型这种数据类型的固定长度也为4个字节,但实际长度仅受磁盘存储空间限制,并且所保存的数据信息也是存放在与表文件同名,扩展名为.FPT的文件中。例如,学生档案表XSDA中的“照片”字段的数据类型可以设置成通用型。3、小数位数 只有数值型、双精度和浮点型字段可以规定小数位。小数点和正负号都需在字段宽度中占一位,所以,对于纯小数,其小数位的取值至少应比字段宽度少1位。4、索引指定是否以该字段为关键字建立索引(升序或降序),索引主要用于记录排序。5、NULL指定该字段是否可以接收NULL值(空值),NULL值等价于空值或还没有确定的值,它与0、空串及空格不同。例如,成绩表XSCJ.dbf中的“高等数学”字段,其空值可能表示没有成绩,而数值0表示成绩为0分。.NULL.作为一个值可以给变量赋值,在条件表达式中如遇NULL值,该表达式为假(.F.)。在交互方式中,以Ctrl+0来向一个允许NULL的值的字段中输入NULL值。以学生档案表为例,建立一个数据表XSDA.dbf,其结构如表3-3所示。表3-3“XSDA.dbf”表结构字段名类型宽度小数位数学号字符型(C)5姓名字符型(C)8性别字符型(C)2出生日期日期型(D)8是否团员逻辑型(L)1籍贯字符型(C)10简历备注型(M)4照片通用型(G)43.2.2表结构的建立确定表结构之后,下一步就要根据表3-3建立表的结构。在创建表时,如果当前没有打开任何数据库,则创建的表就是自由表;否则,创建的就是从属于当前数据库的数据库表。在VisualFoxPro6.0中一般通过表设计器来建立表结构,下面就以学生档案表XSDA.dbf为例,介绍通过菜单和命令两种方式来建立其表结构。1、设置默认目录为了方便用户对文件的操作和管理,一般需要将其存放在一固定文件夹中,可通过设置默认目录的方式来完成。如将默认目录设置成:D:\vfp的方式有如下2种:(1)菜单操作方式 ①启动VisualFoxPro6.0,在系统主菜单中,选择“工具”下拉菜单中的“选项”命令,在弹出的“选项”对话框中选择“文件位置”选项卡。②在列表中选择“默认目录”选项,并单击“修改”按钮。③在弹出的“更改文件位置”对话框中,勾选“使用默认目录”复选框,并输入“D:\vfp”,最后单击“确定”按钮保存设置。(2)命令方式SETDEFAULTTOD:\vfp2、菜单操作方式(1)在系统主菜单中,选择“文件”下拉菜单中的“新建”命令或按“Ctrl+N”键,在弹出的“新建”对话框中选择“文件类型”为“表”,然后单击“新建文件”按钮,弹出“创建”对话框,在“输入表名:”文本框中输入表文件的名称为XSDA,并且确认“保存类型”为“表/DBF(*.dbf)”后,单击“保存”按钮,弹出“表设计器”对话框。(2)在“表设计器”对话框中的“字段”选项卡中依次输入已定义好的表XSDA中的字段名、字段类型和字段宽度等。(3)确定输入无误后,单击“确定”按钮,出现“是否现在输入数据记录”对话框。若在对话框中单击“是”按钮即进入数据(记录)输入窗口,用户可直接输入该表的记录;若单击“否”,则系统保存该表的结构,待以后再输入记录。一般选择“是”,依次输入每个学生的记录数据。在数据输入过程中,除备注型字段和通用型字段外其他字段可直接输入数据。备注型字段由于其长度不定,而通用型字段多数是用于存储OLE对象,如图片、声音、电子表格和文字处理文档等,其长度也存在不确定性,因此,这两种字段数据不能同其他类型的字段一样在表“编辑”窗口或“浏览”窗口中直接输入。备注型字段或通用型字段数据的输入方法:①在表“编辑”窗口或“浏览”窗口下,把光标移到备注型或通用型字段上,双击鼠标左键(或直接按“Ctrl+Home”键)即可进入备注型或通用型字段的数据编辑窗口。②若此时输入的是备注型字段的话,则直接在此数据编辑窗口中输入;若输入的是通用型字段的话,则再打开系统主菜单的“编辑”菜单,选择“插入对象”,在弹出的“插入对象”对话框中进行具体操作。③输入全部记录数据后,按“Ctrl+W”键或单击数据编辑窗口的“关闭”按钮保存所输数据,按“Ctrl+Q”键则取消输入。在记录的浏览窗口中,备注型字段值若以“memo”显示,表示当前记录的备注字段内容为空,以“Memo”显示则表示内容不为空;同理,对通用型字段值显示为“gen”或“Gen”。按以上步骤,我们建立了一个有若干条记录,每个记录有8个字段的学生档案表XSDA.dbf。3、命令方式格式:CREATE[<表文件名>]功能:打开表设计器,创建表。说明:(1)如果在该命令之前,打开了数据库,则创建的是数据库表,否则创建的是自由表。(2)若在文件名前指定了路径,则文件建立在指定的路径上,否则建立在当前默认的路径上。(3)<表文件名>指定要创建的表的名称,缺省扩展名为.dbf。不要用A~J单个字母作为表文件名,因为它们是专门用于工作区别名的。(4)若表中定义了备注型字段或通用型字段,则系统会同时建立一个主文件名与表文件同名且以.fpt为扩展名的表备注文件。3.2.3表结构的修改表结构的修改主要包括添加和删除字段;修改字段名称、数据类型、字段宽度、小数位数;是否允许字段为NULL值;添加、删除和修改索引标识等。在VisualFoxpro6.0中表结构的修改主要在表设计器中进行,修改某个表的结构通常首先打开该表文件,然后再打开“表设计器”对话框。1、菜单方式(1)在系统主菜单中,选择“文件”下拉菜单中的“打开”命令或按“Ctrl+O”键,也可以单击工具栏上的“打开”按钮,在“打开”对话框中选择“文件类型”为“表(*.dbf)”,选择表所在的文件夹,找到表文件后,双击要打开的表。(2)在系统主菜单中,再选择“显示”下拉菜单中的“表设计器”命令,在打开的“表设计器”对话框中进行表结构的有关修改。2、命令方式(1)使用USE命令打开表;(2)使用MODIFYSTRUCTURE命令打开“表设计器”对话框,然后修改表结构。3.3数据表的基本操作3.3.1表的打开与关闭1、表的打开表建立好后,若要进行表的操作,如修改表结构、修改表记录或删除表记录等,必须首先打开表,使该表成为当前表。打开表除了可以采用上面介绍过的菜单方式外,还可以使用命令方式。格式:USE[<数据库名!>]<表名>功能:打开表。说明:如果是自由表,则可以直接使用USE<表名>打开。如果是数据库表,可以采用两种命令方式打开,一种是:USE<数据库名!><表名>,另一种是:先用OPENDATABASE<数据库名>打开数据库,然后再用USE<表名>打开表。【例3-3】用命令方式打开数据库JXGL中的数据库表XSDA.dbf(假设文件存放在默认的路径上)。方法一:USEJXGL!XDSA&&“!”与前面的数据库名以及后面的表名之间不能加空格方法二:OPENDATABASEJXGLUSEXSDA2、命令方式关闭表格式:USE功能:关闭当前工作区中的表。3.3.2表记录的浏览1、菜单方式打开要操作的表,在系统主菜单中,选择“显示”下拉菜单中的“浏览”或“编辑”命令,打开表的“浏览”或“编辑”窗口。2、命令方式格式1:BROWSE[FIELDS<字段名表>][FOR|WHILE<条件>]格式2:DISPLAY[<范围>][[FIELDS]<字段名表>][FOR|WHILE<条件>][TOPRINT][OFF]格式3:LIST[<范围>][[FIELDS]<字段名表>][FOR|WHILE<条件>][TOPRINT][OFF]功能:显示已打开表文件的记录内容。其中BROWSE命令执行时打开“浏览”窗口。说明:有“OFF”时,不显示记录号;有“TOPRINT”时,显示内容送打印机打印;有“TOFILE<文件名>”则表示将显示的内容存入指定的文件中保存起来。LIST和DISPLAY命令的区别:(1)省略<范围>时,LIST默认值为ALL,显示所有记录;省略<范围>和<条件>时,DISPLAY默认值为当前记录,即显示一个记录。(2)当显示内容较多时,DISPLAY分页显示;LIST不分页,而是连续地滚动显示。【例3-4】显示学生档案表XSDA.dbf中的记录示例。USEXSDADISPLAY&&显示表XSDA.dbf的当前记录运行结果:记录号学号姓名性别出生日期是否团员籍贯简历照片100001李平男12/11/78.F.江苏MemogenDISPLAYNEXT3FIELDS姓名,是否团员运行结果:记录号姓名是否团员1李平.F.2陈遥.F.3李彤.F.3.3.在VisualFoxPro6.0系统内部,有一个用以确定当前记录的记录指针,记录指针指向哪一个记录,这一个记录就是当前操作的记录,即当前记录。当表打开且没有进行任何操作时,当前记录为第一个记录。表文件一旦打开,表中的记录指针是可以移动的,表记录的定位,实质上就是确定哪一个记录为当前记录。表记录的定位主要有绝对定位(GO或GOTO)和相对定位(SKIP)两种方式。1、菜单方式定位记录首先打开要使用的表;然后在系统主菜单中,选择“显示”下拉菜单中的“浏览”命令;再打开系统主菜单中的“表”菜单,选择“转到记录”,子菜单不同的选项可以将记录指针移动到相应的记录上。2、命令方式定位记录(1)绝对定位(GO)格式:GO<数值表达式>|TOP|BOTTOM 功能:不考虑当前记录指针的位置,将记录指针直接定位到指定的记录上。也就是说,绝对定位命令与当前记录位置无关。说明:①<数值表达式>:指定一个物理记录号,记录指针移至该记录上。<数值表达式>的值必须大于0,且不大于当前表文件的记录个数。②TOP:将记录指针定位在表的第一个记录上。③BOTTOM:将记录指针定位在表的最后一个记录上。(2)相对定位(SKIP)格式:SKIP[<数值表达式>]功能:从当前记录开始向前或向后移动记录指针,<数值表达式>表示移动记录的个数。说明:若<数值表达式>的值为负数,则记录指针向前移动,若<数值表达式>的值为正数,则记录指针向后移动。使用不带参数的SKIP命令将使记录指针向后移动一个记录,即SKIP等价于SKIP1。【例3-5】绝对定位和相对定位命令的使用示例。CLEAR&&清屏:清除整个屏幕,光标回到屏幕左上角USEXSDASKIP5&&将记录指针下移5个记录DISPLAY&&显示当前记录,即第6条记录7&&将记录指针绝对定位至7号记录DISPLAYSKIP-2&&将记录指针上移2,即第5条记录LISTNEXT3&&从当前记录第5条记录开始,连续显示3个记录运行结果:记录号学号姓名性别出生日期是否团员籍贯简历照片600006王刚男04/21/88.T.安徽memogen记录号学号姓名性别出生日期是否团员籍贯简历照片700007宋海英女10/01/86.T.浙江MemoGen记录号学号姓名性别出生日期是否团员籍贯简历照片500005王国胜男05/05/82.T.北京memogen600006王刚男04/21/88.T.安徽memogen700007宋海英女10/01/86.T.浙江MemoGen3.3.4表记录的修改1、在“浏览”窗口修改表记录用菜单方式或BROWSE命令打开“浏览”窗口,在“浏览”窗口中可进行全屏幕编辑修改表记录,修改完毕,按“Ctrl+W”键或单击“关闭”按钮存盘退出“浏览”窗口。2、在“编辑”窗口中修改表记录格式:EDIT[<范围>][FIELDS<字段名表>][FOR|WHILE<条件>]CHANGE[<范围>][FIELDS<字段名表>][FOR|WHILE<条件>]功能:这两条命令的格式、功能相同,以竖直编辑窗口显示、编辑与修改表中的记录。说明:执行命令后,系统打开“编辑”窗口,以竖直格式显示各个字段的内容,此时,可对记录内容进行修改。3、用REPLACE命令直接修改表记录REPLACE是系统自动修改命令,它可快速修改一批记录的数据,在命令操作或程序控制中十分有用。 格式:REPLACE[<范围>]<字段名1>WITH<表达式1>[ADDITIVE][,<字段名2>WITH<表达式2>[ADDITIVE]…][FOR<条件>|WHILE<条件>]功能:不进入全屏幕编辑方式,根据命令中指定的条件和范围,用表达式的值去更新指定字段的内容。说明:(1)<字段名1>WITH<表达式1>[,<字段名2>WITH<表达式2>…]:指定用<表达式1>的值来代替<字段名1>字段中的数据,用<表达式2>的值来代替<字段名2>字段中的数据,依此类推。(2)<范围>:指定要替换的记录范围。FOR<条件>:指定要进行替换字段值的记录应满足的条件。注意:当<范围>、<条件>都缺省时,REPLACE命令仅对当前记录操作。(3)ADDITIVE:把对备注字段的替代内容追加到备注字段原内容的后面。ADDITIVE只对替换备注字段有用。如果省略ADDITIVE,则用表达式的值改写备注字段原有内容。【例3-6】REPLACE命令使用示例,计算成绩表XSCJ.dbf所有同学的“总分”字段值。CLOSEALL USEXSCJREPLACE总分WITH英语+高等数学+计算机基础+马哲ALL注意:此例子中的REPLACE命令一定要加范围子句ALL,因为在缺省情况下,REPLACE命令仅对当前记录操作,而不是全部记录。3.3.5表记录的追加与插入 记录的追加就是在当前打开的表文件尾部,追加一些新的记录。使用菜单方式和APPEND命令均可实现追加新记录的功能。若要在表文件的任意位置插入新记录,则可使用INSERT命令。1、菜单方式追加表记录方法一:打开表,进入“浏览“窗口,然后在系统主菜单中,选择“表”下拉菜单中的“追加新记录”命令或单击快捷键“Ctrl+Y”,此时便在表尾追加了一条新的空记录,用户即可向该空记录中输入数据。若要再追加一条记录,重复操作即可。方法二:打开表,进入“浏览“窗口,然后在系统主菜单中,选择“显示”下拉菜单中的“追加方式”命令,则在记录录入时,系统又自动追加另一条空记录供用户录入,直至追加完成,这种方法可以连续追加多条记录。2、命令方式追加表记录格式:APPEND[BLANK]功能:在当前打开的表文件尾部追加记录。说明:BLANK是可选项,无此项时,在表末尾追加一条空白记录,同时打开“编辑”窗口可对该空白记录进行编辑;有此项时,系统只在表末尾追加一条空白记录,但不马上进入“编辑”窗口,用户其后可以使用BROWSE、CHANGE、EDIT或REPLACE命令编辑该空白记录。【例3-7】打开学生档案表XSDA.dbf,向其中追加一条空白记录,然后用REPLACE命令编辑该记录的“学号”字段值为“00008”,“姓名”字段值为“马林”,“性别”字段值为“男”。CLOSEALLUSEXSDAAPPENDBLANK&&在表XSDA尾部追加一条空白记录REPLACE学号WITH”00008”,姓名WITH”马林”,性别WITH”男3、外部追加将另一个表文件的记录追加到当前表的尾部。(1)菜单方式首先打开表,然后在系统主菜单中,选择“显示”下拉菜单中的“浏览”命令,再在系统主菜单中,选择“表”下拉菜单中的“追加记录(A)...”,打开“追加来源”对话框。(2)命令方式格式:APPENDFROM<表文件名>|?[FIELDS<字段名表>]功能:将其他表文件中的记录追加到当前表的尾部。说明:如含FIELDS<字段名表>,则仅追加指定的字段。4、记录的插入格式:INSERT[BEFORE][BLANK]功能:在当前表中插入一个新记录。说明:①无任何选项时,在表的当前记录之后添加一个新的记录,同时打开“编辑”全屏幕窗口,供用户编辑该记录数据。②含“BEFORE”选项时,新记录插入在当前记录的前面。③含“BLANK”选项时,不进入“编辑”窗口,而是自动插入一条空白记录。3.3.6表记录的删除与恢复在VisualFoxPro6.0中提供了逻辑删除和物理删除两种删除方式。对记录的删除需分两步进行:先对欲删除的记录标上删除标记(即逻辑删除),然后再将带删除标记的记录一次性从表中清除(即物理删除)。逻辑删除是为了防止误删除操作,只是在要删除的记录前加上删除标记,经逻辑删除的记录仍存在于数据表内,用户还可以将其恢复,即去除删除标记,而物理删除是将记录真正地删除,无法恢复。1、记录的逻辑删除与恢复 首先打开一个表,然后在系统主菜单中,选择“显示”下拉菜单中的“浏览”命令,打开表“浏览”窗口。(1)直接用鼠标操作①逻辑删除单击要删除的记录的左侧矩形域,该区域就变黑,即表示该记录已被标上删除标记,下图表示学号为“00004”的记录被逻辑删除。用此方法也可给多条记录加上逻辑删除标记。②恢复记录标上删除标记的记录只是逻辑上被“删除”,并未从表中真正删除,若想恢复被逻辑删除的记录(即取消删除标记),可用鼠标再次单击记录左侧矩形域,黑色矩形域会变白,即恢复记录。(2)菜单方式若要一次删除一组特定条件和范围的记录,可在系统主菜单中,选择“表”下拉菜单中的“删除记录(D)...”命令,在弹出的“删除记录”对话框中输入删除记录的作用范围和条件,单击“删除”按钮即可。若要一次恢复满足一定条件和范围的记录,可从“表”菜单中选择“恢复记录(E)...”命令,在弹出的“恢复记录”对话框中输入恢复记录的作用范围和条件,单击“恢复记录”按钮即可。2、记录的物理删除若要从表中彻底删除标有删除标记的记录,可在系统主菜单中,选择“表”下拉菜单中的“彻底删除(M)”命令,在弹出的“确认删除”对话框中若单击“是”按钮,将彻底删除标有删除标记的记录,被删除的记录将无法再恢复。3、删除与恢复记录的命令方式(1)逻辑删除记录格式:DELETE[<范围>][FOR<条件>|WHILE<条件>]功能:对当前表文件中指定范围内满足条件的记录加删除标记。用户若用LIST显示表记录,会看到记录号和第一个字段名间出现“*”号(删除标记)。若省略<范围>和<条件>,则只给当前记录加删除标记。说明:可以用SETDELETEDON命令将作过删除标记的记录暂时“隐藏”起来,以后要消除“隐藏”,只要输入SETDELETEDOFF命令即可。(2)恢复逻辑删除的记录格式:RECALL[<范围>][FOR|WHILE<条件>]功能:恢复满足一定条件和范围的记录。无任何选项时,只恢复当前记录。(3)物理删除有删除标记的记录格式:PACK功能:把作过逻辑删除标记的记录从表文件中永久删除,并将记录号重新排列。(4)物理删除表中全部记录格式:ZAP功能:物理删除当前表文件中的所有记录,仅保留表的结构。它相当于执行DELELEALL和PACK两条命令。【例3-8】删除记录示例。CLOSEALLUSEXSDACLEAR&&清屏LIST&&显示表的全部记录GO2&&定位到第二条记录DELETE&&逻辑删除当前记录DELETEALLFOR是否团员=.F.&&将不是团员的所有记录标删除标记LISTRECALLALL&&恢复所有标删除标记的记录LISTGO6DELETEPACK&&物理删除标删除标记的记录LIST3.3.7表与表结构的复制对已有的表进行复制以得到它的一个副本,是保护数据安全的措施之一。1、复制任何类型文件命令格式:COPYFILE<文件名1>TO<文件名2>功能:从<文件名1>文件复制得到<文件名2>文件。说明:(1)若对表进行复制,该表必须处于关闭状态。(2)<文件名1>和<文件名2>都可使用通配符*号和?号。2、从表复制出表或其他类型的文件命令格式:COPYTO<文件名>[范围][FOR<条件1>][WHILE<条件2>][FIELDS<字段名表>|FIELDSLIKE<通配字段名>|FIELDSEXCEPT<通配字段名>][[TYPE][SDF|XLS|DELIMITED[WITH<定界符>|WITHBLANK|WITHTAB]]]功能:将当前表中选定的部分记录和部分字段复制成一个新表或其他类型的文件。说明:(1)首先要打开原表。(2)对于含有备注型字段的表,系统在复制扩展名为.dbf文件的同时自动复制扩展名为.fpt的备注文件。(3)复制所得的新表必须被打开,也即被选作为当前表后才可进行表的操作。(4)新文件的类型除了可以是表之外,还可以是系统数据格式、定界格式等文本文件或MicrosoftExcel文件。若不含TYPE子句,默认新文件的类型是表。【例3-9】分别利用COPYFILE和COPYTO命令复制学生档案表XSDA.dbf。设表有相应的备注型文件XSDA.fpt,注意这两个命令在复制表文件时有什么区别。CLOSEALLCOPYFILEXSDA.DBFTOXSDA1.DBFCOPYFILEXSDA.FPTTOXSDA1.FPTUSEXSDA1LISTCOPYTOXSDA2USEXSDA2LIST分析:通过此例,可以看出在复制表文件时,尤其是表有备注型字段或通用型字段时,用COPYTO命令比用COPYFILE命令要方便。3、复制表结构格式:COPYSTRUCTURETO<表文件名>[FIELDS<字段名表>]功能:将当前打开的表文件结构的部分或全部复制产生<表文件名>所指定的表结构,此命令仅复制当前表的结构,不复制其中的数据。说明:FIELDS<字段名表>:指定在新表中包含的字段及顺序。若省略该子句,则按字段原来的顺序复制全部字段。3.1、将数组各个元素的数据值传输到表中当前记录的指定字段中格式:GATHERFROM<数组名>[FIELDS<字段名表>][MEMO]功能:将数组中各个数组元素的内容依次复制到表的当前记录指定的字段中。【例3-10】利用GATHERFROM命令修改成绩表XSCJ的第7条记录,将第7条记录的英语、高等数学以及计算机基础成绩分别修改成56分、70分和75分。DIMENSIONX(3)X(1)=56X(2)=70X(3)=75USEXSCJGO7GATHERFIELDS英语,高等数学,计算机基础FROMXDISPLAY2、将数据表中当前记录的指定字段值传输到数组的各个元素中格式:SCATTER[FIELDS<字段名表>][MEMO]TO<数组名>[BLANK]功能:将表的当前记录从指定字段名表中的第一个字段内容开始,依次复制到数组中的各个数组元素中。【例3-11】利用SCATTERTO命令将学生档案表XSDA.dbf的第5条记录的学号、姓名、出生日期以及团员否字段的值传输到数组X中。USEXSDAGO5SCATTERFIELDS学号,姓名,出生日期,团员否TOX?X(1),X(2),X(3),X(4)3.4排序与索引3.4.1排序1、基本概念排序是将已建好的表记录按某一关键字规定的顺序重新排列,并将重新排列后的结果保存为一个新的表文件,但原文件不变。这个新的表文件内容可同原来的表文件完全相同,也可以是原来表文件中的一部分。2、排序命令格式:SORTTO<新文件名>ON<字段名1>[/A][/C][/D][,<字段名2>[/A][/C][/D]...][<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]功能:对当前表记录,按用户指定的字段值重新排序,生成一个以<新文件名>命名的表文件。说明:(1)新文件的默认扩展名为.dbf。(2)字段可以是N,C,D,L,但不能是M,G。若有多个排序字段时,先按命令中<字段名1>的值顺序排列,<字段名1>值相同则按<字段名2>值的顺序排列,依次类推。其中<字段名1>称为主关键字,这种排序也称为多重排序。(3)/A表示按升序排列,/D表示按降序排列,缺省时为升序;/C表示排序时字母不分大小写,它应用于C型字段,若/C和/A或/D结合使用,只需要一个斜线,如/AC或/DC。(4)<范围>用于限定SORT命令的作用范围,可为ALL、NEXTN、RECORDN、REST之一,缺省时为ALL。(5)若有FIELDS项,则生成的新表文件中只含<字段名表>中的字段;否则,结构与当前表文件相同。【例3-12】对成绩表XSCJ.dbf按“总分”字段值升序排序,排序后生成的的排序文件名为XSCJ1.dbf,且只有学号和总分2个字段。CLOSEALLCLEARUSEXSCJLISTSORTTOXSCJ1ON学号FIELDS学号,总分USEXSCJ1BROWSE运行结果如下图所示。注意:排序文件建立后,如果要使用该排序文件必须首先打开它,例如用USE命令打开。3.4.2索引 1、基本概念记录在数据文件中实际存放的顺序称为记录的物理顺序(记录号反映了记录存放的先后顺序),而把数据打开后列表显示的顺序称为记录的逻辑顺序(排列顺序)。执行排序后,在新文件中形成了新的物理顺序;索引文件则不同,它不改变记录的物理顺序,而是按某个索引关键字(又称为索引表达式)与表记录建立一种逻辑关系。索引和表分别存储在两个文件中。在索引文件中,只包括索引关键字和记录号两项内容,所有关键字值按升序或降序排列,每个关键字值对应原表文件的一个记录号,这样便确定了记录的逻辑顺序。在使用时,只要知道索引关键字的值,就能通过相应的记录号索引到该记录在原表中的数据。对同一个表,可根据不同的处理要求建立多个不同的索引文件。索引文件建立以后,也要打开才能使用。索引文件打开以后,记录指针的移动、定位、记录的显示和处理将按索引关键字指定的顺序(逻辑顺序)进行。由于索引文件是依赖于表文件而存在的,所以,索引文件不可单独使用,必须在打开表的同时或之后打开索引文件。2、索引文件的类型在VFP中,索引文件可以分为两大类:单索引文件(.idx)和复合索引文件(.cdx),复合索引文件又分为结构复合索引文件和非结构复合索引文件。(1)单索引文件单索引文件只包含一个索引,扩展名为.idx。VFP中提供的单索引文件主要是为了与以前低版本(如早期版本的FoxBASE+)兼容而使用的。(2)复合索引文件 复合索引文件可以包含多个索引,每个索引有一个“索引标识”,代表一种记录的逻辑顺序,扩展名为.cdx。在复合索引文件中,每一个索引标识等价于一个单索引文件。3、索引类型索引可分为主索引、候选索引、普通索引、惟一索引4种类型。(1)主索引(PrimaryIndex)作为主索引的索引关键字,其在表中的值是惟一能够标识每个记录的值,它强调“不允许出现重复值或空值”。只有数据库表能够建立主索引,并且一个数据库表只能建立一个主索引。(2)候选索引(CandidateIndex)候选索引与主索引具有相同的特性。与主索引不同的是,数据库表和自由表均可建立候选索引,并且一个表可以建立多个候选索引。当数据库表中无主索引时,可以指定一个候选索引为主索引。主索引和候选索引能控制表中字段重复值的输入,确保字段输入值的惟一性。(3)普通索引(RegularIndex)是一种常规的索引类型,主要用于逻辑排序,以便快速查询。作为普通索引的索引关键字,其表中不同记录的对应值可重复。数据库表和自由表均可建立普通索引,一个表可以建立多个普通索引。(4)惟一索引(UniqueIndex)作为惟一索引的索引关键字,其表中不同记录的对应值可重复,但在索引文件中仅保存重复值记录的第一个,即索引文件中的记录值惟一。数据库表和自由表均可建立惟一索引,一个表可以建立多个惟一索引。例如,对于学生档案表XSDA.dbf,如果把“性别”字段作为惟一索引关键字,则显示第一个男生的记录和第一个女生的记录。通常,主索引用于主关键字字段;候选索引用于那些不作为主关键字但字段值又必须惟一的字段;普通索引用于一般的提高查询速度;惟一索引用于一些特殊的程序设计。4、建立索引(1)在表设计器中建立索引在表设计器中有“字段”、“索引”和“表”三个选项卡。用户在“字段”选项卡中可以直接指定字段,选择索引下拉列表中的选项,确定升序或降序,则在对应的字段上建立了一个索引名和索引表达式都与字段同名的普通索引。若要建立其他类型的索引,操作方法是在“表设计器”窗口,选择“索引”选项卡,再选择以下参数或按钮建立索引或撤消索引。参数说明:①在排序选项中,选择索引方向,升序(↑)或降序(↓)。排序按钮是一个开关按钮,按一下为升序,再按一下又变为降序,只能在两种状态间切换。②在索引名选项中,输入索引标识名。③在类型选项中,选择索引类型。④在表达式选项中,输入索引字段名,或者索引表达式。“表达式”:即索引关键字,索引表达式可以仅包含一个字段,也可以是多个字段的组合,如:姓名+DTOC(出生日期),即按“姓名”索引,如姓名相同则按“出生日期”索引。“表达式”可以直接输入,也可以通过单击“生成器”按钮,进入“表达式生成器”对话框中生成。⑤在筛选选项中,可以输入筛选条件,则索引表达式只对经过筛选条件过滤后满足条件的记录作索引。筛选条件是一个逻辑表达式,相当于命令中的FOR条件。【例3-13】以学生档案表XSDA.dbf中的“学号”字段建立主索引(升序),“姓名”字段建立普通索引(降序)。建立方法如下:①打开数据库表XSDA.dbf,在系统主菜单中,选择“显示”下拉菜单中的“表设计器”命令,打开“表设计器”对话框。②在“表设计器”对话框中,选择“索引”选项卡,设置“学号”字段为升序(↑),“姓名”字段为降序(↓),如上图所示。③最后,单击“确定”按钮保存设置。(2)命令方式建立索引建立单索引格式:INDEXON<索引表达式>TO<索引文件名>[.IDX][FOR<条件>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]功能:为当前表建立一个单索引文件。说明:①ON<索引表达式>:指定索引关键字,它是索引排序的依据,可由表中的字段、内存变量或数组来构成。②TO<索引文件名>:生成一个以索引文件名命名的单索引文件(IDX)。③FOR<条件>:指定一个条件,索引文件只为那些满足条件的记录创建索引关键字。④注意:单索引只能按照表达式的值建立升序索引。⑤UNIQUE|CANDIDATE:“UNIQUE”指定惟一索引,即索引文件中只包含索引关键字相同的第一个记录;“CANDIDATE”指定候选索引。⑥ADDITIVE:所有先前已打开的索引文件仍保持打开状态。如省略,则自动关闭先前已打开的索引文件,结构复合索引文件除外。建立复合索引文件复合索引文件可以包含多个索引,每个索引有一个“索引标识”。格式:INDEXON<索引表达式>TAG<索引标识名>[OF<非结构CDX文件名>][FOR<条件>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]功能:对当前表中符合条件的记录按照索引表达式值的升序或降序建立指定的索引标识。①TAG<索引标识名>:索引标识名只要是合法的标识符即可,不一定非要和相应的字段同名。例如,在例3-13中,为姓名字段建立一个降序索引时,索引标识名不一定要起姓名,也可取名XM。②[ASCENDING|DESCENDING]:ASCENDING指建立升序索引,默认值;DESCENDING指建立降序索引。③结构复合索引文件不需要给出文件名,它与表同名。若要建立非结构复合索引文件,必须使用OF参数指明非结构复合索引文件名;缺省OF子句则建立结构复合索引文件。【例3-14】对成绩表XSCJ.dbf中的记录按总分的降序建立一个单索引文件。对学生档案表XSDA.dbf按“姓名”字段(升序)建立结构复合索引文件的一个索引标识XM,索引类型为普通索引;按“性别”字段(降序)建立结构复合索引文件的另一个索引标识XB,索引类型为惟一索引。CLOSEALLUSEXSCJINDEXON1000-总分TOXSCJBROWSEUSEXSDAINDEXON姓名TAGXMBROWSEINDEXON性别TAGXBDESCUNIQUEBROWSE三条BROWSE命令的依次运行结果如下图所示:5、打开索引文件要使用索引进行查询,必须打开表与索引文件。建立索引文件时,刚建立的单索引文件和复合索引文件由系统自动打开。若重新打开表,则结构复合索引文件随着相关表的打开而自动打开,而单索引文件和非结构复合索引文件不会随着相关表的打开而自动打开,要由用户打开。(1)若索引文件已经建立,可在打开表文件的同时打开索引文件。格式:USE<表文件名>INDEX<索引文件名表>功能:打开表的同时打开一个或多个索引文件。说明:<索引文件名表>:指定要打开的一个或多个索引文件,多个索引文件之间要用逗号分隔,第一个索引文件自动成为主控索引文件。(2)若索引文件已经建立,且表文件已经打开,需单独打开索引文件。格式:SETINDEXTO<索引文件名表>[ADDITIVE]功能:打开当前表的一个或多个索引文件。6、设置当前索引一个表可以打开多个相关的索引文件,同一个复合索引文件中也可能包含多个索引标识,但任何时候只有一个索引文件起作用,在复合索引中也只能有一个索引标识起作用。当前起作用的索引文件称为主控索引文件,当前起作用的索引标识称为当前索引(又称为主控索引),就是控制当前显示顺序的索引。若单索引文件成为主控索引文件,记录的显示和处理将按其索引顺序进行;若复合索引文件成为主控索引文件,还需进一步确定当前索引。因此,使用索引的一般步骤:打开表;打开索引文件;如果只打开一个索引文件,它自然就是主控索引文件,否则就要确定主控索引文件;若当前主控索引文件是某一个复合索引文件还需进一步确定它的哪一个索引标识是当前索引。格式:SETORDERTO[<索引序号>|<IDX文件名>|[TAG]<索引标识名>[OF<CDX文件名>]]功能:在打开的索引文件中指定主控索引文件,或在打开的复合索引文件中设置当前索引。说明:(1)<索引序号>:是建立索引的先后顺序号,较难记忆,不建议使用。(2)<IDX文件名>:指定某个单索引文件作为主控索引文件。(3)<索引标识名>:若复合索引文件为主控索引文件,还需进一步确定它的哪一个索引标识是当前索引。(4)SETORDERTO0或SETORDERTO都是取消主控索引文件或当前索引。也可在打开表文件时使用命令USE<表文件名>ORDER<索引标识名>来指定结构复合索引文件中的某个索引标识为当前索引。【例3-15】打开索引文件和设置当前索引示例。CLOSEALL USEXSCJLISTSETINDEXTOXSCJ&&打开单索引文件XSCJ,即当前的主控索引文件LISTUSEXSDAORDERTOXM&&设置结构复合索引文件中的XM索引标识为当前索引LISTSETORDERTOXB&&设置结构复合索引文件中的XB索引标识为当前索引LISTSETORDERTO&&取消当前索引LIST&&记录还是按物理顺序显示7、更新索引(1)自动更新当表中的数据发生变化时(如对其进行了插入、删除、添加或更新操作),所有当前已打开的索引文件都会随数据的改变而自动改变记录的逻辑顺序,实现索引文件的自动更新。(2)重新索引若修改表中记录之后再打开索引文件,可在打开需要重新索引的全部索引文件后,使用如下命令重新索引。也可以使用INDEXON命令重新建立索引。格式:REINDEX【例3-16】更新索引示例。CLOSEALLUSEXSDALISTAPPENDBLANKREPLACE学号WITH"00008",姓名WITH"马林",性别WITH"男",出生日期;WITH{^1982/07/27},是否团员WITH.T.,籍贯WITH"北京"SETORDERTOXMBROWSE此BROWSE命令的运行结果如下图所示:说明:XM是结构复合索引的一个索引标识,由于结构复合索引文件XSDA.cdx随着表文件XSDA.dbf的打开而打开,因此虽然表XSDA增加了一条记录,但它可以实现自动更新。USEXSCJGO6REPLACE数学WITH80,总分WITH高等数学+英语+计算机基础+马哲SETINDEXTOXSCJBROWSE此BROWSE命令的运行结果如下图所示:说明:单索引文件不能随着表的打开而自动打开。本例中在对表文件XSCJ.dbf的第6个记录的数学字段值进行修改时,单索引文件XSCJ.idx处在关闭状态,因此在修改XSCJ表记录之后用SETINDEXTOXSCJ命令打开它,再用BROWSE命令显示时可看出单索引文件XSCJ.idx(按总分字段的降序索引)不能自动更新(总分为310分的记录的逻辑顺序仍然排在总分为300分的后面)。REINDEXBROWSE此BRWOSE命令的运行结果如下图所示:说明:若修改表中记录之后再打开索引文件,可在打开需要重新索引的全部索引文件后,使用REINDEX命令重新索引。8、删除索引单索引文件可采取删除文件的方法直接删除。格式:DELETEFILE<索引文件名>功能:删除一个单索引文件。此命令需遵循先关闭索引文件后再删除的原则。复合索引文件可用下列命令删除。格式:DELETETAG<索引标识名>|ALL[OF<CDX文件名>]功能:将当前打开的复合索引文件中的指定索引标识删除。说明:(1)DELETETAG<索引标识名>:删除复合索引文件中的指定索引标识。(2)DELETETAGALL:删除复合索引文件中的所有索引标识,此时,复合索引文件将不复存在。对于复合索引文件,也可以在表设计器中删除索引标识。【例3-17】删除索引示例。CLOSEALLUSEXSDADELETETAGXBMODIFYSTRUCTUREDELETETAGALLMODIFYSTRUCTURE 9、关闭索引文件格式1:USE功能:关闭表文件的同时,也关闭了所有已打开的索引文件。格式2:SETINDEXTO功能:关闭所有已打开的索引文件,但表文件仍处于打开状态。格式3:CLOSEINDEX功能:功能同SETINDEXTO命令。3.5数据查询查询就是在表中查找用户指定条件的记录和字段。VisualFoxPro6.0提供了2种查询方法:一种是顺序查询,另一种是索引查询。3.5.1顺序查询顺序查询(也称为直接查询)是指在表文件中依次查找满足条件的记录,包括LOCATE和CONTINUE两条命令。格式:LOCATE[<范围>]FOR<条件>CONTINUE功能:LOCATE命令是在指定范围内查找满足条件的记录。若找到,则将记录指针指向满足条件的第一个记录;否则,记录指针指向文件末尾。若要使记录指针指向满足条件的下一条记录,则使用CONTINUE命令,CONTINUE可多次使用,没有再满足条件的记录,则记录指针指向文件末尾。说明:(1)<范围>缺省为ALL。(2)若查找到一个满足条件的记录可用函数RECNO()返回该记录号,此时函数FOUND()返回值为.T.,EOF()返回值为.F.;否则,记录指针指向文件末尾,函数RECNO()返回值为该表文件总记录数加1,FOUND()返回值为.F.,EOF()返回值为.T.。【例3-18】在学生档案表XSDA.dbf中(共有7条记录)按顺序查找籍贯为江苏的所有同学记录。CLOSEALLUSEXSDALOCATEFOR籍贯=”江苏”?FOUND()&&显示是否找到记录,本例中结果为.T.?RECNO()&&显示当前记录号,本例中结果为1DISPLAY&&显示找到的记录DISPLAY的运行结果如下:记录号学号姓名性别出生日期是否团员籍贯简历照片100001李平男12/11/78.F.江苏MemoCONTINUE&&继续查找?FOUND()&&本例中结果为.T.?RECNO()&&本例中结果为3DISPLAYDISPLAY的运行结果如下:记录号学号姓名性别出生日期是否团员籍贯简历照片300003李彤女10/16/77.F.CONTINUE?FOUND()&&本例中结果为.F.?RECNO()&&本例中结果为83.5.2索引查询索引查询是依赖二分法算法实现的,它按记录的逻辑顺序查询,速度很快,又称为快速查询,但它需要事先对表建立索引文件。索引查询的命令有FIND和SEEK,FIND是为了与旧版本兼容而保留的,SEEK的用法较灵活,这里只介绍SEEK命令。格式:SEEK<表达式>功能:在已确定当前索引的表文件中快速查找满足<表达式>值的第一个记录。说明:(1)<表达式>指定SEEK搜索的索引关键字表达式,可查询C、N、D和L型数据,注意:C、D和L型数据要加相应的定界符。(2)必须先打开索引并确认相应的主控索引后才能使用。(3)当表中有多个满足条件的记录时,指针定位在第一条满足条件的记录上,用SKIP可定位到下一条。(4)如果查找成功,则函数RECNO()可返回该记录的记录号,此时函数FOUND()返回值为.T.,EOF()返回值为.F.;否则,记录指针指向文件末尾,此时函数RECNO()的值为表文件总记录数加1,FOUND()返回值为.F.,EOF()返回值为.T.。【例3-19】索引查找示例。CLOSEALLUSEXSDAINDEXON姓名TAGXMINDEXON出生日期TAGCSRQSETORDERTOXM&&设置标识为XM的索引为主控索引SEEK”李彤”&&查找姓名为李彤的记录?RECNO()DISPLAYSETORDERTOCSRQ&&设置标识为CSRQ的索引为主控索引SEEK{^1988/04/21}&&查找出生日期为{^1988/04/2?RECNO()DISPLAY运行结果:3记录号学号姓名性别出生日期是否团员籍贯简历照片300003李彤女10/16/77.F.江苏Memogen6记录号学号姓名性别出生日期是否团员籍贯简历照片600006王刚男04/21/88.T.安徽memogen3.6数据统计对表中的数据进行各种统计和汇总是数据库应用的重要内容。VisualFoxPro6.0提供了计数(COUNT)、求和(SUM)、求平均值(AVERAGE)、计算(CALCULATE)和分类汇总(TOTAL)等命令以完成数据的统计处理工作。3.6.1统计记录个数命令格式:COUNT[<范围>][FOR<条件>][WHILE<条件>][TO<内存变量>]功能:统计当前表中指定范围内满足条件的记录个数,并存于指定的<内存变量>中。说明:(1)<范围>缺省为ALL。(2)若使用可选项TO<内存变量>,可将统计结果送到内存变量中保存,否则将统计结果显示在屏幕上。【例3-20】分别统计学生档案表XSDA.dbf中的学生总人数、男同学以及女同学的人数。USEXSDACOUNTTOn ?nCOUNTFOR性别=”男”TOboy?boyCOUNTFOR性别=”女”TOgirl?girl运行结果:7 343.6.2求和命令格式:SUM[<数值表达式表>][<范围>][FOR<条件>][WHILE<条件>][TO<内存变量表>|TOARRAY<数组>]功能:在当前表中,对指定范围内给定条件的数值型字段或含数值型字段的数值表达式进行纵向求和计算,并将结果存入指定的内存变量或数组中。说明:(1)<范围>缺省为ALL。(2)若使用可选项<数值表达式表>,则只对<数值表达式表>中的各表达式累加求和,数值型字段之间或表达式之间用逗号分隔开;否则对所有数值型字段进行纵向求和。(3)TO<内存变量表>是将求和的结果依次存入各内存变量中。<数值表达式表>中的表达式的个数应该与内存变量表中的变量个数相等;若省略<数值表达式表>,内存变量的个数应该与数值型字段的个数相等。(4)TOARRAY<数组>可将求出的各表达式的值存放于指定的数组中,一个数组元素等同于一个内存变量。【例3-21】分别求成绩表XSCJ.dbf中全班高等数学、英语、计算机基础、马哲课程的成绩和。USEXSCJSUM高等数学,英语,计算机基础,马哲TOARRAYSCORE?SCORE(3)运行结果:高等数学英语计算机基础马哲464.00493.00532.00605.00532.003.6.3求平均值命令 格式:AVERAGE[<数值表达式表>][<范围>][FOR<条件>][WHILE<条件>][TO<内存变量表>|TOARRAY<数组>]功能:对当前表中指定范围内满足条件的记录的数值型字段求算术平均值,并将结果存入指定的内存变量或数组中。相关参数和选项的含义:同SUM命令。【例3-22】分别求成绩表XSCJ.dbf中全班高等数学、英语、计算机基础以及马哲课程的平均成绩。USEXSCJAVERAGE高等数学,英语,计算机基础,马哲运行结果:高等数学英语计算机基础马哲66.2970.4376.0086.433.6.格式:CALCULATE<表达式表>[范围][FOR<条件>][WHILE<条件>][TO<内存变量表>|TOARRAY<数组>]功能:在当前表中分别计算指定范围内满足条件的<表达式表>的值,并将计算结果存入指定的内存变量或数组中。说明:在表达式中,重点掌握cnt(),sum(),avg(),max(),min()等函数的使用。【例3-23】分别计算学生档案表XSDA.dbf中男同学的人数和平均年龄。USEXSDACALCULATEcnt(),avg(year(date())-year(出生日期))FOR性别="男"TOboy,nl?“男生人数”,“平均年龄”?boy,nl3.6.格式:TOTALON<分类关键字>TO<文件名>[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]功能:按关键字对当前表文件的数值型字段进行分类汇总,即先分类再求和,结果存入<文件名>表示的新生成的表文件中。说明:(1)该命令将产生一个新的表文件。它将已打开的表的某些数值型字段的内容按照关键字相同的原则进行汇总,汇总结果放在一个汇总表内,汇总表名由用户在必选参数<文件名>里指定。对被汇总的表文件必须按关键字进行排序或索引。(2)FIELDS选择项是选择要参加汇总的数值型字段,缺省时对当前表中所有数值型字段合计。(3)<范围>缺省为ALL。(4)生成的汇总表中不含“备注型”字段。(5)凡未求和的字段,在新表文件中生成记录的字段值等于其第一个记录的字段值;而在被求和的字段上,生成记录的字段值等于求和的结果,若其结果超过了该字段的宽度,将会产生数据溢出错误,数据被丢失,并在汇总表文件中以星号“*”填满该字段。【例3-24】给前面的成绩表XSCJ.dbf增加一个“性别”字段,然后按性别分类统计男女同学的“总分”字段之和。CLOSEALLUSEXSCJINDEXON性别TAGXBTOTALON性别TOXSDAZFFIELDS总分USEXSCJZFLISTLIST命令的运行结果如下:记录号学号性别高等数学英语计算机基础马哲总分100001男85.086.092.095.0968.0200002女30.077.067.085.01126.03.7多工作区操作3.7.1工作区1、基本概念(1)工作区概述工作区就是用来存放表的内存空间。VisualFoxPro6.0提供了32767个工作区,编号从1到32767。在某一时刻每一个工作区中最多只有一个表处于“工作”状态,可以对该表进行各种操作。在一个工作区中已打开了一个表,若再打开另一个表,则原先被打开的表将自动关闭。反之,一个表只能在一个工作区打开,若在其未关闭时若试图在其他工作区中打开它,VisualFoxPro6.0会显示出错信息“文件正在使用”。(2)工作区的标识VisualFoxPro6.0采用下述3种方式区分设置的多个工作区:①系统提供数字1~32767作为工作区的标识,系统启动初始,默认当前工作区标识为1。②前10个工作区除使用1~10作为编号外,还可依次用A~J这10个字母来表示,后者也称为工作区别名。③在工作区打开的表也有别名,可用“USE<表文件名>ALIAS<别名>”来指定。如命令“USEXSDAALIASDA”即指定DA为表XSDA.dbf的别名。若在打开表文件时没有指定其别名,则表文件名也可以被默认为其所在工作区的别名,例如,设表XSDA.dbf当前在2号工件区打开且没有别名,则此时2号工作区的别名可以是字母B,也可以是表文件名XSDA。2、选择工作区可以先选择工作区,然后再打开表,也可以在打开表的同时选择工作区。(1)选择工作区的命令格式:SELECT<工作区号>|<别名>功能:通过工作区编号或别名选定某个工作区作为当前工作区。说明:①用SELECT命令选定的工作区称为当前工作区,VisualFoxPro6.0默认1号工作区为当前工作区。可用函数SELECT()返回当前工作区号。②命令SELECT0表示选定当前未使用的最小号工作区,该命令使用户不必记工作区号。【例3-25】选择工作区示例。CLOSEALLOPENDATABASEJXGL?SELECT()&&显示当前工作区号SELECT3&&当前工作区为

温馨提示

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

最新文档

评论

0/150

提交评论