VF讲义要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VF专升本讲义要点
一、VF数据库的概念要点
1.数据库是存储在计算机存储设备上,结构化的相关数据的集合。
不仅包括数据本身,而
且包括相关事物之间的联系。
2.数据库管理系统(DBMS)。
数据库系统的核心软件,操作系统支持下的系统软件。
3.数据库系统:引进数据库技术后的计算机系统。
特点:数据共享,减少冗余;特定数据
模型;较高的数据独立性。
4.数据模型分为:层次模型、网关模型、关系模型。
关系模型用二维表结构来表示实体及
实体之间的联系。
关系数据理论是关系模型的基础。
5.类是对一类相似对象的性质的描述,这些对象具有相同的性质,相同种类的属性以及方
法。
类是对象的模板,有了类的定义后,基于类就可以生成这类对象中任何一个对象。
类的特性:封装性、继承性、多态性。
6.对象:客观世界里的任何实体都可以被看作是对象。
对象可以是具体的物,也可以指某
些概念。
7.关系:一个关系就是一张二维表,每个关系有一个关系名。
在VF里,称为表,文件扩
展名为.DBF
8.元组:二维表水平方向的行称为一个元绷,元组对应存储文件中的一个具体记录。
9.属性:二维表中垂直方向的列称为属性,又称为字段,每一列有一个属性名。
10.域:属性的取值范围,即不同元组对同一个属性的取值所限定的范围称为域。
11.关键字:关键字是属性或属性的集合,其值能够惟一的标识一个元组。
12.外部关键字:如果表中的一个字段不是本表的主关键字或候选关键字,而是另一个表的
主关键字或候选关键字,这个字段(属性)就称为外部关键字。
13.实体间的联系:一对一、一对多、多对多
14.专门的关系运算:选择(行)、投影(列)、连接(两表,公共属性):关系运算的结果
仍然是一个关系。
15.数据完整性:数据的正确性和一致性,分为实体完整性、参照完整性、域完整性,前2
个是关系数据库必须满足的。
1)实体完整性:实体惟一性,即表中记录的惟一性,表中不许有重复的记录。
用主关
键字(主索引)或候选关键字(候选索引)来保证表中的记录惟一,即保证实体惟
一性。
2)域完整性:数据类型的定义及字段有效性规则属于域完整性范畴。
3)参照完整性:当插入、删除或修改表中的数据时,通过参照引用关联的另一个表中
的数据来表的数据操作是否正确。
建立参照完整性必须首先建立表之间的永久关
联。
参照完整性说明了一表的数据操作是否允许要参照另外一个表的数据。
参照完整性规则包括更新规则、删除规则、插入规则。
a)更新规则规定了当更新父表中的连接字段(主关键字)值时,如何处理相关的
子表中的记录:
●如果选择“级联”,则用新的连接字段值自动修改子表中的相关所有记录;
●如果选择“限制”,若子表中有相关的记录,则禁止修改父表中的连接字
段值;
●如果选择“忽略”,则不作参照完整性检查,可以随意更新父表中的连接
字段值。
b)删除规则规定了当删除父表中的记录时,如何处理子表中的相关记录:
●如果选择“级联”,则自动删除子表中的相关所有记录;
●如果选择“限制”,若子表中有相关的记录,则禁止删除父表中的记录;
●如果选择“忽略”,则不作参照完整性的检查,删除父表的记录时与子表
无关。
c)插入规则规定了当插入子表中的记录时,是否进行参照完整性检查:
●如果选择“限制”,若父表中没有相匹配的连接字段值则禁止插入子记录;
●如果选择“忽略”,则不作参照完整性检查,即可以随意插入子记录。
16.表的分类:自由表和数据库表。
自由表是独立于数据库之外的表,只存储相对独立的信
息,字段名最大可以是10个字符;数据库表可以使用长表名和长字段名,最大可以是128个字符,字段名可以有标题、注释、设置默认值、能设置字段级和记录级规则,对于插入、删除、修改等操作可以设置触发器。
17.表间关系:永久关系、临时关系(临时创建:关闭其中一个表时关系被自动关闭;通过
主表记录指针的移动来控制子表记录指针的移动(指针联动));用set relation命令来创建,当用关键字段建立关系时,子表必须索引;当用记录号recno()来建立关系时子表不必索引。
18.
二、VF的数据类型和主要文件类型
1.
2.VF工作方式:交互方式、程序运行方式
三、程序基础
1.常量:值不变化的量
1)数值型常量:由数字0—9、小数点和正负号构成。
如100.98,.45,-5,1.234E2,
1.23e-2
2)货币型常量:表示货币值,前置符$,存储和计算时,采用4位小数,自动四舍五
入,如$90
3)字符型常量:字符串就是一系列字符。
定界符:半角单引号、双引号或方括号。
如’
大连’,”大连”,[大连]
4)日期型常量:定界符是一对花括号。
严格日期:{^yyyy-mm-dd},如{^2012-12-20},
传统日期格式:{mm/dd/yy},如{12/20/98}
5)日期时间型常量:{^yyyy-mm-dd hh:mm:ss a|p},如{^2012-12-20 11:25:30 a}
6)逻辑型常量:用.作定界符,逻辑真:.T. .Y. .t. .y.,逻辑假:.F. .N. .f. .n.
2.变量:字段变量和内存变量两大类。
变是指值与类型的可改变。
3.内存变量的显示:list memory或display memory
4.数组:由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。
每个数组
元素相当于一个简单变量一样使用,可以给各元素分别赋值。
1)创建数据的命令:
一维数组:
dimension 数组名(数组元素个数)
declare 数组名(数组元素个数)
二维数组:
dimension 数组名(行数,列数)
declare 数组名(行数,列数)
例如:
dimension a(10)
display memory
dimension b(3,2)
display memory
b(1,1)可以看作是b(1),b(1,2)=b(2),b(2,1)= ,b(2,2)=b(4),b(3,1)= ,b3(2)=b(6)
2)数据初始化
a(1)=1
b(1,2)=3
a=100
display memory
a(1)=”OK”
?a(1)
3)从键盘输入10个数保存到数组n中,并输出10个数中的最大值。
dime n(10)
for k=1 to 10
input “一个数” to n(k)
endfor
max=n(1)
for k=2 to 10
if max<n(k)
max=n(k)
endif
endfor
?max
4)改写上面的最大值程序,使其功能变为求数组中元素的最小值。
min=n(1)
……
if min>n(k)
min=n(k)
endif
……
?min
5.表中数据与数组数据之间的交换
1)将表中的当前记录复制到数组:scatter [fields 字段名] to 数组名
功能:将表的当前记录从指定字段表中的每个字段内容开始,依次复制到数组名的第一个元素开始的内存变量中。
2)将数组数据复制到表的当前记录:gather from 数组名[fields 字段名]
功能:将数组中的数据作为一个记录复制到表的当前记录中,从第一个数组元素开始依次向字段名表指定的字段填写数据。
6.表达式:由常量、变量、函数和运算符组成的式子。
7.数值表达式:运算结果仍然是数值型数据。
算术运算优先级:() –负号**或^ *或/
或%求余运算+或–
?-3**2 结果为:
?(3+4)/2^2+int(12.5) 结果为:
8.字符运算符:+ 串直接连接;- 将前字符串尾部的空格移动后串尾部再接。
?”abc**”+”*cd*”结果为:abc***cd* 其中*代表空格
?”abc”**-“*cd*”结果为:abc*cd*** 其中*代表空格
9.日期表达式:+或-运算符,日期+数=日期、日期-数=日期、日期-日期=数、日期+日期是
错误的。
?{^2005-3-29}-{^2005-3-21} 结果为:
?{^2005-3-29}-3 结果为:
?datetime()+30 结果为:
10.关系表达式:
1)关系表达式描述的同类数据的大小比较关系,其结果是一个逻辑值,关系成立结果
取真(.T.),关系不成立结果取假(.F.)。
2)关系运算符两边的数据类型要一致,只有同类型的数据才能进行比较。
3)数据比较规律
a)数值和货币类型:数越大结果越大。
如1000>800,$90>$10
b)日期数据:未来>历史。
如{^2007-5-19}>{^2007-5-18}
c)逻辑常量:.T.>.F.
d)字符串比较:依次对应比较两个串的字符。
如”abc”>”aBc”
e)字符比较:ASCII字符规律为:空格<’0’-‘9’<’A’-‘Z’<’a’-‘z’。
例如:汉字“男”的
拼音为“nan”,汉字“女”的拼音为“nv”,所以“男”小于“女”
练习:
?”ok”$”abokd”结果为:
? “8”>”100”结果为:
? 8>100 结果为:
?{^2004-5-19}>{^2003-5-19} 结果为:
? $80<$60 结果为:
? “abc”=”ab”结果为:
Set exact on 结果为:
? “abc”=”ab”结果为:
11.逻辑表达式:运算结果为逻辑值。
优先级由高到低:not>and>or
?not (10+3)>5 and “ab”$”ab”+”cde” or 3>=4 结果为:
?3>2 and not 5>6
四、函数
函数类型函数名功能
字
符型函
数len() 求字符串长度
lower() 将字符串中的字母变成小写字母
upper() 将字符串中的字母变成大写字母
space() 生成空格函数
trim() 去掉字符串尾部的空格
ltrim() 去掉字符串首部的空格
alltrim() 去掉字符串首尾的空格
left() 从指定字符串右面开始取一个指定长度的子串right() 从指定字符串左面开始取一个指定长度的子串substr() 从指定字符串指定位置开始取一个指定长度的子串occurs() 计算子串出现次数函数
at() 求子串位置函数
stuff() 子串替换函数
数
值
型函
数abs() 绝对值函数
sqrt() 求平方根函数
int() 求指定数值的整数部分
ceiling() 求大于或等于指定数值的最小整数floor() 求小于或等于指定数值的最大整数round() 四舍五入函数
mod() 求余函数
max() 求最大值
min() 求最小值
日
期
型函
数
date() 当前系统日期
time() 当前系统时间
datetime() 当前系统日期和时间
year() 年份
month() 月份
day() 天数
dow() 星期几
类
型
转
换
函数str() 数值换字符val() 字符换数值ctod() 字符换日期dtoc() 日期换字符
测试函数between() 判断一个表达式是否在另外两个表达式之间
isnull() 判断一个表达式的结果是否为null
vartype() 判断表达式的类型,返回一个大写字母
bof() 判断表的记录指针是否指向表头
eof() 判断表的记录指针是否指向表尾
recno() 返回当前记录的记录号
reccount() 返回表中记录的个数
iif()
iif(逻辑表达式,表达式1,表达式2),如果逻辑表达式的
值为真,返回表达式1的值,否则返回表达式2的值
deleted() 判断当前记录是否有删除标记
五、表中命令
1.增加记录
1)Append在表的尾部追加记录
a)Append
b)Append blank
2)Insert插入记录
a)Insert
b)Insert before
c)Insert before blank
2.删除记录
1)Delete [for 条件]
2)Recall [for 条件]
3)Pack 物理删除有删除标识的记录
4)Zap物理删除表中全部记录
3.修改记录
1)Edit或change或browse
2)Replace 字段名with 值:只修改当前记录
3)Replace 字段名with 值all:修改所有记录
4.排序
1)Sort on 字段名to 新表:按字段名升序排列
2)Sort on 字段名/d to 新表:按字段名降序排列
3)按多个字段排序时,字段名间用,(逗号)分隔
5.索引
1)主索引:不许重复值,数据库表能建立,一个表一个主索引
2)候选索引:不许重复值,数据库表和自由表均可,一个表可以多个候选索引
3)普通索引:允许重复值,可以多个
4)惟一索引:允许重复值,可以多个
5)Index on 字段名to 索引文件名:建立单索引文件
6)Index on 字段名tag 索引标识:建立复合索引,在字段名后加descending表示降
序,多个字段索引时用+或-连接。
6.数据库操作命令
1)Create database
2)Opend database
3)Close database
4)Set database to
5)Delete database
6)Add table 表名
7)Remove table 表名
7.工作区:VF管理内存的一种方式,将内存划分为多个区域,每个区域称为一个工作区。
1)工作区号:1---32767
2)系统指定的工作区名:1—10分别A—J
3)Select 工作区号:选择工作区
4)Select 0:选择最小空闲工作区
8.临时关联:set relation to 公共字段into 子表,注意子表建立索引。
9.两表连接:join with 子表名to 新表for 主表.公共字段=子表.公共字段[fields 字段名
1,字段名2……]
10.SQL语句
1)建表:create table 表名(字段名类型(宽度),……)
注意:定义实体完整性的主关键字(主索引)用primary key,定义域完整性用check
约束,定义默认值用default,定义出错信息用error.
2)查询:select 字段名from 表名where 条件group by 分组字段order by 排序字
段[desc]
a)Select * 表示查询所有字段
b)Distinct:去掉查询结果的重复记录
c)Top n:查询前n条记录,top n percent:查询前百分之n条记录
d)Into table或into dbf表示将查询结果输出到表,into array 数组名表示将查询
结果输出到数组,into cursor 临时表表示将查询结果输出到临时表,to file 文
本文件表示将查询结果输出到文本文件。
e)当使用group by时,having子句可用作对分组结果的进一步筛选。
f)使用order by时,desc表示降序,按多个字段排序时字段名间用,(逗号)分
隔。
g)Where后的特殊运算符有:in;between and;like;使用like时%表示任意个字符
_(下划线)表示一个字符。
11.查询练习
说明:以下查询在zgda(职工档案)表中进行
Zgda(编号,姓名,性别,年龄,职称,工作时间,婚否,简历,照片)
12.索引查找
Index on 年龄desc tag nl
Index on 姓名asc tag xm
Set order to tag nl
List
Find 45
Display
Set order to xm
List
Seek “王”
13.顺序查找
Use zgda
Locate for 姓名=”王”
?found()
Display
Continue
?found()
display
14.过滤记录
Use zgda
Set filter to 年龄>40 &&指定过滤条件为年龄大于40岁,满足条件的记录可操作
List &&只会显示年龄大于40岁的记录
Set filter to &&取消过滤器,此时,所有记录都可操作Set filter to 性别=’女’ and 职称=“讲师”&&指定过滤条件为女讲师
15.统计命令
Use zgda
Sum 年龄to x &&求所有年龄字段值的和,结果存放在x变量中
?x
Average 年龄to y &&求所有年龄字段值的平均值,结果存放在y变量中
?y
Clear
Count to k &&查表中全部记录个数,结果存放在k变量中
?k
?reccount() &&查表中全部记录个数
Locate for 性别=”女”&&找到第一个女职工记录
Delete &&逻辑删除
Count to k &&查表中全部记录个数,结果存放在k变量中
?k
?reccount()
Set delete on &&屏蔽有删除标记的记录
Count for 性别=”女” to
k &&查表中女职工记录个数,存放在k变量中
?k
?reccount()
16.分类汇总
Use zgda
Index on 性别to xb
Total on 性别to zgnew
Use zgnew
Count to x
?x
lsit
六、程序文件
1.建立程序文件
1)Modify command
2)Modify file *.prg
2.输入命令
1)Input “提示信息” to 变量:要输入定界符
2)accept “提示信息” to 变量:只能输入字符串
3)wait “提示信息” to 变量
a)window
b)timeout n
4)@行号,列号say “提示信息” get 变量……read
a)变量要先定义
b)多个get可以用一个read
3.执行程序文件:do 文件名
4.三种程序结构:顺序结构、选择结构(分支结构)、循环结构
5.选择结构:
1)IF 条件
语句
Else
语句
Endif
2)Do case
Case 条件
语句
Case 条件
语句
……
Otherwise
endcase
6.循环结构
1)Do while 条件
语句
Loop
语句
Exit
语句
Enddo
注意:Loop表示不再执行其后的语句直接回到循环开头;exit表示直接退出循环。
2)For 循环变量=初值to 终值step 步长
语句
Endfor或next
注意:步长默认为1
3)Scan [for 条件]
语句
Endscan
注意:自动移动指针
7.子程序
1)过程的定义:
Procedure或function 过程名
语句
Endproc或endfunc
2)调用过程:
a)Do 过程名[with 参数]
b)过程名([参数])
3)打开过程文件:set procedure to 文件名
8.变量作用范围
1)Public:公共内存变量,初值为.F.
2)Private:隐藏上层程序中同名的变量
3)Local:局部变量,只在建立的模块中使用,不能在上层或下层模块使用。
4)没有声明的变量:私有变量,在建立的模块及其子模块中使用。