《VFP6应用程序设计结构.ppt》由会员分享,可在线阅读,更多相关《VFP6应用程序设计结构.ppt(211页珍藏版)》请在课桌文档上搜索。
1、第6章 VFP6应用程序设计结构,数据类型和字段类型,1.字符型(Character)必须用西文方式的单或双引号括起。LOCATE FOR 雇员.职务=总经理学号、书号、电话号码、邮政编码(注意不宜用数值型)2.货币型(Currency)cPrice=$100.356,数据类型和字段类型,3.日期型(Date)birthday=05/20/1980Dblankdate=日期格式受SET DATE、SET MARK、SET CENTURY命令的影响工具/选项/区域4.日期时间型(DateTime)tdatetime=4/17/2000 8:30pmTdateonly=4/17/2000 Ttim
2、eonly=8:30pmTblankdate=:时间格式受SET HOURS、SET SECONDS命令的影响,数据类型和字段类型,5.数值型(Numeric)STORE 3.14159 TO pitemp=100.126.逻辑型(Logical)STORE.T.TO foundFlag=.F.7.通用型(General)用于在表中存储OLE(对象链接与嵌入)对象,常量:其值不发生变化的量(1)常量分为四种类型:数值型(N):直接由数字或+、-、小数点构成。字符型(C):由字符、汉字组成,需加定界符。如沈阳、”沈阳”、沈阳,同一定界符不能嵌套,如:“AB”CD”,但 AB”CD”是合法的。日期
3、型(D):用定界。如00-08-30 或CTOD(“01/08/30”)逻辑型(L):用.定界。如.t.、.f.,.Y.,.N.等说明:请注意C、D、L型常量的定界符。注意区分”2010”为字符型常量,而不是数值型常量。逻辑型常量必须用“.”定界。注意各类型数据的宽度。,常量,常量,编译时常量用#DEFINE预处理命令定义如:#DEFINE OPER“输入的数据非法!”#DEFINE pi 3.1415926不能另作它用,变量:程序运行中,值可能会发生变化的量变量是内存中的一个存储单元的位置变量名是存储位置的符号标识存储位置中存放的数据在程序操作期间通过该名称来读写,变量,变量分类:,字段名变
4、量数据表中已定义的数据项每一个字段可有不同的取值表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量内存变量独立于数据库之外的,变量的创建,赋值格式:Store 表达式 to 变量变量=表达式在赋值的同时,完成了变量的创建STORE 3 TO nVar nVar=3,访问变量,如字段变量和内存变量同名:则字段变量具有更高的优先权此时内存变量访问M.内存变量M-内存变量,变量作用域,局部变量:用LOCAL指定局部变量创建它的文件中使用与修改不能在更高层与低层中引用私有变量:子程序中使
5、用用PRIVATE指定私有变量(可以与上层同名)全局变量:用PUBLIC指定全局变量(公共)任何运行的程序都能使用和修改在命令窗口中创建的任何变量或数组被自动赋予全局属性,字段名变量,数据表中已定义的数据项每一个字段可有不同的取值表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量,当前记录:记录指针指向的记录*表刚打开,当前记录是第一条记录移动记录指针:GO TOP|BOTTOM|:绝对移动记录指针。SKIP:相对移动记录指针,移动记录指针,说明:注意区别命令GO TOP和GO
6、1,在索引文件打开时,前者把记录指针移到数据库的第一条逻辑记录,而后者为把记录指针移到记录号为1的物理记录上 若库中有记录,执行G0 TOP和GO BOTTOM后,函数BOF()和EOF()的值均为F。使BOF()为真,SKIP-1;使EOF()为真SKIP 若库中无记录,函数BOF()和EOF()的值均为.T.。SKIP命令无任何选项时,表示向下移动一条记录,多用在对数据库中所有记录逐一处理的循环结构中,在程序填空中经常出现。,移动记录指针实例,Go 1Skip 2?编号skipGo bottom?编号Skip 1?编号,内存变量,变量名:是以汉字、字母、数字或下划线组成的字符串,串长最多为
7、10个字符或5个汉字变量名必须以字母或汉字开头,下划线必须嵌在变量名中间,但不能嵌入空格符内存变量分为四种类型:数值型、字符型、逻辑型和日期型变量赋值格式:内存变量=表达式STORE 表达式=内存变量表功能:把表达式的值送到内存变量中例如:A=20 B=100,数组:名字相同、用下标区分的内存变量称为数组主要有以下特点:(1)数组元素的类型,由所赋的值来决定(2)数组变量可以不带下标使用在赋值语句的右边,表示该数组第一个元素在赋值语句的左边,表示该数组所有元素(3)数组和数据表之间可相互转换即数据表中数据可以转换为数组数据数组数据也可以转换为数据表中的数据,1.定义数组,数组名的取法和一般的变
8、量名取法相同定义数组命令:DIMENSION 数组名(,),(命令功能:定义一个或多个内存变量数组。说明:最多可有3600个元素,显示内存时只算一个变量数组下标起始值是1数组元素隐含的逻辑值为“假”*二维数组,可用一维下标来存取。这是由于在内存中,二维数组元素是按行列次序排列它们每个元素都可看作单独一个内存变量使用,,数组实例,DIMENSION b(2,3),?A4?A(2,1)?A6?A(2,3),变量:专用在程序中用DIMENSION建立的数组为专用公用命令窗口下建立的数组为公用在程序中建立公用的数组用PUBLIC命令格式为:PUBLIC数组名(,)例如:DIMENSIOM A(4),B
9、(2,3)建立一维数组A和二维数组B二维数组有六个元素:分别为B(1,1)、B(1,2)、B(1,3)B(2,1)、B(2,2)、B(2,3),数组的赋值,格式:STORE 表达式 TO 数组名 数组名=表达式命令功能:将表达式的值赋给数组变量上述两个命令是完全等价的给数组赋值还可用ACCEPT、INPUT、WAIT语句,数组变量的显示,命令格式:LISTDISPLAY MEMORY命令功能:显示内存变量(数组变量)可以用RELEASE和CLEAR MEMORY命令删除掉已定义的数组(整个数组)可以用SAVE命令同内存变量一起保存到磁盘内存文件(.MEM)中,需要时用RESTORE命令同内存变
10、量一起从磁盘文件中恢复,Iif(),根据逻辑表达式的值,返回两个值中的某一个。语法:IIF(lExpression,eExpression1,eExpression2)参数:lExpression指定要计算的逻辑表达式。eExpression1,eExpression2如果 lExpression 计算结果为“真”(.T.),返回 eExpression1;如果 lExpression 为“假”(.F.),则返回 eExpression2。返回值类型:字符型、数字型、货币型、日期型或日期时间型说明该函数也称作 Immediate IF。它计算一个逻辑表达式的值,然后根据计算结果,返回两个表达式
11、中的一个。如果逻辑表达式的值为“真”(.T.),则 IIF()返回第一个表达式;如果逻辑表达式的值为“假”(.F.),则 IIF()返回第二个表达式。提示对于简单的条件表达式,该函数可以代替 IF.ENDIF 语句。在按条件指定报表和标签表达式中的字段内容时 IIF()特别有用。IIF()函数比等价语句 IF.ENDIF 执行速度快得多。,表达式,表达式:是由常数、变量、函数和运算符组成的一个有物理意义的式子表达式总有一定的运算结果,即有一个值,所以表达式也是一种数据表达式分为(表达式结果):数值表达式字符表达式关系表达式逻辑表达式,表达式的输出命令:,格式:?,功能:计算表达式的值,并在屏幕
12、或打印机上输出例如:?4*6+1034,1.数值表达式,数值表达式:是由算术运算符和数值型常数、变量、函数组成。运算结果为数值型数据。算术运算符为:+-*()优先次序:括号、函数、乘方、乘除和加减,同级运算从左到右依次进行如:362EXP(8)LOG(20)25,2.字符表达式,字符表达式:是由字符运算符和字符型常数(即用定界符括起来的字符串)、变量、函数组成运算结果是字符型数据三种字符串运算:*完全连接运算格式:字符串1字符串2功能:将两个字符串连接为一个字符串。例如:?THIS IS A PENTHIS IS A PEN*完全连接是指两个字符串合并,即包括空格在内的字符串中所有字符相加。,
13、不完全连接运算格式:字符串1字符串2功能:也是将两个字符串连接为一个字符串,但是删去字符串1尾部的空格符例如:?“首都*北京首都:北京*注:串1尾部的空格移到串1后,包含运算,格式:串1串2功能:如串1包含在串2中,表达式的值为真,否则为假例如:ABACBTE结果为假(F)ABABCDE结果为真(T)注:包含运算是字符串的关系运算关系运算返回的是逻辑值,3.关系表达式,关系表达式:是由关系运算符与字符表达式或数值表达式组成结果是一个逻辑值关系成立结果取真(.T.),不成立结果取假(F)关系运算符两边的数据类型要一致,(同类型)关系运算符有6种:=,、#或!=注:字符的比较是ASCII码值的大小
14、空格100?CHCA,4.逻辑表达式,逻辑表达式:是由逻辑常数、变量和函数用逻辑运算符连接而成条件判断满足结果为真(.T.),否则结果为假(.F.)逻辑运算符有三种:.AND 逻辑与(且)(两都成立才为真).OR 逻辑或(只要有一个成立为真).NOT.或!逻辑非*逻辑运算符的优先级别为:.NOT.AND.OR.,运算符的优先顺序,表达式中运算符的优先顺序:由高到低依次为:算术或字符或日期运算关系运算逻辑运算相同优先级的运算按从左到右的顺序计算例如:性别男AND职称副教授?(10+3)5.and.”ab”$”abcde”,表达式例:算术表达式:结果为数值型。如3+2 字符表达式:结果为字符型。如
15、 Good+Morning 或Good-Morning 日期表达式:结果为日期或数值。如DATE()+5、DATE()-5 或DATE()-00-08-20 关系表达式:结果为逻辑型。如”AB”$”ABCD”、”AB”2.AND.NOT.56说明:在日期型表达式中,两个日期表达式相减,结果为数值,表示两日期之间相差的天数,两日期表达式相加,属非法表达式;一个日期表达式与一个数值表达式相加,结果为日期型表达式,表示从当前日期往后数N天;一个日期表达式与一数值表达式相减,表示从当前日期向前数N天。逻辑表达式包含关系表达式,关系表达式中包含算术表达式。注意,关系表达式与逻辑表达式的结果都为逻辑型。,
16、命令格式,由两部分组成命令动词,表示应执行的操作若干个短语,对操作提供某些限制性说明。一般格式如下:命令动词 短语如:copy to aa for 性别=“男”,与表有关的命令,与表有关的命令格式:命令动词 范围 FOR FIELDS 命令中的FOR、FIELDS是关键字,用户不得随意更改。约定:表示可选项,不选用系统的默认值表示必选项:表示对表记录操作的范围ALL 表示全体记录NEXT N 当前记录开始后续共计 N 个记录RECORD N 特指第 N 号记录。REST 从当前记录开始到表尾的所有记录FOR条件 选择操作FIELDS 投影操作,操作释例,Go 3Disp allGo 2Disp
17、 next 2Go 3Disp restGo 3Disp record 5,命令书写的规则,命令以命令动词,与动词短语的顺序无关用空格来分隔各单词短语命令的最长是254个字符,用分行符;分行命令动词和关键字可以缩写为前四个字符如MODIFY STRUCTURE可写为MODI STRU 不分大小写,可以混合使用变量名、字段名和文件名时,应避免与命令动词和关键字同名,以免运行时发生混乱,End,6.2 数据库的操作命令,常用的操作命令包括数据库的建立打开设置关闭删除,1.创建数据库CREATE DATABASE 命令命令格式:CREATE DATABASE 数据库名|?命令功能:用于创建一个数据库
18、,说明:,(1)数据库名已经存在,则提示新的路径或文件名(2)参数“?”或无参数,弹出对话框,位置及名称(3)数据库以.DBC为其扩展名,以.DCT为备注文件,索引文件则以.DCX为扩展名(4)该命令以独占方式创建并打开一个数据库例如:创建一个名为t1.dbc的数据库,并显示有关数据库的信息CREATE DATABASE t1 创建数据库t1CLEAR 清除屏幕DISPLAY DATABASE 显示数据库t1信息,2.打开数据库,用OPEN DATABASE命令打开已经存在的数据库命令格式:OPEN DATABASE 数据库名|?命令功能:打开一个指定的数据库。说明:,6.2 数据库的操作命令
19、,常用的操作命令包括数据库的建立打开设置关闭删除,1.创建数据库CREATE DATABASE 命令命令格式:CREATE DATABASE 数据库名|?命令功能:用于创建一个数据库,说明:,(1)数据库名已经存在,则提示新的路径或文件名(2)参数“?”或无参数,弹出对话框,位置及名称(3)数据库以.DBC为其扩展名,以.DCT为备注文件,索引文件则以.DCX为扩展名例如:创建一个名为t1.dbc的数据库,并显示有关数据库的信息CREATE DATABASE t1 创建数据库t1CLEAR 清除屏幕DISPLAY DATABASE 显示数据库t1信息,2.打开数据库,用OPEN DATABAS
20、E命令打开已经存在的数据库命令格式:OPEN DATABASE 数据库名|?命令功能:打开一个指定的数据库。,3.设置当前数据库,SET DATABASE TO命令命令格式:SET DATABASE TO 数据库名命令功能:设置当前数据库。,说明:,(1)数据库名为当前要打开的数据库名称(2)略名,弹出一个显库对话框例如:OPEN DATABASE t1 库t1.dbcOPEN DATABASE t2 库t2.dbcDISPLAY DATABASE 显示当库t2.dbc的信息SET DATABASE TO t1 置t1为当前库DILPLAY DATABASE 显示当库t1的信息SET DATA
21、BASE TO t2 设t2为当库DISPLAY DATABASE 显库t2.dbc的信息,4.关闭数据库,命令格式:CLOSE DATABASE ALL命令功能:关闭数据库。说明:ALL用于关闭所有打开的数据库如果没有指定此参数,则将关闭当前数据库,5.删除数据库,命令格式:DELETE DATABASE 数据库名|?DELETETABLESRECYCLE命令功能:删除数据库,说明,要删除的数据库文件必须保证处于非使用状态?弹出一个“删除”对话框 DELETE TABLES删除数据库中包含的表和包含这些表的数据库RECYCLE文件放入回收站中,可恢复删除的文件SET SAFETY的值为ON,
22、删文件前会提示用户SET SAFTY设置为OFF,VFP将不做任何提示,表的操作命令,包括:创建表打开一个存在的表将一个自由表加入到 数据库中去从数据库中移去表显示表中信息关闭删除表,1.创建表,命令格式:CREATE 数据库表名命令功能:创建数据库表或自由表,其扩展名为.dbf如有数据库打开,则该表是数据库表,且已加入到该数据库中否则,该表是自由表,例如:新建一个表a1,将它包含到数据库t1中OPEN DATABASE t1 打开数据库t1CREATE TABLE a1 创建表a1.dbf,将其包含到数据库t1中,2.将表加入到数据库中,命令格式:ADD TABLE自由表名|?命令功能:将自
23、由表加到指定数据库中去,说明:,自由表名指定要加入到一个已打开的数据库中的自由表的名称不指定名称或“?”作为参数,弹出对话框表一旦加入到库中,不再是自由可以通过REMOVE TABLE命令将该表从数据库中移出,使之成为新的自由表,库中表的一些规定:,必须是一个有效的.DBF文件不能与数据库中已存在的表重名一个表只能属于一个数据库,不能再成为其他数据库中的表,3.将表从数据库中移出,命令格式:REMOVE TABLE 数据库表名|?DELETERECYCLE命令功能:将数据库中的数据库表移出去使之成为自由表或删除表,说明:,参数?或忽略数据库表名时,对话框参数DELETE 用于指定将表从数据库和
24、磁盘中删除RECYCLE参数,先放回收站中,不立即删,可恢复与表相连的主索引、默认值及有效性规则将被删除 当一个表从数据库中移出时,它将变成一个自由表,例如,建2个表并加入到库t1中,而后执行删除命令OPEN DATABASE t1 打开数据库CREATE c1 创建表c1.dbfCREATE c2 创建表c2.dbfCLEAR 清屏幕DISPLAY DATABASE 显示当前数据库信息REMOVE TABLE c2 移动数据库表c2.dbfCLEAR 清屏幕DISPLAY DATABASE 显示当前数据库信息ADD TABLE c2 将表c2添加到当前库中DELETE DATABASE t1
25、 删除数据库t1,4.显示表的结构,命令格式:LIST STRUCTURE TO PRINTER|TO FILE 文件名命令功能:显示表的结构说明:(1)有TO PRINTER选项时,将屏幕显示的信息输出到打印机(2)有TO FILE 文件名选项时,将屏幕显示的信息输出到指定的文件,5.修改表的结构,命令格式:ALT TABLE 表名命令功能:修改表的结构,6.输入记录,表的结构建立,没有数据,是空表命令格式:APPEND BLANK命令功能:从表的末尾追加记录BLANK,末尾追加一空记录,不出现APPEND输入记录窗口,7.打开表?,命令格式:USE 表名命令功能:打开一个和多个已经存在的表
26、说明:表名用于指定需要打开表的名称,8.关闭表,命令格式:USECLOSE TABLES ALL命令功能:USE关闭已打开的表CLOSE TABLES ALL可以同时关闭多个表。说明:及时关闭,从内存上卸下表,以防止操作不当,*记录指针定位,用RECNO()函数,可测试当前记录指针绝对指针定位命令格式:GO TO TOPGO TO BOTTOMGO TO RECORD NGO TO 数值表达式GO TO N 命令功能:使记录指针指向表中的指定记录,说明,GO TOP 定位第一个逻辑记录GO BOTTOM 定位最后一个逻辑记录GO RECORD N 指针定位到表的N号记录GO数值表达式定到表达式
27、值取整后的记录GO N 指针定位到N号记录当选用参数N时,GO、TO均可省略不写,2.相对指针转移,命令格式:SKIP+-数值表达式 命令功能:相对当前位置按表达式值移动若干个记录值为正时,指针向后移为负值时,指针向前移缺省选择项时指针向后移一个记录说明:GO绝对定位,都定位到所指的记录SKIP是相对定位命令,以当前记录为中心,按给定的表达式值相对地移动若干记录,记录的显示,两种格式:LIST 范围FIELDS字段名表FOR条件TO PRINTER OFFTO FILE文件名NOCONSOLENOOPTIMIZEDISPLAY 范围FIELDS字段名表FOR条件TO P RINTEROFFTO
28、 FILE文件名NOCONSOLENOOPTIMIZE,说明:,LIST=DISPLAY ALL显示的全部记录OFF时,不显示记录号有FOR条件显示出满足条件表达式的记录FIELDS字段名表,显示指定字段有范围,显示指定范围TO PRINTER,显示的结果送到打印机输出TO FILE文件名,结果输出到文件NOCONSOLE,不将显示结果送到主窗口和TO PRINTERTO FILE 文件名一起使用NOOPTIMIZE短语时,不使用RUSHMORE优化技术,差别有两点:,LIST缺省范围是显示全体记录DISPLAY缺省当前记录LIST具有连续显示特点DISPLAY具有分页显示,满一页就停止,并提
29、示按任一键继续显示下页内容,例6.1,将ZGDA表中职称是讲师的、年龄在45岁以下的记录显示出来,并且只列出 姓名、年龄、职称三个字段USE ZGDA LIST FIELDS 姓名,年龄,职称 FOR 职称“讲师”AND年龄45,【例6.2】将ZGDA表的后4个记录显示出来,并且将第1和第5个记录分别显示出来【例6.3】将ZGDA表中1995年1月1日以后参加工作的记录显示出来【例6.4】将ZGDA表的后4个记录中性别是女的记录显示出来,6.3 表的修改和维护,1.EDIT和CHANGE命令格式分别是:EDIT 范围 FIELDS 字段名表 FOR 条件CHANGE 范围 FIELDS 字段名
30、表 FOR 条件 命令功能:进入全屏幕编辑方式,对当前打开的表的记录进行修改,说明:,缺省所有的选择项,从当前记录开始进行修改FIELDS字段名表,对列出的字段进行修 改范围和FOR条件,范围内满足条件的记录进行修改缺省了范围是指全部记录,2.BROWSE命令,命令格式:BROWSE FIELDS 字段名表命令功能:该命令以窗口方式显示当前表的内容,并可以对窗口内的数据按需要进行修改使用EDIT命令和CHANGE命令时一行只显示一个字段每屏幕只能显示一个记录VFP系统提供了窗口显示与修改命BROWSE,3.REPLACE命令*,命令格式:REPLACE 范围 字段1 WITH 表达式1ADDI
31、TIVE,字段2 WITH 表达式2ADDITIVE FOR 条件 命令功能:成批地、快速地修改满足给定条件的一批记录修改的方法是 用WITH后面表达式的值替换WITH前面的字段内容,说明:,(1)系统不进入全屏幕编辑方式(2)范围和FOR条件,修改范围内满足条件的所有记录缺省范围,当前记录(3)REPLACE命令可以对备注字段的数据进行替换可用关键字ADDITIVE,追加到备注的文本内容的尾部否则表达式的内容覆盖备注字段中的原有内容(4)字段名和表达式的数据类型必须相同数值字段,表达式的值大于字段宽度时,四舍五入运算,或采取科学计数法,【例6.5】,在表DA.DBF中,对工资小于800元的职
32、工各增加10元USE DAREPLACE ALL 工资 WITH 工资+10 FOR 工资800USE,记录的插入与删除,1.记录的插入APPEND 命令是从表末尾增加新记录命令格式:INSERT BLANK BEFORE命令功能:在当前表中的当前记录之前或之后插入记录,说明:,(1)没有选择项,是在当前记录之后插入一个记录(2)如果有BEFORE选择项,是在当前记录之前插入一个记录(3)如果有BLANK选择项,是在当前记录之后插入一个空白记录,2.记录的删除,分两步进行:是对欲删除的记录打删除标记“*”,称为逻辑删除必要时,可恢复,即把“*”去掉是把带有删除标记的记录真正删除,称为永久性删除
33、记录或称物理删除记录,(1)逻辑删除记录命令,命令格式:DELETE 范围 FOR条件命令功能:指定范围内满足条件的那些记录加上删除标记“*”说明:若省略两个选择项,则给当前记录打删除标记“*”当用命令 SET DELETE ON 在显示或有关操作时,作了删除标记的记录就不起作用,如同真正删除这些记录一样,【例6.6】,将表DADBF的4号记录打上删除标记USE DADELETE RECORD 4LIST,(2)记录恢复删除命令,命令格式:RECALL 范围 FOR条件命令功能:将规定范围内的、符合条件的、已作了删除标记的记录恢复。即把删除 标记“*”去掉,(3)永久性删除记录命令,命令格式:
34、PACK命令功能:将带有删除标记的记录从当前表中删除并重新调整表的记录号说明:执行PACK命令后,删除的记录在表中不再存在,并且不能被恢复,称永久性删除记录,(4)删除表的全部记录命令,命令格式:ZAP命令功能:将已打开的表中的全部记录一次性删除说明:(1)执行此命令,只是删除全部记录,而表的结构仍然保留(2)该命令等效于执行了DELETE ALL命令后再执行PACK命令,表的排序,按一定的条件在已有的表之外产生一个新的有序表,从而实现数据的重新组织命令格式:SORT TO 文件名 ON 字段名1 ACD,字段名2ACDASCENDING|DESCENDING 范围FOR条件FIELDS 字段
35、名表命令功能:对当前表中指定范围内满足条件的记录,根据关键字段按字符顺序、数值大小或时间顺序进行重新排列,生成一个新的表,说明:,新生成的表,扩展名为.DBF不选择范围和条件时,对全部记录进行排序不指定FIELDS,新表结构全部字段组成多重排序,即先对字段名1 排序,对于记录相同的记录,再按字段名2排序,依此类推A和D分别表示升序和降序,升序符号可以省略不写C使排序时不分大小写字母C可以和A或D连用,两种选择可以只用一条斜线,如AC或 DC(6)ASCENDING和DESCENDING仅对那些没有指定A和D的关键字段起作用,关键字段默认按升序 A排序,【例6.7】,将表A1.DBF按工资排序,
36、排序后的表名为GZ.DBFUSE A1SORT ON 工资 TO GZUSE GZLIST,索引文件,表排序的方法:分类方法索引两种索引文件类型一种为单入口索引文件其扩展名为.IDX索引文件复合索引文件其扩展名为.CDX索引文件索引就像一本书的目录索引可使读者快速找到所需的内容一样,(1)单入口索引文件,是与FoxBASE表索引文件相兼容的索引文件一个表可以有多个这样的索引文件其扩展名为.IDX索引文件,(2)复合索引文件包含许多索引每个索引都有一个TAG标志复合索引文件就好像是许多单个索引的集合1)结构复合索引文件:这样的索引文件与相关的表同名但扩展名为.CDX当表被打开时,索引文件也自动被
37、打开并能自动及时更新2)独立型复合索引文件:这样的索引文件不与相关的表同名且不会随相关表的打开而自动打开,2.建立索引文件,命令格式:INDEX ON 索引表达式 TO IDX索引文件名|TAG标志名OFCDX索引文件名FOR条件COMPACTASCENDING|DESCENDINGUNIQUEADDITIVE命令的功能:对满足指定条件的记录按索引表达式进行索引,形成.IDX索引文件或.CDX索引文件。,说明:,如有关键字TAG,表示建立复合索引TAG关键字标志名为复合索引一个索引标志选择OFCDX索引文件名时,可建立独立型复合索引文件缺省时可建立与表 同名的结构化复合索引文件有FOR条件时,
38、按满足条件的记录进行索引ASCENDING任选项,排序方式是按升序DESCENDING任选项,排 序方式是按降序默认时为升序,说明:,索引表达式中的字段名可以是数值型、字符型或日期型表达式由多个字段组成时,必须转换成相同的数据类型转换可使用VAL()、STR()、CTOD()、DTOC()函数。如果索引表达式的字段类型一致时,必须用“+”连接。选择COMPACT项时,在建立单入口索引时使用,表示可生成一个压缩的单独索引文件 复合索引文件自动采用压缩方式。UNIQUE项时,多记录有相同的关键字表达式值,第一个记录有效,包含在索引文件中若未指定UNIQUE,则所有记录均包含在索引文件中 ADDIT
39、IVE关键字时,决定是否在建立新的索引时关闭已打开的索引文件。选择关键字表示不关闭,否则表示关闭所有已打开的索引文件,3.打开和关闭索引文件,两种命令1)用USE打开表和索引文件2)用SET INDEX打开索引文件,1)用USE打开表和索引文件,命令格式:USE 表文件名 INDEX 索引文件名表|?ORDER数值表达式|IDX文件名 命令功能:本命令将索引文件连同表主文件一起打开执行此命令后,关闭当前工作 区前使用的表及索引文件,2)用SET INDEX打开索引文件,命令格式SET INDEX TO 索引文件名表|?ADDITIVE命令功能:打开表主文件后,用此命令打开已建立的索引文件说明:
40、凡与表一同打开的多个索引文件,用APPEND、BROWSE、EDIT及REP LACE命令修改时,均会自动地修改所有的索引文件结构化复合索引文件随着表的打开而打开,随着表的关闭而关闭对于单入口索引 文件和独立型索引文件可以用上述命令,该命令可以一次打开一个或多个索引文件,(2)确定主控索引,命令格式:SET ORDER TO 数值表达式|IDX文件名|TAG标志名OFCDX索引文件名ASCENDING|DESCENDING一个表可以同时打开多个索引文件但是只有一个索引起作用,称之为主索引,(3)关闭索引文件,命令格式:1)USE2)SET INDEX TO3)CLOSE INDEX命令功能:关
41、闭当前工作区内已打开的索引文件。说明:格式1)可以关闭表及其索引文件格式2)与格式3)功能相同,可以关闭.IDX文件与独立型复合索引文件,但不能关闭结构化复合索引文件,【例6.8】,有一个表A1.DBF,按工资建立单入口的索引文件(.IDX文件),其文件名为GZ.IDX。USE A1INDEX ON 工资 TO GZ 6 records indexedSET INDEX TO GZLIST,4.添加记录与重新索引,命令格式:REINDEX命令功能:重新建立已索引过的索引文件。说明:已有索引文件,在输入记录前,并没有打开需要再一次建立索引 文件使用该命令时,必须先打开索引文件,数据检索,数据检索
42、的命令:顺序检索LOCATECONTINUE索引检索FINDSEEK,1.查找命令FIND,命令格式:FIND 字符串数字命令功能:从表的索引文件中查找指定字符串或与数字相匹配的记录找到:将记录指针指向函数FOUND()返回逻辑真值未找到:指向文件尾,eof()为真此时的记录号为表的最大记录号+1函数FOUND()返回逻辑假值,说明:,检索值可以是字符串和数字,但不能是表达式若使用字符型内存变量检索时,必须使用宏代换&函数,以内存变量的内容检索字符串不用定界符如果字符串以空格 开始,必须用定界符,【例6.9】查找字符型数据,USE A1 INDEX XMFIND 孟彬彬DISPLAYFIND
43、孙DISPLAY,2.检索命令 SEEK,命令格式:SEEK表达式命令功能:在主控索引文件中将记录指针定位在索引关键字内容与命令中指定的表达式相匹 配的第一个记录SEEK能实现快速查找信息。,SEEK说明:,当表达式为字符型数据时,必须用单引号、双引号或方括号括起来如果是内存变量或 数值型表达式时,不用定界符SEEK扩大了FIND的查找功能,FIND不能查找日期型数据,而SEEK可以 直接查找日期索引关键字的内容后接表达式:用内存变量可直接用SEEK检索,不用加宏替换函数,【例6.10】,查找字符型数据利用前面以姓名为索引关键字的索引文件USE A1SET INDEX TO XM SEEK 张
44、 燕DISPLAY,顺序查找命令(LOCATE与CONTINUE),直接查找命令,不用索引命令格式:LOCATE 范围 FOR条件命令格式:CONTINUE命令功能:对当前表中的记录进行顺序查找,查找指定范围内满足条件的第一个记录若有满足条件的记录,将记录指针定位在满足条件的第一个记录,并显示出当前记录的记录号Record=n),说明:,用LOCATE命令查询时,不用对表进行排序或建立索引文件若在表中没有查找到满足条件的记录则屏幕显示出“END OF LOCATE SCOPE”的文件结束标志信息若LOCATE与CONTINUE联合使用,可以实现查询每一个满足条件的记录不是再用LOCATE FO
45、R用了还是找到第一个记录,【例6.11】,查找工资560.00元的记录USE A1LOCATE ALL FOR 工资560.00DISPLAYCONTINUEDISPLAYCONTINUE,6.5 统计命令,求和命令(SUM)求平均值命令(AVERAGE)计数命令(COUNT)求统计量命令(CALCULATE)分类汇总命令,求和命令(SUM),命令格式:SUM 范围字段名表TO内存变量表|数组名 FOR条件命令功能:对当前表指定的数值型字段进行列向求和,【例6.12】,以B1.DBF表为例,进行下面的统计操作:(1)将所有数值型字段求和(2)将性别是女的记录求和USE B1LISTSUM 5r
46、ecords SUM FOR 性别女 3 records summed,求平均值命令(AVERAGE),命令格式:AVERAGE 范围字段名表TO内存变量表|数组名 FOR条件命令功能:对当前表指定的数值型字段列向求算术平均值,【例6.13】,对B1.DBF表指定数值型字段求算术平均值,并把结果送到对应的内存变量中 USE B1 AVERAGE 基本工资,年龄 TO C1,C2 5 records?C1,C2 348.00 27,计数命令(COUNT),命令格式:COUNT 范围FOR条件TO内存变量|数组名 命令功能:统计当前表中记录的个数*受set deleted on|off影响Set
47、deleted on则不数有删除标记的记录RECCOUNT()不受其影响,例子,Use daGo 3DeleSet deleted onCount 7?Reccount()8Set deleted offCount 8?Reccount 8,【例6.14】,将B1.DBF表中对性别是男的记录进行统计,并且存储到内存变量中USE B1COUNT FOR 性别男 TO XB 2 records?XB 2,求统计量命令(CALCULATE),命令格式:CALCULATE数值表达式范围FOR条件表达式 TO内存变量名表|TO数组名命令功能:该命令是根据当前表中的各数值型字段组成的数值表达式进行计算,【
48、例6.15】,对表B1.DBF分别统计记录个数、平均年龄、最小年龄,将结果存入A1,A2,A3中,并显示变量的值USE B1CALCULATE CNT(),AVG(年龄),MIN(年龄)TO A1,A2,A3?A1,A2,A3 5 27 21,分类汇总命令,分类汇总就是将表中关键字相同的一些记录的数值数据汇总合并为一个记录,并产生一个新的表命令格式:TOTAL ON 关键字段 TO 目标文件名 范围FIELDS字段名表FOR条件命令功能:对已排序或已索引过的表按指定关键字段相同的那些记录进行分组求和并将处理结果存入到目标文件名指出的表中其结构与有序文件结构相同,说明:生成新的表文件(sort)
49、,(1)如果没有任何选择项,将按关键字段分组,并对所有数值型字段求和生成一个新的表(2)有范围短语时,将按指定范围内的记录进行分组求和(3)有FIELDS 字段名表短语时,将按指定的数值型字段分组求和(4)有FOR 条件短语时,将对满足条件的那些记录的数值型字段分组求和,【例6.16】,将B1.DBF表按性别分组,求工资总和第一步:先显示一下B1.DBF表的内容。USE B1LIST第二步:建立索引文件,关键字段为性别。INDEX ON 性别 TO B1X 5 records LIST第三步:计算工资总和,形成一个新的表HB.DBF,其结构与B1表中的结构相同TOTAL ON 性别 TO HB
50、 5 Records totalled 2 Records generatedUSE HBLISTHB.DBF表的记录对于非数值型字段是无意义的,可以根据需要进一步整理,end,6.6 命令文件的建立与运行,程序使用的方式:向导方式菜单方式命令方式:命令窗口的显示(Ctrl+F2)程序执行方式:将多条命令按一定的结构编写成一个程序(.prg)然后命令机器去执行这个程序(do 命令)基本逻辑结构:顺序结构条件分支结构循环结构,命令文件是由一系列VFP命令组成的程序一般以某种方式建立并存入磁盘中使用时再调出来执行两种方式建立:用VFP的文本编辑程序建立命令文件 采用全屏幕编辑方式一般的文本编辑程序