计算机二级VF第三章 Visual FoxPro 自由表及其数据库的操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章 Visual FoxPro自由表及其数据
库的操作
第一节自由表的基本操作
一、定义表结构
1.命令格式: CREATE <表名>
2.菜单/工具栏法:
文件→新建→表→新建文件→输入表名→保存→……→确定
作业:创建表文件人事管理(RSGL.DBF)并输入10条以上的数据,表文件的结构要求如下:
1 编号 BH C 4
2 姓名 XM C 6
3 性别 XB C 3
4 出生日期 CS D NULL
5 婚否 HF L NULL
6 基本工资 JB N 7,2
7 奖金 JJ I(整型)
二、记录的输入
1.在创建表文件完成后单击"是"命令按钮(针对新表)
2.追加命令(针对旧表)
命令:APPEND [BLANK]
3.插入命令
命令:INSERT [BEFORE] [BLANK]
三、自由表的使用
1.表的打开
格式:USE <表名>
注:刚创建的表文件自动处于打开状态,在当前工作区打开一个新的表文件的同时会自动关闭原有的表文件
NOUPDATE:只读方式打开
EXCLUSIVE:以独占方式打开(默认) SHARED:以共享方式打开
2.表的关闭
命令:USE
注:退出VFP时,所有打开表会自动关闭四、记录的定位
1.绝对定位
格式: GO <N> | TOP |BOTTOM
2.相对定位
格式: SKIP [N]
注:以当前记录为准,使记录向下(N为正)、向上(N为负)移动若干条,N的默认值为1
例: .USE DJKS &&打开表文件DJKS .?RECNO() &&以数值型数据返回当前的记录号
1
注:刚打开的表文件,记录指针指向首记录.GO 78+1
.?RECNO()
79
.SKIP
.?RECNO()
80
.SKIP –3
.?RECNO()
77
.GO BOTTOM &&将记录指针指向尾记录
.?RECNO()
100
.?RECCOUNT() &&以数值型数据返回当前表的记录个数
100
.?EOF() &&当记录指针下出表时返回.T.
.F.
.SKIP
.?EOF(),RECNO()
.T. 101
注:当记录指针下出表时,记录号为当前表记录总数加1
.GO TOP &&定位到首记录
.?RECNO(),BOF() &&BOF()当指
针上出表时返回.T.
1 .F.
.SKIP –1
.?BOF(),RECNO()
.T. 1
注:当记录指针上出表时,记录号为1 *.表文件检测函数
(1).记录号测试函数
格式:RECNO()
(2).表文件尾部测试函数
格式:EOF() .T.:下出表 .F.:表内或上出表
(3).表文件首部测试函数
格式:BOF() .T.:上出表 .F.:表内或下出表
(4).记录个数测试函数
格式:RECCOUNT()
【范围】
1.ALL:表示所有记录
2.NEXT <N>:表示从当前记录开始连
续的N个记录
3.RECORD <N>:表示第N条记录
4.REST:表示从当前至表尾的所有记录例:显示DJKS.DBF表中的所有信息
.DISPLAY ALL
.LIST ALL
.LIST
.?EOF(),RECNO()
.T. 101
注:DISPLAY与LIST均为显示命令,但DISPLAY为分屏显示,而LIST为滚屏显示.在无范围时,DISPLAY默认显示当前记录,而LIST默认显示所有记录
例:显示90条(包括第90条)以后的所有记录
.GO 90
.DISP REST
.?EOF()
.T.
注:以ALL为范围或以REST为范围的命令在使用结束后一般记录指针会下出表(LOCATE命令除外)
例:显示从第50条记录开始的连续7条记录
.GO 50
.DISP NEXT 7
.?RECNO()
56
注:以NEXT为范围的命令使用完成后,记录指针大多指向范围内最后一条记录(LOCATE命令除外)
例:显示第17条记录的信息
.GO 17
.DISP
注:也可用命令 DISP RECORD 17 .?RECNO()
17
注:以RECORD为范围的命令使用完,记录指针指向指定的记录
【条件】
1.FOR <条件>:表示对满足条件的记录
进行操作。

2.WHILE <条件>:表示对满足条件的记
录进行操作,但遇到第一个不满足条件的记录就终止操作。

注:当使用条件短语而没有范围短语存在时,FOR <条件>的默认范围为ALL,WHILE <条件>的默认范围为REST
例:显示所有性别为男的考生信息
.DISP FOR 性别=[男]
例:显示所有性别为女的考生信息
.DISP FOR 性别="女"
.DISP FOR 性别!=[男]
.DISP FOR !性别=[男]
例:显示所有成绩合格的考生的信息
.DISP FOR 笔试>=60 AND 上机>=60
.DISP FOR 结论=[优秀] OR 结论=[通过] .DISP FOR MIN(笔试,上机)>=60
.DISP FOR ALLT(结论)$[通过优秀] 例:显示所有性别为男且成绩合格的考生信息
.DISP FOR 性别=[男] AND(结论=[优秀] OR 结论=[通过])
例:显示前50条记录中的补考考生信息
.GO TOP
.DISP NEXT 50 FOR 结论=[补考]
例:显示订购单表中所有供应商号为NULL 值的记录
.USE 订购单
.DISP FOR ISNULL(供应商号)
例:显示订购单表中所有供应商号不为NULL值的记录
.DISP FOR !ISNULL(供应商号)
例:显示DJKS表中笔试和上机成绩均在70-80之间的考生信息
.USE DJKS
.DISP FOR 笔试>=70 AND 笔试<=80 AND 上机>=70 AND 上机<=80
.DISP FOR BETWEEN(笔试,70,80) AND BETWEEN(上机,70,80)
【指定字段】
FIELDS 字段名表:表示对指定的字段进行操作。

例:显示所有考生的考号,性别,姓名,结论信息
.DISP FIELDS 考号,性别,姓名,结论 ALL 例:显示前20条记录中所有性别为女的考生的考号,姓名,结论信息
.GO TOP
.DISP FOR 性别=[女] FIELDS 考号,姓名,结论 NEXT 20
注:命令除"命令动词"必须在最前面之外,其它各个短语的先后顺序无关紧要
*在对记录的操作命令中,"范围"和"条件"
短语是进行"选择操作",而"字段名列表"则是进行"投影操作"
五、记录的显示
格式:LIST|DISP [范围] [条件] [字段名表] [OFF]
【DISP 默认范围为当前记录,LIST默认范围为ALL】
例:
.DISP ALL 姓名-IIF(性别=[男],[先生],[女士])-"您的考试成绩为:"-结论OFF
注:
OFF:有此选项时,显示时不显示记录号
IIF(L,表达式1,表达式2):当括号内的L 为.T.时,返回表达式1的值,反之返回表达式2的值
六、自由表的复制
格式:COPY TO <新表文件名> [范围] [条件] [字段名表]
功能:将当前表中的指定内容复制到指定的新表文件中
例:将DJKS表中的所有信息复制到DJKSBAK.DBF中
.USE DJKS
.COPY TO DJKSBAK
.USE DJKSBAK
.BROWSE &&浏览编辑
注:通过COPY TO 命令生成的表文件不会自动打开
例:将DJKS表中所有性别为男的合格考生保存到NAN.DBF中,所有性别为女的合格考生保存在NV.DBF中
.USE DJKS
.COPY TO NAN FOR 性别=[男] AND 笔试>=60 AND 上机>=60
.COPY TO NV FOR 性别=[女] AND ALLT(结论)$[优秀通过]
注:COPY STRUCTURE TO <表文件名> [字段
名表] 命令为仅复制表的结构,新表将是一个只有结构而无记录的空表
例: .USE DJKS
.COPY STRU TO LSH FIELDS 考号,姓名,性别,结论
.USE LSH
.?RECNO(),EOF(),BOF(),RECCOUNT()
1 .T. .T. 0
七、修改记录
1.交互式修改命令
格式:EDIT|CHANGE
2.浏览编辑
格式:BROWSE
3.命令替换
格式:REPLACE [范围][条件] <字段名1> WITH <表达式1> …
【默认范围为当前记录】
功能:用WITH后表达式的值替换WITH前指定字段的当前值.要求:表达式的类型与字
段的类型一致.可以一次为多个字段改值.注:只能对有记录内容的字段进行修改(空记录也可以)
例: .USE DJKS
.COPY TO DJKSBAK
.USE DJKSBAK
.REPL 结论 WITH SPACE(6) ALL
.REPL ALL 结论 WITH [通过]
.REPL 结论 WITH [优秀] FOR MIN(笔试,上机)>=85
.REPL 结论 WITH [补考] FOR 笔试<60 OR 上机<60
.REPL 结论 WITH [未过] FOR MAX(笔试,上机)<60
4.表结构的修改
命令:MODIFY STRUCTURE
注:显示结构为LIST|DISPLAY STRUCTURE
八、记录的删除与恢复
1.逻辑删除
格式:DELE [范围] [条件]
【默认范围为当前记录】
例:逻辑删除DJKSBAK表中所有成绩为'未过'的考生信息
.DELE FOR 结论=[未过]
.BROWSE
例:逻辑删除DJKSBAK表中所有性别为男且结论为'补考'的考生信息
.DELE FOR 性别=[男] AND 结论=[补考] .BROWSE
例:删除第4条记录
.GO 4
.DELE &&删除当前记录
.?DELE()
.T.
注:当前记录有逻辑删除标记时,DELETE()函数的返回值为.T.
例:显示所有有删除标记的记录
.DISP FOR DELE()
例:将当前表无删除标记的记录复制到DJ.DBF中
.COPY TO DJ FOR !DELE()
2.恢复删除
格式:RECALL [范围] [条件]
【默认范围为当前记录】
例:恢复前50条中,性别为男的考生的被删除标记
.GO TOP
.RECA NEXT 50 FOR 性别='男'
.BROWSE
3.物理删除
命令:PACK
例:物理删除当前表中有删除记号的记录 .PACK
4.物理删除所有记录
命令:ZAP
例:物理删除当前表中所有记录
.ZAP
注:本命令使用完后当前表将成为空表(只有结构而无记录)
例:将DJKS表的记录追加到当前表中.APPEND FROM DJKS
注:APPEND FROM <另一表名>命令的功能为:将另一个表文件中信息追加到当前表中,使用完后,当前记录为尾记录(BOTTOM);另外,如果另一表中的字段名或类型与当前表不相符,则会追加空记录;另一表要处于关闭状态
九、条件查找命令
格式:LOCATE FOR <条件>[范围]
【记录指针定位在满足条件的第一条记录,使用CONTINUE命令可以查找到满足条件的其它记录】
例 .LOCATE FOR 性别=[男] AND 结论=[优秀]
.?FOUND(),EOF()
.T. .F.
.COUNTIUE &&在上一个LOCATE命令的剩余范围内继续查找
.?性别,结论
男优秀
十、排序
格式:SORT TO <新表文件名> ON <字段1>[/A] [/D] [/C]…[范围][条件][字段名表]
【排序又称分类。

A升序 D降序 C不区分大小写字母】
例:将DJKS表中的信息按笔试成绩值降序,笔试相同按上机成绩降序保存在文件PX1.DBF中
.USE DJKS
.SORT TO PX1 ON 笔试/D,上机/D FIELDS 考号,姓名,笔试,上机
例:将DJKS表中的信息按结论升序,结论相同按性别升序保存在文件PX2.DBF中
.SORT TO PX2 ON 结论,性别
.USE PX1
.BROWSE
.USE PX2
.BROWSE
第二节 Visual FoxPro数据库及数据库
表的基本操作
一、建立数据库
格式:CREATE DATABASE <数据库文件名> 二、打开数据库
格式:OPEN DATA <数据库文件名>
三、修改数据库
格式:MODI DATA [数据库文件名]
四、关闭数据库
格式:CLOSE DATA [ALL]
注:有ALL选项为同时关闭所有数据库
五、删除数据库
格式:DELE DATA <数据库文件名> [DELETETABLES] [RECYCLE]
【DELETETABLES:删除数据库
RECYCLE:删除后存入回收站】
例:创建订货管理.DBC数据库
.CREA DATA 订货管理
例:打开数据库订货管理
.OPEN DATA 订货管理
例:修改数据库订货管理
.MODIFY DATA 订货管理
例:关闭数据库
.CLOSE DATA
例:删除数据库订货管理
.DELETE DATA 订货管理
注:要删除一个数据库,则该文件必需处于关闭状态
六、数据库表的建立
*在打开数据库的情况下,建立的表文件才可成为数据库表,否则为自由表。

命令: CREATE <表名>
【字段有效性】
规则(字段有效性规则):逻辑表达式
信息(违背字段有效性时的提示信息):字符串表达式
默认值(字段默认值):则以字段类型确定
【显示】
格式(必须以@开头)
输入掩码:
标题:指定字段在显示时的标题
作业:创建数据库"人事管理.DBC",并在库中创建数据库表"RSGL.DBF",表结构要求略,其它要求如下:
1.各字段均设置相应的"标题"显示
2.设置"BH"字段的显示"格式"为全部大写(@!),"输入掩码"为:"A999"
3.设置"XM"字段的显示"格式"为居中(@I)
4.设置"XB"字段的有效性规则为:"XB$[男女]",信息为:"[性别只能输入男或女]",默认为:"[男]"
5.设置"CS"字段的有效性规则
为:"BETW(YEAR(CS),1970,1988) OR ISNULL(CS)",信息为:"[出生年份必需在1970-1988之间!]"
6.设置"JB"字段的有效性规则为:"JB>=0",信息为:"[基本工资不能小于
0!]",默认为:"5000"
7.设置"JJ"字段的有效性规则为:"JJ>=0",信息为:"[奖金不能小于
0!]",默认为:"150"
七、将自由表添加至数据库
格式:ADD TABLE <表名>|? [NAME 长表名]
*一个表只属于一个数据库
八、从数据库中移出表
格式:
REMOVE TABLE <表名> [DELETE] [RECYCLE]
【DELETE:从磁盘中删除 RECYCLE:移入回收站,而不是删除】
*一个数据库表从数据库移出之后则变成一个自由表
例:创建数据库订货管理.DBC,并将表文件仓库,职工,订购单,供应商添加到数据库中,再将这四个数据库表从数据库中移去 .MODI DATA 订货管理
.ADD TABLE 仓库
.ADD TABLE 职工
.ADD TABLE 订购单
.ADD TABLE 供应商
.REMOVE TABLE 仓库
.REMOVE TABLE 职工
.REMOVE TABLE 订购单
.REMOVE TABLE 供应商
九、表文件的索引
1.索引文件的类型
(1)主索引:在指定字段或表式中不允许出现重复值,一个表只能有一个主索引,只能适用于数据库表。

(2)候选索引:在指定字段或表式中不允许出现重复值,一个表可以有多个候选索引。

(3)唯一索引:把指定字段值重复的记录排除在索引文件之外。

(4)普通索引:允许指定字段值重复。

2.用命令建立索引文件
格式INDEX ON <索引表达式> TAG <索引名> [条件] [ASCE|DESC] [UNIQ] [CAND] 【ASCE:升序DESC:降序 UNIQ:表示唯一索引 CAND:候选索引】
3.表设计器中建立索引
先打开表设计→选中索引字段→选择索引(无、升、降)→选择“索引”选项卡→输入索引名(索引文件名)、选择索引类型(主索引、候选索引、唯一索引、普通索引)、表达式(索引表达式)、筛选(条件)
4.设置当前索引
格式:SET ORDER TO [TAG] <索引名> [ASCE|DESC]
*不管索引是按升序还是按降序建立,当使用ASCE 或DESC选项时可重新指定升序或降序
5.删除索引
命令格式:DELE TAG <ALL|索引名> 例:为DJKS.DBF表,按笔试字段创建升序索引,索引名为BSH,按上机字段创建降序索引,索引名为SHJ,按结论字段创建升序唯一索引,索引名为JL,按笔试+上机创建降序索引,索引名为ZF(总分)
.USE DJKS
.INDEX ON 笔试 TAG BSH
.INDEX ON 上机 TAG SHJ DESC
.INDEX ON 结论 TAG JL UNIQUE
.INDEX ON 笔试+上机 TAG ZF DESC 例:设置BSH索引为当前索引
.SET ORDER TO BSH
.BROWSE
例:恢复记录的物理顺序
.SET ORDER TO
.BROWSE
例:删除索引BSH
.DELETE TAG BSH
例:删除所有索引
.DELETE TAG ALL
十、参照完整性
1.建立表之间联系
*必须在父表中建立主索引,在子表中建立普通索引,然后通过父表中的主索引与子表普通索引建立两表的联系
打开数据库设计器→设置表文件的索引→用鼠拖动建立关系
2.删除表之间联系
打开数据库设计器→选定关系→用"DEL"键删除
3.设置参照性约束
打开数据库设计器→数据库→编辑参照完整性
*先要清理数据库(物理删除带逻辑删除标记的记录)
作业:创建数据库订货管理.DBC,并将表文件仓库,职工,订购单,供应商添加于数据库中;为仓库表创建仓库号主索引,职工表创建职工号主索引和仓库号普通索引,为订购单表创建订购单号主索引和职工号,供应商号普通索引,为供应商表创建供应商号主索引.所有索引的索引名与表达式均相同,且都为升序.通过相关的索引为各个表建立永久联系(按索引名相同的原则),并生成完整性约束:更新规则为级联,删除规则为限制,插入规则为忽略.
十一、多表同时使用
1.工作区的选择
格式:SELECT <工作区号>|<表名>
*工作区号最小为1,最大为32767,默认为1。

在表打开的情况下方可使用表名
SELECT 0:表示尚未使用的工作区中编号最小的工作区号
*用USE指定工作区(USE <表名> IN <工作区号>)
2.不同工作区表的使用
格式:表名.字段名
例: .USE 职工
.USE YISHENG IN 0
.USE CHUFANG IN 0
.?职工号,职工.职工号,YISHENG.职工号,CHUFANG.职工号
E1 E1 1001 1002。

相关文档
最新文档