VFP 教案.docx
《VFP 教案.docx》由会员分享,可在线阅读,更多相关《VFP 教案.docx(62页珍藏版)》请在冰豆网上搜索。
VFP教案
2.4表的操作
Vfp中,可使用界面方式操作表,也可使用命令方式操作表。
比较复杂的操作一般只能通过命令来进行。
一.修改表结构:
方式一:
打开“数据库设计器”,右击表,在快捷菜单中选“修改表”命令,如图15
方式二:
在项目管理器中选中“职工档案”表,单击右侧的“修改”按钮,如图16
方式三:
使用命令
(1).使用use命令打开表:
use职工档案
(2).再使用下面命令修改表结构:
modifystructure
二.打开表:
use命令
格式:
use[数据库名!
]表名
说明:
(1).“[]”中的内容为可选项,就是说,在打开数据库表时,可以加上“数据库名!
”作前缀,也可以不加前缀。
(2).打开的表文件如不在默认目录中,应指定文件路径。
如没有指定默认目录,可输入“setdefaultto路径”命令来指定默认目录。
例:
打开默认目录中的“职工档案.dbf"
在命令窗口输入下面命令,再回车即可:
use职工档案
三.关闭表:
直接输入use回车,不加表名,可关闭当前打开的表。
四.向表中追加新记录:
格式:
append[blank]
说明:
(1).选blank选项,执行该命令后,直接在表末尾添加一条空白记录,界面没有发生变化,可在以后使用replace等命令修改它。
(2).不选blank选项,则弹出编辑窗口,以交互窗口方式输入记录。
五.浏览表记录:
命令格式:
Browse[Fields字段名表][For条件]
功能:
以Browse窗口形式显示记录。
说明:
(1).[Fields字段名表]:
指定浏览窗口中出现的字段名表,字段名之间用逗号分隔。
(2).[For条件]:
指定浏览窗口中出现的记录条件。
例:
在命令窗口依次执行下列命令:
usery!
职工档案
browsefields编号,姓名,工资
use
六.显示表记录:
格式1:
list[字段名表][范围][For条件]
格式2:
display[字段名表][范围][For条件]
功能:
在Vfp的主窗口屏幕上显示指定记录。
说明:
(1)"范围"有以下几种:
all:
当前表的所有记录
nextn:
从当前记录向后的n条记录。
如:
next3是指从当前记录向后的3条记录。
rest:
从当前记录开始到表结束所有的记录。
(2).display与list大部分情况下相同
区别:
在不加任何选项的情况下,list为显示所有记录,而display为显示当前记录。
例:
use职工档案&&打开“职工档案”表
list编号,姓名for职称=“讲师”&&列出职称为“讲师”的人的编号和姓名
use&&关闭表
2.5表的操作
七.交互修改表记录 :
格式1:
edit[字段名表][范围][For条件]
格式2:
change[字段名表][范围][For条件]
功能:
交互窗口形式修改表中记录
八.自动修改表中记录:
格式:
replace字段名with内容……[For条件]
例:
将“工资情况”表中每个人加100元奖金
use工资情况
replace奖金with奖金+100
use
九.逻辑删除记录:
格式:
Delete[范围][For条件]
功能:
逻辑删除指定记录,被逻辑删除的记录前有删除标记,并没有从数据库中清除,可用Recall命令恢复。
在删除开关打开的情况下,被逻辑删除的记录不参与任何操作;关闭删除开关,被逻辑删除的记录还可正常参与操作。
删除开关可用setdeleteon|off命令指定。
系统默认该开关为关闭状态。
例:
use职工档案
deleteall&&逻辑删除所有记录
browse&&此时删除开关为系统默认的关闭状态,所以可以显示出记录,但每条记录前都有一个删除标记。
setdeleteon&&打开删除开关
browse&&此时逻辑删除记录不参加操作,所以浏览窗口中无任何记录
use
setdeleteoff&&关闭删除开关,恢复默认状态
十.恢复记录:
格式:
recall[范围][For条件]
功能:
恢复被逻辑删除的记录
例:
use职工档案
recallall
use
十一.彻底删除记录:
格式:
pack
功能:
彻底删除被逻辑删除的记录。
没有逻辑删除的记录不受影响。
例:
use职工档案
deletefor姓名=“小赵”&&逻辑删除姓名为“小赵”的记录
pack&&姓名为“小赵”的记录被彻底删除,其余记录不受影响
use
十二.清空表:
格式:
zap
功能:
将表中所有记录彻底删除,但保留表的结构,表文件还在。
此命令要慎用。
2.6记录指针定位和数据排序
一.转到记录:
格式一:
gotop|bottom|n
格式二:
skipn
说明:
(1)"|"为“或”的意思
(2).格式1为绝对记录定位。
即不管当前记录在哪儿,使用格式1都可到达指定记录。
其中,top为表中第一条记录,bottom为表中最后一条记录。
"n"为要定位的记录号。
(3).格式2为相对记录定位,是指相对于当前记录移动n条记录。
n>0时为上移,n<0为下移。
省略n,则默认为向下移动1条记录。
(4).刚打开的表,指针自动定位于第1条记录
(5).eof()函数用于判断指针是否超过表的最后1条记录,若是,则值为.t.,否则为.f.
例:
use职工档案
?
recno()&&"?
"为显示命令,recno()为测试当前记录号函数。
此命令执行结果,在主窗口输出1。
skip
?
recno()&&显示2
gobottom
?
recno()
skip
?
eof()&&显示.t.
二.记录定位:
格式1:
locate[范围][For条件]
格式2:
continue
说明:
locate命令定位到满足条件的第1条记录,如果没定位到,eof()为.t.。
continue命令按locate的条件定位下一条记录。
例:
use职工档案
locatefor职称=“讲师”
display
continue
display
use
三.条件记录过滤:
格式:
setfilterto[过滤条件]
功能:
设置条件过滤后,只有满足条件的记录才会显示。
该命令不带任何选项,则清除过滤条件,不再对记录过滤。
例:
use职工档案
setfilterto性别=“女”
browse
setfilterto
browse
use
四.表数据排序:
在向新建的表输入数据时,表中记录的顺序是按其输入的先后顺序而定的,我们称之为物理顺序。
但有时我们需要按某种要求重新安排记录的顺序。
重新安排记录顺序的方法有两种:
一种为排序,是从物理上重新组织并生成新的表文件;另一种为索引,它通常按照表中某些关键字的值来建立原数据文件的索引文件,达到在使用中将记录按顺序排列的目的,使用索引的方法排序不从物理上重新组织文件,即不会生成新表。
本节先介绍排序,索引将在下节学习。
排序又称分类,即按照表中的某些字段值的大小重新排列记录顺序,这样的字段称为关键字。
按关键字的值排序,从小到大称为升序,从大到小称为降序。
注意:
备注型及通用型字段不能用作排序关键字,其它类型的字段都可以。
命令格式:
sortto新表名on排序关键字[/a][/d][For条件][Fields字段名表]
说明:
(1)."/a"表示升序,"/d"表示降序。
(2).for条件:
指定参加排序的记录条件
(3).fields字段名表:
指定排序后生成的新表中包含的字段
例:
对“工资情况”表,要求按工资由高到低重新排序,并将排序结果存放在“工资情况2.dbf"中。
在命令窗口中依次执行以下命令:
use工资情况
list
sortto工资情况2on工资/d
use工资情况2
list
use
2.7使用“表设计器”建立索引
表经过排序,使无序记录变为有序记录,但在表中插入新记录后又会变成无序,需要重新做排序操作,又会生成新的排序文件,使用非常不方便。
索引技术不对表作物理排序,不生成新表,而是通过建立表文件的索引文件从逻辑上进行排序。
在索引文件中,只记入索引表达式(又称关键字)的值及其记录地址。
我们要从一本书中查找内容,一种方法是从头到尾逐页查找,直到找到为止;另一种方法是通过书的目录,从目录中得到要查找内容的页号,可迅速找到该内容。
索引就如同图书的目录,根据关键字值及地址,可迅速定位到该记录。
表文件在使用索引文件后,既加快了查询速度,当有记录增删时还能自动对索引文件进行调整。
索引文件分为两类:
独立索引和复合索引。
一.独立索引:
如果一个索引存放在一个索引文件,这种索引文件称为独立索引文件,扩展名为.idx。
如果一个表需要多种索引顺序时,使用独立索引就要建立多个索引文件,操作和维护都不方便。
二.复合索引:
如果若干个索引存放在同一个索引文件中,这种索引文件称为复合索引文件,扩展名为.cdx。
在复合索引文件中,如果索引文件主名与表文件主名相同,称为结构化复合索引,否则称为非结构化复合索引。
使用“表设计器”建立的索引肯定是结构化复合索引。
三.索引的类型:
(1).主索引:
主索引的关键字,其表中所有记录的值必须惟一。
例如:
“职工档案”表中,“编号”字段可作为主索引的索引关键字,因为每个人的“编号”肯定是惟一的,而“姓名”字段不可作主索引的索引关键字,因为可能有重名的情况。
只有数据库表可建主索引,且一个数据库表只有建一个主索引。
(2).候选索引:
候选索引的关键字,其表中所有记录的值必须惟一。
一个表可建多个候选索引,且数据库表和自由表均可建候选索引。
(3).普通索引:
普通索引的关键字,其表中记录的值可以重复。
一个表可建多个普通索引,数据库表和自由表均可建普通索引。
(4).惟一索引:
惟一索引的关键字,其表中记录的值可重复,但在索引文件中仅保留重复值记录的第一个。
四.使用“表设计器”建立索引
例:
为“工资情况”根据“编号”建立主索引,根据“工资”建立普通索引,降序排列。
(1).use工资情况
modistructure
&&上述操作,也可在项目管理器中,选中“工资情况”表,单击右侧的“修改”按钮。
(2).在“表设计器”中,切到“索引”选项卡,分别输入索引名和关键字,如图17。
注意:
因为要求“工资”降序排序,,我们应点一下“工资”索引名左侧的箭头,该箭头向下,即为降序排序。
如果要删除某个索引,可以先将光标定于该索引的索引名文本框中,单击右侧的“删除”按钮。
2.8使用命令建立和操作索引文件
一.建立索引文件:
对打开的索引文件,可用下列命令建立索引:
格式:
indexon索引关键字|tag索引名|to索引文件名
说明:
(1).tag索引名:
指定索引名,此索引存放在与表名相同的.cdx文件中。
(2).to索引文件名:
选择此项生成独立索引,即一个索引存放在一个索引文件中;否则生成的是结构化复合索引。
例1:
建立“工资情况”表的结构化复合索引文件,其索引关键字分别为姓名和工资,而索引名分别为xm和gz.
use工资情况
browse
indexon姓名tagxm
indexon工资taggz
browse
&&分别执行以上命令后,生成了“工资情况.cdx”文件,其中存放了xm和gz两个索引。
例2:
用“姓名”作索引关键字,建立“职工档案.dbf”的独立索引文件,文件名为a.idx。
use职工档案
indexon姓名tohello&&执行此命令,检查默认目录e:
\myvfp,会发现多了一个文件:
hello.idx
use
二.打开索引:
打开表时,系统会自动打开结构化复合索引,但此时显示的仍是物理顺序。
要使索引起作用,必须指定主控索引。
主控索引就是控制当前显示顺序的索引。
也可以在打开表的同时指定主控索引。
1.打开表的同时打开索引并指定主控索引:
格式:
use表名[index索引文件名][ordertag顺序号|索引名]
说明:
(1).index索引文件名:
用于打开独立索引文件。
(2).ordertag顺序号|索引名:
用于打开结构化复合索引。
其中,顺序号为该索引在复合索引文件中的先后顺序,即在“表设计器”的“索引”选项卡中看到的该索引的位置。
例:
在命令窗口输入以下命令依次执行:
use职工档案indexhello&&打开表的同时打开独立索引hello
browse&&显示的是按姓名索引的顺序,如图18
use
use工资情况ordertag2&&显示的是gz索引的顺序,如图19,因为gz在“表设计器”中位置为2,如图20
use
图18
图19
图20
2.打开表后再打开索引:
格式1:
setindexto索引文件名
功能:
打开独立索引文件
格式2:
setorerto顺序号|tag索引名
功能:
打开结构化复合索引
例:
在命令窗口依次执行以下命令:
use职工档案
brow&&显示物理顺序,如图21
setindextohello&&打开独立索引文件hello.idx
browse&&显示的是按姓名索引的顺序,如上图18
use
use工资情况
browse&&显示物理顺序
setorderto1&&即将xm指定为主控索引,因为xm在“表设计器”中位置为1,如上图20
browse&&显示按姓名索引的顺序,如图22
setorertogz&&将gz指定为主控索引
browse&&显示的是gz索引的顺序,如上图19
use
图21
图22
三.关闭索引:
格式1:
setindexto
格式2:
setorderto
说明:
上两条命令后不加选项,可关闭当前索引。
格式1用于关闭独立索引,格式2关闭复合索引。
索引关闭后,表仍处于打开状态,显示物理顺序。
四.删除索引:
1.独立索引文件的删除:
用删除文件的方法删除,在“我的电脑”中找到对应的.idx文件,将其删除即可。
2.复合索引文件的删除:
格式1:
deletetagall
格式2:
deletetag索引名
说明:
格式1删除复合索引文件中的所有索引,格式2删除复合索引文件中的指定索引。
一个复合索引文件中的所有索引都被删除后,该复合索引文件即自动删除了。
2.9索引查找
建立索引的目的是进行快速查找,vfp使用下面两条命令进行快速查找:
一.find命令:
格式:
fine字符串
说明:
(1).该命令用于已建立索引且索引已打开的情况,执行该命令将使用索引文件查找与指定字符串相匹配的第一条记录,并把指针指向该记录。
(2).find仅是记录定位,找到后把记录指针指向该记录,并不显示该记录的内容;要显示该记录的内容,可使用display命令。
(3).若指定字符串无前导空格,不必使用引号,否则应使用引号将包括前导空格在内的字符串括起来。
若指定的字符串是变量,还需要使用宏替换函数。
(4).可通过found()和eof()两个函数来测试查找情况。
如查找成功,则两个函数分别返回.t.和.f.;否则,found()返回.f.,eof()返回.t.。
例:
use工资情况tagxm
find李四
?
found(),eof()&&能定位到“李四”,结果为.t.,.f.
display&&显示李四的记录
二.seek命令:
格式:
seek表达式
说明:
(1).seek比find的功能更强,可使用表达式给出关键值,查找与其匹配的第一条记录。
(2).表达式的类型可为字符型、数值型、日期型和逻辑型;
(3).若表达式为字符常量必须用引号括起来,变量可直接引用而不需使用宏替换函数。
例:
use工资情况tagxm
seek"王二"&&此处的表达式为常量,所以使用双引号括起来
display&&显示王二的记录
a="小刚"&&将常量值"小刚"赋给变量a
seeka&&表达式为变量时,不必使用双引号
display
use
2.10计数、求和与求平均值
一.求和:
格式:
sum表达式[to变量名|array数组名][for条件]
功能:
用于对某些数值型的字段求和
说明:
[to变量名|array数组名]:
指定求和结果存放的变量名或数组名。
如省略,则只显示求和结果。
例:
在“工资情况”表中,统计所有人的工资总额。
use工资情况
sum工资togze&&求和结果存放在变量gze中
?
gze
use
二.计数:
格式:
count[for条件][to变量名]
功能:
用于统计指定范围内满足条件的记录个数,并将结果存放于指定的变量中。
例:
统计“职工档案”表中的未婚人数
use职工档案
countfor.not.婚否towh&&"婚否"是逻辑型字段,已婚的值为.t.,未婚用".not.婚否"表示
?
wh
use
三.求平均值:
格式:
average表达式[to变量名|数组名][for条件]
功能:
求指定的数值型字段或数值型字段表达式的平均值
说明:
各选项的意义与sum命令完全相同
例:
统计“工资情况"表中所有人的平均工资
use工资情况
average工资topjgz
?
pjgz
use
2.11工作区
一.工作区的概念:
使用use命令打开一个表,实质是在内存中开辟一个区域,去存放被打开表的数据。
工作区就是表打开的区域。
打开一个表时,若还想操作其它的表,还得使用use命令去打开另一个表。
然而在打开新表的同时,前一个被打开的表也就自动关闭了,这种情况称为单工作区操作。
单工作区操作方式常常难以满足数据处理的需要,为止,vfp提供了多工作区操作方式。
1.vfp允许同时最多开辟32767个工作区,打开32767个表,每个区某一时刻只能打开一个表。
2.用户可使用select命令选择任意一个工作区,对该区中的表进行操作。
当前被选择的工作区称为当前工作区。
任何时刻用户只能选择一个工作区成为当前工作。
3.对当前工作区中的表的操作,不影响其它工作区的表。
4.如果不在表间建立关联,由各区中的表的记录指针保持相对独立。
5.32767个工作区可用相应的数字标识,前10个工作区还可用字母A~J标识。
就是说,1号工作区即是A区,2号工作区即是B区,以此类推。
6.同一个表可在不同的工作区中打开。
7.系统启动后若用户没有选择工作区,则系统自动选择1号工作区为当前工作区。
就是说,我们此前所进行的表操作都是在1号工作区进行的。
8.可以先选择工作区,后打开表,也可以在打开表的同时选择工作。
二.工作区的操作:
1.打开表的同时选择工作区:
格式:
use表名in工作区
说明:
在指定的工作区打开表,此种方式被打开的表名就是表的别名。
表别名可用于选择工作区。
2.打开表的同时命名表别名:
格式:
use表名alias别名
说明:
表别名可用于选择工作区。
3.选择工作区:
格式:
select别名|工作区号
说明:
(1).工作区号范围为1~32767;前10个工作区系统规定的别名是A~J,可以使用打开表时命名的别名,如果没有命名别名,则表名就是别名。
(2).select0为选择最小可用工作区。
假设已经打开了1号和2号工作区,则最小可用工作区为3号工作区,select0相当于select3
例:
seleceA&&即选择1号工作区
use职工档案aliasda&&此后da和A都代表1号工作区
use工资情况in2&&在2号工作区打开“工资情况”表,表名即是工作区的别名
seleda
browse&&显示“职工档案”表的记录
select工资情况&&即选择2号工作区
browse
selectA
use&&关闭1号工作区的表,即“职工档案"
select2
use&&关闭2号工作区的表,即“工资情况”
2.12表间关联、备注型字段和通用型字段的输入
一.表间关联:
不同工作区中打开的表的记录指针是独立移动的。
但在实际问题中常有这种情况:
一项操作所涉及的内容被分别存储在两个或两个以上的表中,如果能按照记录号或表之间的共有字段建立起关联,使多个表的记录指针同步移动,就会简化指针分别定位的操作,提高数据处理效率。
建立关联命令提供的就是这个功能。
1.建立关联:
格式:
setrelationto表达式into工作区|表别名[additive]
说明:
(1).表达式一般为两个表的共有字段。
(2).在两个表中分别以该共有字段建立索引。
(3).建立关联时,需打开表和相关的索引文件
(4).选择[additive]将不解除先前建立的关联,否则将解除此前建立的关联。
2.取消关联:
setrelationto
3.例:
“职工档案”和“工资情况”二表联动。
在命令窗口分别输入并执行以下命令:
setdefaulttoe:
\myvfp&&设置默认目录
opendatabasery&&打开ry数据库
use职工档案in0
indexon编号tagbh1
setordertotagbh1
use工资情况in0
indexon编号tagbh2
setordertotagbh2
select职工档案
setrelationto编号into工资情况
browsefields职工档案.姓名,职工档案.性别,职工档案.文化程度,工资情况.工资&&结果如图23
closedatabase&&关闭数据库,其中的表随之关闭
图23
二.备注型字段的输入:
打开表后,在命令窗口执行browse命令,弹出browse窗口.在该窗口中,用鼠标双击字段区域中的"memo",即打开编辑窗口,可在该窗口中输入任意长的文字.输完后,关闭该编辑窗口,或按ctrl+w结束保存.此时,可看到browse窗口中的备注字段的"memo"变为"Memo".第一个字母大写,表明备注字段中已包含内容.
三.通用型字段的输入:
通用型字段(如"职工档案"表中的"照片")中的数据用鼠标双击browse窗口中字段区域中的"gen",打开通用字段的编辑窗口,插入图像,波形声音,MIDI音乐,视频剪辑等多媒体内容.
向通用型字段中插入图像的方法有两种:
1.先激活通用字段的编辑窗口:
选择"编辑"菜单中的"插入对象",打开"插入对象"对话框,,选择对象类型为"BMP图像",单击"确定"按钮,即可在通用字段编辑窗口中编辑图片.
2.可先把要插入的图像数据在图像编辑软件中(如windows的"画图")复制到剪贴板,然后把图片数据粘贴进来.
通用型字段中添加完图片后,"gen"会变成"Gen",表明该通用字段中已经包含内容.
2.13建立表间连接和表的更新操作
一.建立表间连接:
有时需要将不同表的内容按某种条件重新组成一个新表,可用连接命令join来实现该功能.Join命令实现由两个表,即当前工作表和另一个工作区中的表(由别名指定),依据条件和指定的字段建立新表.执行该命令时,先将当前表的记录指针指向首记录,然后在别名表中依据指定条件搜索,凡满足条件的别名表的记录都各自与当前表的首记录组成一个新记录,并记入新文件中.随后将当前