2.1k likes | 2.26k Views
第 6 章 VFP6 应用程序设计结构. 数据类型和字段类型. 1. 字符型 (Character) 必须用西文方式的单或双引号括起。 LOCATE FOR 雇员 . 职务 =‘ 总经理’ 学号、书号、电话号码、邮政编码 ( 注意不宜用数值型 ) 2. 货币型 (Currency) cPrice=$100.356. 数据类型和字段类型. 3. 日期型 (Date) birthday={05/20/1980} Dblankdate={} 日期格式受 SET DATE 、 SET MARK 、 SET CENTURY 命令的影响
E N D
数据类型和字段类型 1. 字符型(Character) • 必须用西文方式的单或双引号括起。 • LOCATE FOR 雇员.职务=‘总经理’ • 学号、书号、电话号码、邮政编码(注意不宜用数值型) 2. 货币型(Currency) • cPrice=$100.356
数据类型和字段类型 3. 日期型(Date) • birthday={05/20/1980} • Dblankdate={} • 日期格式受SET DATE、SET MARK、SET CENTURY命令的影响 • 工具/选项/区域 4. 日期时间型(DateTime) • tdatetime={4/17/ 2000 8:30pm} • Tdateonly={4/17/ 2000 } • Ttimeonly={8:30pm} • Tblankdate= {:} • 时间格式受SET HOURS、SET SECONDS命令的影响
数据类型和字段类型 5. 数值型(Numeric) • STORE 3.14159 TO pi • temp=100.12 6. 逻辑型(Logical) • STORE .T. TO found • Flag=.F. 7. 通用型(General) • 用于在表中存储OLE(对象链接与嵌入)对象
常量 常量:其值不发生变化的量 (1)常量分为四种类型: 数值型(N):直接由数字或+、-、小数点构成。 字符型(C):由字符、汉字组成,需加定界符。如’沈阳’、”沈阳”、 [沈阳],同一定界符不能嵌套,如:“AB”CD””,但 ‘AB”CD”’是合法的。 日期型(D):用{}定界。 如{00-08-30} 或CTOD(“01/08/30”) 逻辑型(L):用.定界。如.t.、.f.,.Y.,.N.等 说明:请注意C、D、L型常量的定界符。注意区分”2010”为字符型常量,而不是数值型常量。逻辑型常量必须用“.”定界。注意各类型数据的宽度。
常量 • 编译时常量 • 用 #DEFINE预处理命令定义 • 如:#DEFINE OPER “输入的数据非法!” #DEFINE pi 3.1415926 • 不能另作它用
变量 变量: • 程序运行中,值可能会发生变化的量 • 变量是内存中的一个存储单元的位置 • 变量名是存储位置的符号标识 • 存储位置中存放的数据在程序操作期间通过该名称来读写
变量分类: • 字段名变量 • 数据表中已定义的数据项 • 每一个字段可有不同的取值 • 表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。 • 记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量 • 内存变量 • 独立于数据库之外的
变量的创建 • 赋值格式: • Store 表达式 to 变量 • 变量=表达式 • 在赋值的同时,完成了变量的创建STORE 3 TO nVar nVar = 3
访问变量 • 如字段变量和内存变量同名: • 则字段变量具有更高的优先权 • 此时内存变量访问 • M.内存变量 • M->内存变量
变量作用域 局部变量: • 用LOCAL指定局部变量 • 创建它的文件中使用与修改 • 不能在更高层与低层中引用 私有变量: • 子程序中使用 • 用PRIVATE指定私有变量(可以与上层同名 ) 全局变量: • 用PUBLIC指定全局变量(公共 ) • 任何运行的程序都能使用和修改 • 在命令窗口中创建的任何变量或数组被自动赋予全局属性
public m • Local n • . • . • . • m =3 • n=4 • do sub • . • . • . Procedure sub Private m ? m ? n
字段名变量 • 数据表中已定义的数据项 • 每一个字段可有不同的取值 • 表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。 • 记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量 • 当前记录:记录指针指向的记录 • **表刚打开,当前记录是第一条记录 • 移动记录指针: • GO TOP|BOTTOM|[<数值表达式>]:绝对移动记录指针。 • SKIP [<数值表达式>]:相对移动记录指针
移动记录指针 说明: ▲注意区别命令GO TOP和GO 1,在索引文件打开时,前者把记录指针移到数据库的第一条逻辑记录,而后者为把记录指针移到记录号为1的物理记录上 ▲若库中有记录,执行G0 TOP和GO BOTTOM后,函数BOF()和EOF()的值均为·F·。使BOF()为真,SKIP-1;使EOF()为真SKIP ▲若库中无记录,函数BOF()和EOF()的值均为.T.。 ▲SKIP命令无任何选项时,表示向下移动一条记录,多用在对数据库中所有记录逐一处理的循环结构中,在程序填空中经常出现。
编号 姓名 • 101 张三 • 102 王一 • 103 刘六 • 104 李四 • 105 赵七 • 朱八 2 表一 移动记录指针实例 • Go 1 • Skip 2 • ? 编号 • skip • Go bottom • ? 编号 • Skip –1 • ? 编号
内存变量 • 变量名: • 是以汉字、字母、数字或下划线组成的字符串,串长最多为10个字符或5个汉字 • 变量名必须以字母或汉字开头,下划线必须嵌在变量名中间,但不能嵌入空格符 • 内存变量分为四种类型: • 数值型、字符型、逻辑型和日期型 • 变量赋值格式: • 〈内存变量〉=〈表达式〉 • STORE 〈表达式〉=〈内存变量表〉 功能:把〈表达式〉的值送到内存变量中 • 例如: • A=20 • B=100
数组: • 名字相同、用下标区分的内存变量称为数组 • 主要有以下特点: • (1)数组元素的类型,由所赋的值来决定 • (2)数组变量可以不带下标使用 • 在赋值语句的右边,表示该数组第一个元素 • 在赋值语句的左边,表示该数组所有元素 • (3)数组和数据表之间可相互转换 • 即数据表中数据可以转换为数组数据 • 数组数据也可以转换为数据表中的数据
1.定义数组 • 数组名的取法和一般的变量名取法相同 • 定义数组命令: DIMENSION 数组名〉(<数值表达式1>[,<数值表达式2>]) [,<数组名>(<数值表达式1>…] • 命令功能:定义一个或多个内存变量数组。 • 说明: • 最多可有3600个元素,显示内存时只算一个变量 • 数组下标起始值是1 • 数组元素隐含的逻辑值为“假” **二维数组,可用一维下标来存取。这是由于在内存中,二维数组元素是按行列次序排列 • 它们每个元素都可看作单独一个内存变量使用,
DIMENSION b(2,3) ? A4 ? A(2,1) ? A6 ? A(2,3) A(1,1) A(1,2) A(1,3) 12 3 A(2,1) A(2,2) A(2,3) 4 5 6 数组实例
变量: • 专用 • 在程序中用DIMENSION建立的数组为专用 • 公用 • 命令窗口下建立的数组为公用 • 在程序中建立公用的数组用PUBLIC命令 • 格式为: PUBLIC〈数组名〉(<N表达式1>,[<N表达式2>]) • 例如: DIMENSIOM A(4),B(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语句
数组变量的显示 • 命令格式: LIST/DISPLAY MEMORY • 命令功能: • 显示内存变量(数组变量) • 可以用RELEASE和CLEAR MEMORY命令删除掉已定义的数组(整个数组) • 可以用SAVE命令同内存变量一起保存到磁盘内存文件(.MEM)中,需要时用RESTORE命令同内存变量一起从磁盘文件中恢复
表达式 • 表达式: • 是由常数、变量、函数和运算符组成的一个有物理意义的式子 • 表达式总有一定的运算结果,即有一个值,所以表达式也是一种数据 • 表达式分为(表达式结果): • 数值表达式 • 字符表达式 • 关系表达式 • 逻辑表达式
表达式的输出命令: • 格式: • ?[[?]<表达式>,[<表达式>]] • 功能: • 计算表达式的值,并在屏幕或打印机上输出 • 例如: • ? 4*6+10 • 34
1.数值表达式 • 数值表达式: • 是由算术运算符和数值型常数、变量、函数组成。 • 运算结果为数值型数据。 • 算术运算符为:+ - * / ^ ( ) • 优先次序: • 括号、函数、乘方、乘除和加减,同级运算从左到右依次进行 • 如: • 3+6/2-EXP(8) LOG(20) 2^5
2.字符表达式 • 字符表达式: • 是由字符运算符和字符型常数(即用定界符括起来的字符串)、变量、函数组成 • 运算结果是字符型数据 • 三种字符串运算: *完全连接运算 • 格式:"〈字符串1〉"+"〈字符串2〉" • 功能:将两个字符串连接为一个字符串。 • 例如: ? "THIS IS "+"A PEN" THIS IS A PEN *完全连接是指两个字符串合并,即包括空格在内的字符串中所有字符相加。
不完全连接运算 • 格式:"〈字符串1〉"-"〈字符串2〉" • 功能: • 也是将两个字符串连接为一个字符串,但是删去字符串1尾部的空格符 • 例如: • ? “首都∶***"-"北京" • 首都:北京*** • 注:串1尾部的空格移到串1后
包含运算 • 格式: • 〈串1〉$〈串2〉 • 功能: • 如串1包含在串2中,表达式的值为真,否则为假 • 例如: • "AB"$"ACBTE"结果为假(.F.) • "AB"$"ABCDE"结果为真(.T.) • 注: • 包含运算是字符串的关系运算 • 关系运算返回的是逻辑值
3.关系表达式 • 关系表达式: • 是由关系运算符与字符表达式或数值表达式组成 • 结果是一个逻辑值 • 关系成立结果取真(.T.),不成立结果取假(.F.) • 关系运算符两边的数据类型要一致,(同类型) • 关系运算符有6种: <=,<,=, >=,>, <>、#或!= • 注: • 字符的比较是ASCII码值的大小 • 空格<0-9<A-Z<a-z • 汉字是按机内码值比较的(拼音) • 例: • ? 123>100 • ? "CH"<"CA"
4.逻辑表达式 • 逻辑表达式: • 是由逻辑常数、变量和函数用逻辑运算符连接而成 • 条件判断满足结果为真(.T.),否则结果为假(.F.) • 逻辑运算符有三种: .AND. 逻辑与(且)(两都成立才为真) .OR. 逻辑或(只要有一个成立为真) .NOT.或! 逻辑非 ***逻辑运算符的优先级别为:.NOT. .AND. .OR.
A B .AND. .OR . .NOT.A 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1 A B .AND. .OR . .NOT.A T T T F F T F F .And. .OR.
运算符的优先顺序 • 表达式中运算符的优先顺序: • 由高到低依次为:算术或字符或日期运算→关系运算→逻辑运算 • 相同优先级的运算按从左到右的顺序计算 例如: • 性别="男".AND.职称="副教授" • ? (10+3)>5.and.”ab”$”abcde”
表达式例: 算术表达式:结果为数值型。如3+2 字符表达式:结果为字符型。如 ’Good ’+’Morning’ 或’Good ’-’Morning’ 日期表达式:结果为日期或数值。如DATE()+5 、DATE()-5 或DATE()-{00-08-20} 关系表达式:结果为逻辑型。如”AB”$”ABCD”、”AB”<”BC” 逻辑表达式:结果为逻辑型。如3>2 .AND. .NOT.5>6 说明: ▲在日期型表达式中,两个日期表达式相减,结果为数值,表示两日期之间相差的天数,两日期表达式相加,属非法表达式;一个日期表达式与一个数值表达式相加,结果为日期型表达式,表示从当前日期往后数N天;一个日期表达式与一数值表达式相减,表示从当前日期向前数N天。 ▲逻辑表达式包含关系表达式,关系表达式中包含算术表达式。注意,关系表达式与逻辑表达式的结果都为逻辑型。
命令格式 • 由两部分组成 • 命令动词,表示应执行的操作 • 若干个短语,对操作提供某些限制性说明。 • 一般格式如下: 命令动词 短语 • 如:copy to aa for 性别=“男”
与表有关的命令 • 与表有关的命令格式: • 命令动词 [范围] FOR<条件> [FIELDS <字段名表>] • 命令中的FOR、FIELDS是关键字,用户不得随意更改。 • 约定: [ ]表示可选项,不选用系统的默认值 < >表示必选项 <范围>:表示对表记录操作的范围 • ALL 表示全体记录 • NEXT N 当前记录开始后续共计 N 个记录 • RECORD N 特指第 N 号记录。 • REST 从当前记录开始到表尾的所有记录 FOR〈条件〉 选择操作 FIELDS <字段名表> 投影操作
编号 姓名 • 101 张三 • 102 王一 • 103 刘六 • 104 李四 • 105 赵七 • 朱八 表一 Go 1 List for 编号>‘101’.and.编号<“105” Go 1 List fields 姓名 选择操作 投影操作 操作释例 • Go 3 • Disp all • Go 2 • Disp next 2 • Go 3 • Disp rest • Go 3 • Disp record 5
命令书写的规则 • 命令以命令动词,与动词短语的顺序无关 • 用空格来分隔各单词短语 • 命令的最长是254个字符,用分行符;分行 • 命令动词和关键字可以缩写为前四个字符 • 如MODIFY STRUCTURE可写为MODI STRU • 不分大小写,可以混合使用 • 变量名、字段名和文件名时,应避免与命令动词和关键字同名,以免运行时发生混乱
6.2 数据库的操作命令 • 常用的操作命令 • 包括 • 数据库的建立 • 打开 • 设置 • 关闭 • 删除
1.创建数据库 • CREATE DATABASE 命令 • 命令格式: • CREATE DATABASE [〈数据库名〉|?] • 命令功能:用于创建一个数据库
说明: (1)数据库名已经存在,则提示新的路径或文件名 (2)参数“?”或无参数,弹出对话框,位置及名称 (3)数据库以.DBC为其扩展名,以.DCT为备注文件,索引文件则以.DCX为扩展名 (4)该命令以独占方式创建并打开一个数据库 例如:创建一个名为t1.dbc的数据库,并显示有关数据库的信息 • CREATE DATABASE t1 &&创建数据库t1 • CLEAR &&清除屏幕 • DISPLAY DATABASE &&显示数据库t1信息
2.打开数据库 • 用OPEN DATABASE命令打开已经存在的数据库 • 命令格式: • OPEN DATABASE [〈数据库名〉|?] • 命令功能: • 打开一个指定的数据库。 • 说明:
6.2 数据库的操作命令 • 常用的操作命令 • 包括 • 数据库的建立 • 打开 • 设置 • 关闭 • 删除
1.创建数据库 • CREATE DATABASE 命令 • 命令格式: • CREATE DATABASE [〈数据库名〉|?] • 命令功能:用于创建一个数据库
说明: (1)数据库名已经存在,则提示新的路径或文件名 (2)参数“?”或无参数,弹出对话框,位置及名称 (3)数据库以.DBC为其扩展名,以.DCT为备注文件,索引文件则以.DCX为扩展名 例如:创建一个名为t1.dbc的数据库,并显示有关数据库的信息 • CREATE DATABASE t1 &&创建数据库t1 • CLEAR &&清除屏幕 • DISPLAY DATABASE &&显示数据库t1信息
2.打开数据库 • 用OPEN DATABASE命令打开已经存在的数据库 • 命令格式: • OPEN DATABASE [〈数据库名〉|?] • 命令功能: • 打开一个指定的数据库。
3.设置当前数据库 • SET DATABASE TO命令 • 命令格式: • SET DATABASE TO [〈数据库名〉] • 命令功能: • 设置当前数据库。
说明: (1)〈数据库名〉为当前要打开的数据库名称 (2)略名,弹出一个‘显库’对话框 例如: • OPEN DATABASE t1 库t1.dbc • OPEN DATABASE t2 库t2.dbc • DISPLAY DATABASE 显示当库t2.dbc的信息 • SET DATABASE TO t1 置t1为当前库 • DILPLAY DATABASE 显示当库t1的信息 • SET DATABASE TO t2 设t2为当库 • DISPLAY DATABASE 显库t2.dbc的信息
4.关闭数据库 命令格式: • CLOSE DATABASE [ALL] • 命令功能: • 关闭数据库。 • 说明: • ALL用于关闭所有打开的数据库 • 如果没有指定此参数,则将关闭当前数据库
5.删除数据库 • 命令格式: • DELETE DATABASE 〈数据库名〉|? [DELETETABLES][RECYCLE] • 命令功能: • 删除数据库