一、顺序 二、选择
1、If endif
2、if else endif 3、if
else if
else if Endif Endif Endif Do case case case case Endcase 三、循环
1、do while enddo 2、for endfor 3、SCAN ENDSCAN 使用循环应注意的几点:
(1)DO WHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。? (2)〈命令行序列〉可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。 (3)〈循环变量〉应是数值型的内存变量或数组元素。
(4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变〈命令行序列〉中部分命令的执行次数。EXIT、LOOP可以出现在〈命令行序列〉的任意位置。? 1、过程的定义
PROCEDURE | FUNCTION <过程名1> <语句行系列>
[ RETURN [ 表达式 ] ]
ENDPROC | ENDFUNC
2、过程文件的打开
SET PROCEDURE [<过程文件1>[,<过程文件2>,?-] ] [ADDITIVE] 3、过程的关闭
RELEASE PROCEDURE<过程名1> [,过程名2,?-] 4、过程的调用
格式1: DO <文件名> | <过程名> 格式2: <文件名> | <过程名>( ) 过程的带参调用
5、模块程序可接收调用程序传递过来的参数,其接收参数的命令格式如下: 格式:PARAMETERS <参数表> LPARAMETERS<参数表>
6、参数表中的参数也称实参,可为常量、已赋值的变量或数值表达式。 形参与实参的数量应相等、类型要一致.
参数的传递方式可分为两种:
按值传递:形参变量值的改变不会影响实参变量的值.
按引用传递:形参变量的值改变时,其实参变量的值也会改变. 变量作用域
1、Public:公共变量 2、Private:私有变量
1)私有变量:在程序中直接使用(没有通过PUBLIC或LOCAL命令事先声明)而由系统自动隐含建立的变量都是私有变量.
2)私有变量作用域:
只在建立它的模块及其下属的各层模块中能够被有效访问,一旦建立它的模块程序运行结束,则此私有变量将自动清除.
3、Local:局部变量
1)局部变量作用域:只在建立它的模块中使用,不能应用于其所在模块的上层或下层模块。 2)局部变量的定义:
隐含定义方式:Local <内存变量表>
第4章 创建数据库
4.1.2 创建数据库
Visual FoxPro中,创建数据库的三种方式:
1、使用“项目管理器”创建数据库,此时数据库属于本项目.
2、使用“文件”菜单中的“新建”命令创建数据库,此时创建的数据库不属于任何项目。 3、使用Creeate Database命令创建数据库 命令格式:
Create Database [DatabaseName | ?] Create Database cc
?功能:用于在命令窗口或程序中直接创建一个数据库。 命令说明
(1)DatabaseName参数用于指定要创建的数据库名称。
(2)?参数用于在执行该命令时打开“创建”对话框以输入要创建的数据库名称。 说明:
(1)与前两种方式创建数据库不同,使用用命令建立数据库时并不打开数据库设计器,只是使数据库处于打开状态,要打开数据库设计器,还需使用命令Modify DATABASE来打开。
(2)使用上述三种方式建立新的数据库时,若先前已建立了同名的数据库,则可能会产生覆盖,此时是否会产生覆盖,由命令SET Safety On|Off决定。 1、打开数据库
Open DataBase [DatebaseName | ?] [EXCLUSIVE | SHARED] [NOUPDATE] [VALIDATE] 功能:用于在命令窗口或程序中打开指定的数据库。 4.1.4 修改数据库
数据库建立后,其数据库的修改要通过数据库设计器来完成。 打开数据库设计器的三种方法:
(1)从项目管理器中打开数据库文件同时打开数据库设计器。 (2)从”打开“菜单中打开数据库文件同时打开数据库设计器。 (3)命令方式
MODIFY DATEBASE [DatebaseName | ?] [NOWAIT] [NOEDIT] 4.1.5 删除数据库 (2)使用命令方式
DELETE DATABASE [DatabaseName
DatabaseName:要删除的数据库名 二、数据计算 1、sum
格式:sum [范围] 关键字 to 内存变量 for 表达式
功能:在指定的范围内,将满足for 表达式的记录对指定的关键字进行纵向求和,并将求和的结果保存到相应的内存变量中。 学号 姓名 性别 出生日期 高数 英语 计算机 (1)、求出所有同学高数的总分 eg: use xs
sum all 高数 to sxzf ?sxzf
(2)、求出所有高数成绩及格的考生高数总分 sum all 高数 to sxzf for 数学>=60
(3)、求出所有高数成绩不及格的学生的语文总分 sum all 语文 to sxzf for 数学<60 2、Average
格式:average [范围] 关键字 to 内存变量 for 表达式
功能:在指定的范围内,将满足for 表达式的记录对指定的关键字进行纵向求平均值,并将平均值的结果保存到相应的内存变量中。
(1) 请求出所有姓张的学生的高数平均分
Average all 高数 to ss for left(姓名,2)=”张”
(2)假设表文件学生表.dbf的学号字段是N型,宽度为4位,其中每个学生的学号前两位为该生所在班级号,请求出11班学生的高数平均分。 1101/100
Average all 高数 to xspj for int(学号/100)=11
或:average all 高数 xspj for val(left(str(学号,4),2))=11 3、count
格式:count [范围] to 内存变量 for 表达式
功能:在指定的范围内,将满足for 表达式的记录对指定的记录记数,并将统计的结果保存到相应的内存变量中。
(1)、统计英语成绩及格且小于90分的人数
Count all to yy for 英语>=60 and 英语<90 Count all to yy for 英语>=60 and <90 或写成这种是对是错呢?
Count all to yy for 60<=英语<90 4、total
格式:total on 分组字段名 to 新表名 fields 汇总字段名列表 use 学生表
index on 部门 tag bm of bm.cdx
total on 部门 to bmgz.dbf fields 实发工资 use bmgz list
三、查找命令
1、Locate定位命令
格式: Locate For Expression1
功能:将记录指针定位到满足给定条件的第一条记录上,若没有满足条件的记录,则指针指向文件结束位置EOF。 说明:
(1)For lExpression1子句用于设置记录定位条件。Locate命令将按顺序查找满足lExpression1逻辑表达式的第一条记录。
(2)若要使指针指向下一条满足条件的记录,则要使用Continue命令,如果再没有满足条件的记录,则指向表文件的结束位置Eof
USE 学生表
Locate For 高数>=80
Display &&显示找到的第1个学生信息 Continue
Display &&显示下一个满足条件的学生的记录
2、CONTINUE命令 格式: CONTINUE
功能: 该命令与LOCATE命令搭配使用,以查找满足给定条件的下一条记录。 说明:
在命令窗口或程序中若执行或使用了多个LOCATE命
令,则CONTINUE命令将与最近的一个LOCATE命令搭配使用。 USE 学生表
LOCATE FOR 高数>=80
DISPLAY &&显示找到的第1个学生 CONTINUE
DISPLAY &&显示找到的第2个学生 4.4 索引
表中的记录通常是按输入记录时的先后顺序排列的,但在实际的使用中,常常需要使表中的记录按某种顺序来重新排列,这就需要对表中的记录重新进行排序,排序为两种:索引(INDEX))排序 即逻辑排序或物理(SORT)排序.索引或排序均可改变记录的处理或输出顺序。 4.4.1 基本概念 一、索引的概念
1、物理排序和逻辑排序概念:
物理排序:指按排序关键字重排表中记录在磁盘上的物理顺序。
索引排序:指按索引关键字重排表中记录的逻辑顺序,并将排序结果形成索引文件。 索引的特点:
1、索引文件是由指针构成的文件,这些指针逻辑上按索引关键字值排列。
2、索引文件与.DBF分开存储,索引并不改变表中记录的物理顺序,而是采用索引关键字对表进行逻辑排序;创建索引实质上是创建一个指向.DBF文件记录的指针文件。
3、建立好的索引文件打开后,记录的显示顺序或处理记录的顺序将按照索引文件排列的记录顺序进行,索引的存在,大大提高了记录的检索速度。
4、用户可以为一个表同时建立多个索引文件,每个索引文件表示处理记录的不同顺序。 5、索引文件包括两部分:关键字值和记录号(或指针),见图1。 根据入学成绩字段建立的索引文件 二、索引的种类:
(一) 按功能来分类,索引可分四种: 1、主索引
在指定字段或表达式中不允许出现重复值的索引。 说明:
(1)、若在有重复值的字段上建立主索引,VFP将产生出错信息。 (2)、建立主索引的字段可看作主关键字,一个表只能有一个主关键字,因此一个表只也能有一个主索引。 2、候选索引
候选关键字:除主关键字外,一个或多个字段的值能唯一标识表中的一条记录。 候选索引和主索引具有相同的性质,可为一个表建立多个候选索引. 3、唯一索引
唯一索引的”唯一”指的是索引项的唯一,而不是字段值的唯一,它以指定字段的首次出现值为基础,选定一组记录,并对记录进行排序,可为一个表建立多个唯一索引。一般情况不使用此索引。 4、普通索引
普通索引不仅允许字段中出现重复值,而且也允许索引项中也允许出现重复值,可为一个表可建立多个普通索引。此索引最常用。 (二) 按扩展名来分类可分为两种: (1)单一索引文件,扩展名为.IDX。
单一索引文件只由一个索引项构成,其内部结构如表1所示。
(2)复合索引文件,扩展名为.CDX,复合索引文件又可分为结构复合索引文件和非结构复合索引文件。 复合索引文件内部结构如表2所示。
复合索引文件由多个关键字值和其对应的多个记录号构成。每一个关键字值和其对应的记录号构成了一个索引标识(TagName),每一个索引标识相当于一个单一索引文件。换句话说,复合索引文件等价于多个单一索引文件。 复合索引文件的特点:
(1)结构复合索引文件的文件名与表同名,且随表的打开而自动打开。扩展名为.cdx
(2)非结构复合索引文件的文件名与表不同名,且非结构复合索引文件不会随表的打开而自动打开,使用时要由用户自行打开。 (3)独立索引文件,扩展名为.idx,一个独立索引文件只能有一个索引标识。独立索不能实现降序索引。 总结: (1)、主索引用主关键字,候选索引用于不作为主关键字,但字段值又必须唯一字段,即候选关键字,普通索引用于一般地提高查询速度,唯一索引用于一些特殊的程序设计。 (2)、索引可提高进询速度,但索引也降低表的更新速度,由于对表进行插入,删除和修改操作时,系统会自动维护索引,从而降低了插入,删除和修改的速度,即更新表的速度。 (3)、要有选择性的为每个表建立索引,一般在主关键字段建立主索引,外部关键字段建立普通索引。 4.4.3 建立索引
1、使用INDEX命令来建立索引 命令格式
INDEX ON <eExpression>TO <IDXFileName> | TAG<TagName> [OF<CDXFileName>][FOR<lExpression>][COMPACT][ASCENDING | DESCENDING][UNIQUE | CANDIDATE] [ADDITIVE] 命令功能
INDEX命令用来为当前的表建立一个索引文件。
【例】 有一Student表,请根据入学字段建立单一索引文件(单一索引文件名为new.IDX),则指令如下:
USE 学生表
INDEX ON 高数 TO new.idx
其中,高数为索引关键字表达式,new.idx为单一索引文件名。 2、建立结构复合索引实例