
《第四章VisualFoxpro数据库及其操作》由会员分享,可在线阅读,更多相关《第四章VisualFoxpro数据库及其操作(115页珍藏版)》请在文档大全上搜索。
1、 介绍数据库、数据表的基本概念 数据库和数据表的建立 编辑表中的数据、记录修改与删除 表的索引等有关操作。 数据库(.dbc)就是一个关于某一特定主题或目标的信息集合。 表(.dbf)基本单位,是数据库的基础可以说表是关系数据库系统中的基本结构。要存数据,为所需记录的信息创建一个表。由行和列组成的,一行为一个记录,一列为一个字段。一行为一个记录(Record)一列为一个字段(Field)通常所说的表格(1)若干记录(2)若干个字段,每记录具有相同结构的字段(3)不同类型的字段来存储不同类型的数据(4)字段的顺序与存储的数据无关(5)记录在的顺序与存储的数据无关。表的两要素:表结构(列)相应记录
2、(行)表结构 表是由记录组成 记录又由字段组成 字段的属性(表结构)字段名字段类型字段宽度小数位数 约定:只能使用字母、汉字、下划线和数字见名知义 = + / | : ? 空格字段名必须以字母或汉字开头,并且长度不能超过128个字符如:下列那些合法不以数字开头不以数字开头 3mn姓名姓名1 mn3不能含有空格;不能含有空格; m n 编编 号号不能含有各种运算符;不能含有各种运算符; S-NS_N AI*X 不同类型的字段来存储不同类型的数据字符型货币型数值型浮点型日期型日期时间型双精度整型逻辑型备注型通用型(1)字符型(Character)通常用于存储键盘输入的文本数据。 汉字、字母、数字、
3、空格、 符号及标点符号字符型数据必用双引号或单引号或来定界字符型字段的宽度最大为254 *如: “how” 1234 中国人zpz:内存变量(2)货币型(Currency)保存货币数值时,用货币类型而不是数值类型字段最多保留4位小数位数,多则四舍五入至4位内存变量用$数值来赋初值 如:x=$999 ? Type(x)zpz:内存变量(3)数值型(Numeric)数值型字段用来存储数值数据。它可以包含数字09,也可以带正、负号或小数点如:1234 100.89(4)浮点型(Float)浮点型字段在功能上等价于数值型字段。zpz:内存变量N(5)日期型(Date)用于存储包含有年、月、日的日期数据
4、长度为8字节(6)日期时间型(DateTime)用于存储包含有年、月、日、时、分、秒的日期和时间数据。(7)双精度型(Double)双精度型用于存储精度要求较高、位数固定的数值,或真正的浮点数值。zpz:内存变量5.6(8)备注型(Memo)长度固定为4字节用于存储不定长度的文本数据当文本数据长度可能大于254,无法使用字符型存储时,使用备注类型字段所有备注型字段的实际内容存储在和表名相同,扩展名为.FPT的备注文件中(9)通用型(General)通用型用于存储OLE对象数据字段宽度固定为4个字节,用于存储一个4个字节的指针,指向该字段的实际内容其内容存储在扩展名为.FPT的文件中。OLE对象
5、包括电子表格、字处理文档、图像或其他多媒体对象等OLE对象可以用链接方式存储在表中。存储数据的大小,取决于相的OLE服务程序,和磁盘空间大小的限制。(10)整型(Integer)整型用于存储整数数据字段宽度固定为4个字节。取值范围从-2 147 483 647 到2 147 483 646。(11)逻辑型(Logical).T.或.Y. 为逻辑真.F.或.N. 为逻辑假长度固定为1字节(12)字符型(二进)(Character(Binary)字符型(二进制)用于存储不需要系统代码页维护的字符数据其他字段特性同字符型字段密码(各国)(13)备注型(二进制)(Memo(Binary)备注型(二进制
6、)用于存储不需要系统代码页维护的备注字段数据。其他字段特性同备注型字段。 数据类型(Type)13种 C-字符型 N-数值形 F-浮点型 D-日期型 I- 整 型 L-逻辑型 M-备注型 G-通用型 Y货币型 规定宽度字符型字段 254货币型字段 8数值型字段 20日期型字段 8备注型 4逻辑型 1日期时间型 8通用型字段 4 用于存储一个4个字节的指针,指向该字段的实际内容。整型字段宽度固定为4个字节。宽度(Width) (结)(以下类型宽度固定) 货币型、日期型、日期时间型、双精度型:8字节 整型、备注型、备注型(二进制)、通用型:4字节 逻辑型:1字节4.小数位数有小数的字段: 数值型
7、浮点型 双精度型字段宽度 = 整数部分宽度 + 小数点1位 +小数位宽度如小数位数不为0,则小数位数至少要比整个字段宽度小2 一个N形变量宽为6,小数位数为3,则这个变量最大可表示的数为多少? _ _ . _ _ _ 99.999空值是用来标识一个字段“没有值”的标志空值表示没有任何值或没有确定值空值不等同于数值0、空字符串或逻辑“假”函数EMPTY() 测试空值如果允许字段接受NULL值,则应选中该栏所在框表的关键字段不允许为NULL值字段类型 中文名称 宽度(字节) 说明 Character 字符型 254 字母、汉字、数字、文本、符号 Currency 货币型 8 货币单位 Numeri
8、c 数值型 20 整数或小数 Float 浮点型 20 同数值型 Date 日期型 8 年、月、日 DateTime 日期时间型8 年、月、日、时、分、秒 Double 双精度型 8 双精度数值 Integer 整型 4 整数 Logical 逻辑型 1 真或假 Memo 备注型 4 不定长的字母、文本、数字 General 通用型 4 OLE图像、多媒体对象 建表的步骤:1)设计表结构2)建表的结构 creat 表名3)保存表文件 ctrl+w4)输入记录 append browse1、表设计器、表设计器(1)打开打开“表设计器表设计器”项目管理器项目管理器/自由表自由表/新建新建/新表新表
9、/保存保存注:注: A、也可从菜单或工具栏中直接新建表、也可从菜单或工具栏中直接新建表 B、与在、与在“项目管理器项目管理器”中新建表不同的是:中新建表不同的是:这样新建的表将不包含在项目中这样新建的表将不包含在项目中(2)在在“表设计器表设计器”中创建表结构中创建表结构 表设计器表设计器/字段字段/输入输入/确定确定2、用create table -SQL命令创建表结构 create table |DBFcreate table |DBF表文件名(字段名表文件名(字段名1 1 字字段类型段类型 (字段宽度(字段宽度 ,小数位数,小数位数 ) ; ,字段名字段名2 2 字段类型字段类型 (字段
10、宽度(字段宽度 ,小数位,小数位数数 )-编程时用编程时用 例:学生表结构 create table xs2(xh c(6),xm c(8),xb c(2),zydh c(6) 教师表结构 create table js(xm c(8),xb c(2),gl n(2,0),csrq d,jbgz n(7,2),jl m)3、使用、使用Null值值 表设计器表设计器/字段字段 create table 中中NULL,NOT NULL子句子句例:create table books(sh c(6) not null,sm c(40) not null,cbrq d null) set null o
11、n 如:一张名为教师档案文件zgda.dbf 编号 姓名 性别 年龄 职称 工作时间 婚否 简历 1 张黎黎 女 26 助教 052483 T memo 2 李 艳 女 30 助教 091490 T memo 3 刘 强 男 38 讲师 122476 T memo 字段名 类型 宽度 小数位数 索引 NULL 编号 字符型 4 无 升序 否 姓名 字符型 6 无 无 否 性别 字符型 2 无 无 否 年龄 数值型 2 无 无 否 职称 字符型 8 无 无 可 工时 日期型 8 无 无 否 婚否 逻辑型 1 无 无 否 简历 备注型 4 无 无 可 照片 通用型 4 无 无 可VFP在使用一个表
12、前必须把表打开在使用一个表前必须把表打开 打开命令打开命令USE VFP在结束使用一个表时,必须把表关闭在结束使用一个表时,必须把表关闭 关闭命令关闭命令USECLOSE ALLCLOSE DATABASE/TABLE修改表结构修改表结构1、表设计器、表设计器 项目管理器项目管理器/选定表选定表/修改修改2、命令、命令USE books MODIFY STRUCTURE2、命令、命令 ALTER TABLE-SQL命令 添加字段:ADD COLUMN 子句例: ALTER TABLE books ADD COLUMN 折扣 n(4,2) 重命名字段:RENAME COLUMN 子句例: ALT
13、ER TABLE books RENAME COLUMN 折扣 TO zk 删除字段:DROP COLUMN 子句例: ALTER TABLE books DROP COLUMN zk3、菜单、菜单/按钮方式按钮方式法1:“表”“属性”“工作区”“工作区属性”“修改” 法2:“窗口” “数据工作期” (“属性” “修改”)记录的追加记录的追加1、立即输入记录(浏览、立即输入记录(浏览/编辑编辑/追加方式)追加方式)2、浏览窗口下追加(、浏览窗口下追加(USE/BROWSE)(表)(表/追加新追加新记录)记录)3、使用、使用INSERT - SQL命令命令追加追加记录记录insert into
14、zgda(姓名姓名,性别性别,年龄年龄) values (洪七洪七公公,男男,900)4、从其他表中追加记录从其他表中追加记录 命令命令APPENDAPPEND FROMAPPEND BLANK 记录的浏览记录的浏览1、浏览窗口、浏览窗口进入 :BROWSE 命令 use books/显示/浏览项目管理器/选定某个表/单击“浏览”按钮 2、命令、命令BROWSELIST / DISPLAYBROWSE FIELDS 书号,书名,作者 for . 重新安排列的位置:重新安排列的位置: 拖动拖动 改变列的宽度:改变列的宽度: 拖动拖动 显示或隐藏表格线:显示或隐藏表格线: 显示显示/ /网格线网格
15、线 分为两个窗格:分为两个窗格: 左下角拖动左下角拖动记录结束标志记录开始标志第n条记录文件头Go topgo bottomskip1、记录指针标志、记录指针标志记录号(输入顺序)记录的开始标志 BOF ( )记录指针标志 ( 当前记录 ) RECNO ( )记录的结束标志 EOF ( )2、记录的定位方式、记录的定位方式绝对定位 go相对定位 skip条件定位记录指针当前记录记录定位记录号RECNO()假设ZGDA表有848条记录,先后执行以下命令 bof() eof() recno()use books f f 1skip -1 t f 1skip -1 Error f 1go bott
16、f f 848skip f t 849skip Error RECN()Use books 1go 5 5skip +2 7skip -3 4locate for 3、记录定位的实现、记录定位的实现界面方式 (“表”“转到记录”) 记录号:绝对定位 goto 定位:条件定位 locate for 作用范围:all,next,record,rest,for 找到/未找到命令方式 绝对定位:GO( GOTO ) GO( GOTO ) TOP/BOTTOM 相对定位:SKIP(与索引有关)skip=skip 1 快速移动:SEEK 及 FIND1、在浏览窗口中修改、在浏览窗口中修改EDIT / CH
17、ANGE / BROWSE项目管理器项目管理器/浏览浏览例:修改例:修改books表中第表中第5条记录条记录 use books edit record 52、批量记录的修改、批量记录的修改(1)界面方式)界面方式 “表”“替换字段”字段条件(2)命令方式)命令方式UPDATE-SQL命令(表不必事先打开,以下同)REPLACE 命令USE bookscopy to tempuse tempREPLACE 单价 WITH 5.00 FOR 单价白法2:“表”“恢复记录”法3:RECALL 范围FOR 条件表达式1WHERE 条件表达式2例:recall recall all recall al
18、l for 库存数量=0(这里的all 可省)说明:缺省范围(当前记录,不是全部记录)对带删除标记记录的访问(1)测试记录的删除标记deleted() 有删除标记返回为真,否为假(2)控制对带删除标记记录的访问 set deleted on/off说明: 有些默认为ON,有些默认为OFF实验: 先删除若干记录(逻辑删除) LIST 默认为OFF SET DELETED ON LIST 为set deleted on时 屏蔽掉有标记的记录,不能访问 影响Count命令 不影响Reccount() 例:8个记录,一个有删除标记 Set deleted on Count to x ? X 7 ? R
19、eccount() 8 界面 “表”“属性”“数据过滤器” 命令 SET FILTER TO SET FILTER TO FOR子句:临时性记录筛选例:USE ZGDA SET FILT TO 出版社=石油大学 注意: 是隐藏而非删除 与FOR子句不同 对SE LECT-SQL、 DELETE-SQL、UPDATE-SQL无效 表表/属性属性/字段筛选字段筛选 SET FIELDS TO , SET fields to 姓名姓名,性别性别工作区:工作区:用以标识一张打开的表的内存区域用以标识一张打开的表的内存区域一个工作区在某一时刻只能打开一张表一个工作区在某一时刻只能打开一张表一张表可以在多
20、个工作区同时打开一张表可以在多个工作区同时打开(use 表表 again)共有共有255个工作区个工作区默认工作区号为默认工作区号为1区区USE books(默认为默认为1号号)LISTUSE books1(books自动关闭自动关闭)LIST 用数字来标识各个工作区(1255) 用相应工作区中表名来标识工作区(此时表没有指定别名,如指定别名,用别名来标识工作区) Sele 5 Use zgda Sele 4 Sele zgda 1-10个工作区常用英文字母A-J Sele 10=sele j 命令:Select 工作区号/工作区中表别名/A-J 如: Sele 1 Use zgda Sele
21、 B Selct zgda Select 0 表示选择未用的号最小工作区sele 1use zgdasele 4use zggzsele 0? select() 返回选择的工作区号The answer is :2可以同时在多个工作区中打开多个没有打开的表可以同时在多个工作区中打开多个没有打开的表SELE 1USE books1LISTSELE 2USE books2LISTSELE 1LIST一张表不可以在多个工作区同时打开一张表不可以在多个工作区同时打开表的别名指定 USE ALIAS 例:USE ZGDA ALIAS OK当前工作区:当前工作区:正在使用的工作区ALIAS ( )及SELE
22、CT ( ) 函数SELE(0):测试当前工作区的区号ALIAS():测试当前工作区中表的别名“数据工作期”窗口别名 操作非当前工作区中的表操作非当前工作区中的表把其它的工作区选为当前工作区Sele 2在命令中强行指定工作区GO TOP IN ok 刚创建的表处于打开状态刚创建的表处于打开状态*1、表的打开、表的打开界面 文件/打开 窗口/数据工作期/打开 USE ?命令 USE USE IN 0多次打开同一张表(同时) USE AGAIN 例:USE books/SELE 0/USE XS AGAIN2、表的关闭、表的关闭界面 窗口/数据工作期/关闭命令 USE USE IN CLOSE A
23、LL&数据库、索引、项目管理器等也被关闭 CLOSE DATABASES &如果当前没有打开的数据库,则把自由表全部关闭 CLOSE TABLES &关闭表,不关闭库 退出VFP注意:SQL语句能自动打开表,但不会自动关闭表!表的共享使用: 一张表可以同时被多个用户打开 (RECORD UNLOCKED)表的独占使用: 一张表只能被一个用户打开(默认) (EXCLUSIVE) 设置独占与共享打开表的默认状态 工具/选项/数据 SET EXCLUSIVE OFF/ON(共享/独占) 强行用独占方式打开表 “打开”“独占”复选框 USE SHARED/EXCLUSIVE 设置改变,并不改变已经打开
24、的表的状态 一张表同时被多次打开时,只以第一次的打开方式为准(窗口/数据工作期) 物理顺序:一般是按照其输入的顺序进行记录的存储顺序 顺序找,速度慢不便于查找需要的信息 逻辑顺序: 记录的处理顺序 (快速)可以使用索引来改变记录的顺序即逻辑顺序根据表中字段的值,建立具有逻辑顺序的索引文件,然后根据索引文件重新排列数据库表中显示的记录。1、索引:、索引: 如同目录 数据库的辅助文件,不能单独使用可以按一个字段索引,也可以多个一个表可以创建多个索引索引存储在索引文件中索引文件中存储着记录号和索引字段的索引值索引值 索引可以理解为根据某一字段的值进行逻辑排序的一组指针 按照索引显示记录,VFP按照指
25、针排列的顺序分别读取每一条记录,而这些记录在数据库中的实际存储位置并未改变。 姓名 年龄 张黎黎 26 李 艳 30 刘 强 38 DA.DBF 姓名 年龄 刘 强 38李 艳 30张黎黎 26DA.DBF物理顺序逻辑顺序记录号 年龄大小 3 1 2 2 1 3 NL.CDX(1)索引关键字索引关键字(Index Key) 建立索引的依据(索引表达式) 字段/字段表达式 VFP使用索引关键字来显示和访问表中的记录(2 2)索引标识()索引标识(TagTag) 索引关键字的名称(索引名) =10字节 4种类型索引(根据关键字段)主索引候选索引普通索引惟一索引2、索引的类型、索引的类型主索引(Pr
26、imary indexs) 在数据库表中,每张表只能创建一个主索引 组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值(学号可以,姓名不可以) 自由表不能建立主索引 主索引存储于数据库表的结构复合索引中侯选索引(Candidate indexs) 在指定的关键字段或表达式中不允许有重复值的索引 一张表中可以建立多个侯选索引 侯选索引可用于数据库表和自由表2、索引的类型、索引的类型普通索引(Regular indexs) 可以决定记录的处理顺序 允许关键字段或表达式的值出现重复 对一张表可以创建多个普通索引(GL)唯一索引(Unique indexs) 允许有重复值 具有重复值的记录
27、仅存储其中的第一个(出版社) 惟一:对每一个特定的关键字只存储一次,而忽略了重复值第二次或以后的记录3、索引文件的种类、索引文件的种类索引本身并不改变表中数据的物理顺序结构复合索引结构复合索引(CDX) 与数据表同名 文件名是在创建时由系统自动给定 结构复合索引文件与表文件同步打开、更新、关闭 是表的一部分非结构复合索引(CDX) 文件名由用户给出 非结构复合索引文件中不能创建主索引独立索引(IDX):与FoxBase兼容 表设计器 “表设计器”“索引”选项卡 Index命令命令INDEX ON TAG FOR ASCENDING|DESCENDINGUNIQUE|CANDIDATE(允许相同
28、|不允许相同) 注意注意 不能对备注字段和通用字段建立索引 不要建立无用的索引?结构复合索引?结构复合索引(CDX)?非结构复合索引(CDX)?独立索引(IDX)INDEX ON TAG FOR ASCENDING|DESCENDINGUNIQUE|CANDIDATE(允许相同|不允许相同) 步骤:项目管理器-表-修改表设计器-索引输入索引名-类型-表达式 不要对每个字段都建立索引,否则会降低程序的运行效率 操作步骤:项目管理器-选择已索引的表,选“修改”表设计器,选索引,输入索引的名称在“表达式”框中,输入对多个索引的表达式如:按性别与年龄进行索引,其表达式应为 性别性别+STR(+STR(
29、年龄,年龄,2)2)确定 可以对多个字段建立索引 其排序是按照表达式的值进行的 索引的修改索引的修改 表设计器表设计器 “表设计器”“索引”选项卡 命令命令 INDEX命令修改原索引 索引的删除 表设计器表设计器 “表设计器”“索引”选项卡 DELETE TAG 删除索引标识 设置主控索引 主控索引:决定显示或访问表中记录的顺序的索引主控索引可以是: 复合索引文件中的一个标识(主控标识) 一个独立索引文件(主控索引文件) 打开表的同时指定主控索引 Use 表名 index 索引文件名 打开后再设置主控索引 窗口 /数据工作期 /属性/索引顺序 命令 SET ORDER TO TAG 取消主控索
30、引 SET ORDER TO 索引函数 CDX() ORDER() TAG() 利用索引快速定位记录SEEK 命令 SEEK 命令只能在索引过的表中使用,并且只能搜索索引关键字(XS/960102) EOF()与FOUND()SEEK函数(=SEEK+FOUND()da:此页不讲 操作步骤:项目管理器-选择已索引的表,选“修改”表设计器,选索引,输入索引的名称在“筛选”处,输入过滤表达式按“确定”,完成筛选表达式的建立如:筛选性别为男的记录,表达式为Set filter to 性别=男 可以实现对记录的控制 4 4 王秋燕 女 45讲师 10/09/70 T memo gen 5 5 姜丽萍
31、女 45讲师 10/09/70 T memo gen 6 6 陈丽丽 女 38讲师 09/27/72 T memo gen 7 7 刘 刚 男 50副教授 06/23/61 T memo gen 8 8 王 良 男 39讲师 08/09/78 T memo gen(1)为了提高速度,用普通索引、候选索引或主索引(2)控制字段的重复值对数据库“表”用“主索引”或“候选索引”,对于“自由表”,用“候选索引”。 数据分类排序数据分类排序数据分类排序数据分类排序数据分类排序数据分类排序分类:分类:将关键字段值相同的记录按顺序存放在一起,生成一个新的表文件。格式:格式:SORT TO ON /A | /
32、D /C , /A | /D /C . ASCENDING|DESCENDING FOR WHILE FIELDS | FIELDS LIKE | FIELDS EXCEPT 功能:功能:对当前选定的表排序,并将排序后的记录输出到新表中。参数描述:参数描述:指定经过排序后所生成的新表的表文件名。 ON :在当前选定的、要排序的表中指定关键字段,字段的内容和数据类型决定了记录在新表中的顺序。 /A | /D /C:指定排序顺序(升序或降序)。/A指定为按升序排序,/D指定按降序排序。如果在字符型字段名后面包含/C,则忽略大小写。可以把/C选项与/A或/D选项组合起来。返返 回回ASCENDING
33、:将所有不带/D的字段指定为升序排列。DESCENDING:将所有不带/A的字段指定为降序排列。如果省略ASCENDING 和DESCENDING参数,则排序默认为升序。:指定需要排序记录的范围。默认范围为ALL。FOR :在当前表中指定排序中只包含逻辑条件为“真”的记录。 WHILE :指定一个条件,在当前表中只要的计算值为“真”,则依据此条件,排序中包含这条记录。FIELDS :指定用SORT命令排序时所创建的新表中要包含的原表中的字段。如果省略FIELDS子句,新表中将包含原表中的所有字段。FIELDS LIKE :在新表中包含那些与字段梗概框架相匹配的原表字段。FIELDS EXCEP
34、T :在新表中包含那些不与字段梗概框架相匹配的原表字段。 分类与索引的区别分类与索引的区别1、分类要生成一个新的表文件,记录的物理顺序发生了改变;2、分类生成的表可以单独使用。3、索引它并不生成新的表文件,仅仅是表中记录的逻辑顺序发生了变化,但索引也要生成一个新的文件,即索引文件。4、索引文件不能单独使用,它必须同表一起配合使用。单索引文件总是按升序的顺序排列。对于一个表文件,允许建立多个索引文件。 USE STUDENTINDEX ON 学号 TO XHSYLIST当执行上述命令后屏幕显示结果按学号排序(2)利用表设计器的索引选项卡建立索引文件)利用表设计器的索引选项卡建立索引文件 索引选项
35、卡移动按钮排序按钮在此框中输入索引标记在此列表框中选择索引类型在此文本框中输入索引表达式在此输入条件表达式表达式生成按钮返返 回回使用索引使用索引使用索引使用索引使用索引使用索引 1、打开索引文件 (1)在打开表时打开索引文件复合索引文件在打开表时将自动被打开。格式:格式:USE INDEX ORDER / /TAG OF ASCENDING/ DESCENDING 功能:功能:打开指定的表,并且打开由指定的所有索引文件。说明:说明:虽然可以同时打开多个索引文件,但同一时间只能有一个单索引文件或是复合索引文件中的一个索引标识作为主控索引,记录的操作和显示由主控索引来控制。如果中排在第一位的是单
36、索引文件,则该单索引就是主控索引,如果排在第一位的是复合索引文件,则还需要用ORDER子句规定主控索引,如果不使用ORDER子句,记录将仍然按记录号的顺序显示。2)在ORDER子句中也可以使用单索引文件名、索引标记或数值表达式来规定主控索引。如:使用ORDER 则规定一个单索引文件作为主控索引。3)使用ORDER TAG OF 规定一个子索引文件作为主控索引,ORDER子句中的索引可以是结构复合索引文件中的索引标记,也可以是已经打开的非结构复合索引文件中的索引标记。4)使用ORDER 规定主控索引,以的值作为索引文件的序号,根据序号来确定主控索引文件。系统给打开的单索引文件和复合索引文件的索引
37、标记编号的方法是:首先按照打开索引文件时的单索引文件名的排列顺序编号,再按照结构复合索引文件中索引标记建立的顺序编号,最后按照非结构复合索引文件中的索引标记建立的顺序编号。(2) 在打开表后打开索引文件在打开表后打开索引文件格式:格式:SET INDEX TO /? ORDER /TAG OF ASCENDING/DESCENDING ADDITIVE 功能:功能:打开指定的索引文件或关闭索引文件。省略所有选项为关闭当前工作区中除结构复合索引文件外的所有索引文件。参数描述:参数描述:指定要打开的一个或多个索引文件。索引文件列表中可以包含多个单索引和复合索引文件。索引文件列表中,第一个索引文件成
38、为主控索引,它控制记录的显示和访问。?:?:显示打开对话框,从这个对话框中,可以选择和打开一个单索引文件。ORDER :指定一个索引文件或标识为主控索引文件,数值表达式指定在索引文件列表中出现的索引文件。首先,按索引文件列表中出现的顺序给单索引文件编号;然后,按照创建标识的先后顺序,对复合索引文件中的标识编号;最后,按照创建文件的顺序对独立的复合索引文件中的标识进行编号。如果数值表达式为0,表中记录以物理顺序显示和访问,而索引文件保持打开状态。 ORDER :指定一个单索引文件为主控索引。ORDER TAG OF :指定复合索引文件中的一个标识作为主控标识。标识名来自结构化复合索引文件或独立的
39、复合索引文件。在打开的独立复合索引文件中,如果存在相同名称的标识,则要使用OF 指定标识所在的复合索引文件。ASCENDING/ DESCENDING:指定显示和访问表记录时,是以升序还是以降序进行。ASCENDING/ DESCENDING子句要跟在ORDER子句的后面。ADDITIVE:指定以前打开的索引文件(除结构化复合索引文件外),在发出SET INDEX命令打开另一个索引文件时,是否仍打开。如果没有该子句,将会关闭所有前面打开的文件。 说明:说明:在有索引文件的表中,记录的显示顺序和访问顺序可以由某个索引文件来决定。使用SET INDEX命令可以打开单索引文件和复合索引文件。如果一个
40、表有结构化复合索引文件,打开表时该文件自动打开。执行不带参数的SET INDEX TO 命令,会关闭当前工作区中所有打开的索引文件(结构化复合索引文件除外)。 2、设置主控索引 如果在打开索引文件时未指定主控索引,打开索引文件之后需要指定主控索引,或者希望改变主控索引,可使用下面的命令。 格式:格式:SET ORDER TO /TAG OF ASCENDING/DESCEN-DING 功能:功能:在打开的索引文件中指定主控索引。参数描述:参数描述: :指定主控索引或标识的编号。数值表达式指定的是在USE或SET INDEX中列出的索引文件或标识的序号。:指定作为主控索引文件的单索引文件名。TA
41、G OF :指定复合索引文件中的一个索引标识为主控索引标识名来自结构复合索引文件或任何打开的独立复合索引文件。如果在各打开的独立复合索引文件中存在相同的标识名,应使用OF 来指定包含此标记的复合索引文件。ASCENDING/DESCENDING:该参数用法同前。说明:说明:如果命令中不使用任选项,只写SET ORDER TO,那么不会指定主索引,记录仍按照记录号的顺序显示,但并未关闭索引文件。VFP允许在SET ORDER命令中使用ASCENDING和DESCENDING暂时转换主控索引的顺序,但它不同于SORT ON 命令中的ASCENDING和DESCENDING。当数值表达式的值为0时,
42、或省略所有可选项,则恢复表文件的自然顺序,但不关闭索引文件。在打开的索引文件中,只有主控索引文件是有效。3、索引文件的重建或更新、索引文件的重建或更新当表中的记录当生变化时,如果未打开索引文件,索引文件(结构复合索引文件除外)不会自动更新,要更新这些索引文件,可用下列命令: 格式:格式:REINDEX 功能:功能:重建当前打开的所有索引文件。说明:说明:使用REINDEX命令之前,必须首先打开需要重建索引的全部索引文件。对使用包含UNIQUE关键字的INDEX命令或SET UNIQUE ON命令创建的索引文件,在重建索引时,仍保持UNIQUE状态。 返返 回回直接查询命令直接查询命令直接查询命
43、令直接查询命令直接查询命令直接查询命令 直接查询也叫顺序查询,是按照记录的物理顺序逐个比较,逐个查询。1、LOCATE命令命令 格式:格式:LOCATE FOR WHILE 功能:功能:按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。参数描述:参数描述:指定要定位的记录范围。只有在范围内的记录才被定位。LOCATE命令的默认范围是ALL。FOR :LOCATE命令按顺序搜索当前表以找到满足逻辑表达式的第一个记录。若逻辑表达式是可优化的表达式,则Rushmore优化由LOCATE FOR 创建的查询。为了获得最佳执行效果,可在FOR子句中使用可优化的表达式。 WHILE :指定一个条件,只
44、要逻辑表达式计算值为真,就继续查找记录。说明:说明:(1)被搜索的表不必有索引。(2)若LOCATE发现一个满足条件的记录,就将记录指针定位在该记录上。可以使用RECNO()返回该记录的记录号,同时FOUND()函数返回“真”,EOF()函数返回“假”。如果没有找到,则将记录指针指向范围的最后一个记录,同时将FOUND()函数值置为“假”,屏幕上显示“已到定位范围末尾”。(3)如果执行SET EXCAT OFF命令后,再用LOCATE命令查找字符型数据时,不要求字符型数据精确匹配。 (4)该命令只能查找第一条满足条件的记录。若表中有多条满足条件的记录,当已经找到一条满足条件的记录后,还想继续查
45、找后面满足条件的记录时,可以使用 CONTINUE 命令继续向后查找满足条件的记录。2、CONTINUE命令命令 格式:格式:CONTINUE 功能:功能:它使LOCATE命令从当前记录开始继续查找下一条满足条件的记录。说明:说明:CONTINUE是用在LOCATE之后继续查找满足同一条件的记录的命令,它继续LOCATE的操作。CONTINUE命令移动记录指针到下一个与逻辑表达式相匹配的记录上。CONTINUE命令能被重复执行直到记录指针到表的结尾或到指定范围的尾部。如果CONTINUE命令成功地查找到了一条记录,RECNO()函数将返回该记录的记录号,并且 FOUND()函数返回逻辑“真”值
46、和EOF()返回逻辑“假”值。如果CONTINUE命令没有查找到满足条件的记录,RECNO()函数返回在table plus one中的记录数, FOUND()函数返回逻辑“假”值,并且EOF()函数返回逻辑“真”值。 返返 回回 快速查询命令快速查询命令快速查询命令快速查询命令快速查询命令快速查询命令 用LOCATE命令查询的优点是不论表中的记录是否有序都能进行查找,而其主要的缺点是查找速度慢。当表中的记录较多,并且要查询的记录又在表的底部时,问题尤为突出。为了解决这一问题,VFP提供了二条快速查询命令:FIND和SEEK。1、FIND命令:命令: 格式:格式:FIND / 功能:功能:它在
47、已经建立索引并且表文件和索引文件均已打开的表中查找索引关键值与指定的字符串或数值型常量相匹配的第一条记录。如果找到,则把记录指针指向该记录,并且将FOUND()函数的值置为“真”;如果没有找到与其相符的记录,则将记录指针指向表的末尾,且将FOUND()函数的值置为“假”,将EOF()函数的值置为“真”。 说明:说明:FIND命令是在索引文件中查询,找到后根据记录号从表文件中读出相应的记录。因为一个表在同一时刻只能有一个索引文件或一个索引标记为主控索引,因此,利用FIND命令来查找记录时,只能查找主控索引字段的值。查询的值可以是字符串,也可以是数值。通常字符串可以不用定界符括起来,但是当字符是以
48、空格开始时,则必须用定界符括起来;如果要查找的字符串是以定界符开头时,就必须用不同的定界符将其括起来。查询的值如果是字符串,它可以是索引关键表达式值的全部或前几个字符,但不能是中间的或是后面的字符。查找字符串时,只要索引表达式(建立索引文件时使用的索引表达式)是字符型的,就可以使用FIND命令查找,并要求组成索引表达式的字段必须是字符型的。执行SET EXACT命令后,再用FIND命令查找字符串时,字符串可以是索引表达式值的全部或是从首字符开始的一个子串。如果执行了SET EXACT ON命令后再用FIND命令来查找字符串,则字符串只能和索引表达式的值精确匹配,即只能是索引表达式的值的全部。建
49、立索引文件时,索引表达式可以是多个字段组成的表达式,若字段之间用“+”连接,用FIND命令查询时,查询内容应当是包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串,究竞是用哪一种,这取决于SET EXACT命令的设置;若字段之间用“-”号连接,用FIND查找时,查询内容应当不包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串。FIND命令只能使记录指针定位于第一条符合条件的记录,而CONTINUE命令又不能和FIND命令一起配合使用,当符合条件的记录不止一条时,可用FIND先查到满足条件的第一条记录,因为记录是根据索引关键表达式排序了的,因此符合条件的记录是在一起的,因此可
50、用SKIP命令配合DISP命令查找,直到发现某条记录不满足条件时为止,此记录以后的记录肯定不符合条件。 SEEK命令:命令: 格式:格式:SEEK ORDER / TAG OF ASCENDING/ DESCENDING 功能:功能:在打开的索引文件中快速查找与相匹配的第1 条记录。参数描述:参数描述:指定SEEK搜索的关键字。可以是空字符串。ORDER /TAG OF ASCENDING/DESCENDING:指定是以哪一个索引或索引标记为主控索引。其使用方法同设置主控索引。说明:说明:当省略所有的可选项时,SEEK命令与FIND命令的功能基本相同,但SEEK命令的功能更强,SEEK命令不仅
51、可以查找字符串和常数,它还可以查找字符型、数值型、日期型或逻辑型表达式的值。用SEEK命令查找字符串常量时,字符串常量必须放在定界符中。SEEK命令中的表达式必须和索引表达式的类型相同。3、顺序查询和快速查询比较、顺序查询和快速查询比较 LOCATE FIND SEEK 查询内容 可以是字符型、数值型、日期型、逻辑型表达式,还可以查找备注型字段 可以是字符型、数值型、日期型表达式或逻辑型字段 字 符 串 常量或常数 对表的要求 无论是否建立了索引文件均可方便地查询 必须建立并打开索引文件,只能在主控索引文件中查询 同左 命令特点 可使用子句限定查询范围, 可与 CONTINUE 命令配合使用,
52、找出表中全部符合条件的记录 在整个表中查询,只能找出满足条件的第一条记录 同左 查询速度 慢 快 快 返返 回回 对话查询对话查询对话查询对话查询对话查询对话查询 格式:格式:GETEXPR TO TYPE ; DEFAULT 功能:功能:通过命令GETEXPR启动表达式生成器对话框,从中可以创建表达式,并把表达式存入内存变量或数组元素中,然后通过LOCATE命令宏代换进行查询,此命令常用于程序中。 参数描述:参数描述:指定在“表达式生成器”中显示的标题,该标题可提示生成何种类型的表达式。TO :指定存储表达式的内存变量或数组元素。如果此内存变量不存在,VFP将创建该变量。该命令不创建数组元素
53、。如果按Esc键或选择【取消】按钮退出“表达式生成器”,将在内存变量或数组元素中存储空字符串。如果已经用DEFAULT子句创建了某个默认的表达式,在按Esc键或选择【取消】按钮退出“表达式生成器”时,将把这个默认表达式存储在内存变量中。TYPE ;:指定表达式类型:C-字符型、N-数值型、D-日期型、L-逻辑型、T-日期时间型、F-浮点型、I-整型、B-双精度型、Y-Currency(货币型)。:定义错误提示信息文本,如果是非法的,可以用指定要显示的错误信息,和必须用分号分隔。、分号、的结合体必须用一对单引号或双引号定界起来。DEFAULT :指定在“表达式生成器”中显示初始的默认表达式。GE
54、TEXPR命令可以按受这个默认的表达式,该默认表达式也可用指定的表达式改写。如果调用GETEXPR命令而没有输入表达式,则该默认的表达式将作为输入的表达式存储到内存变量中。 例:通过GETEXPR获取LOCATE命令中查询条件,以实现任意条件的查询。 GETEXPR 输入查询条件输入查询条件 TO CXTJ TYPE L;输入条件错;输入条件错误误 DEFAULT 性别性别=男男 启动表达式生成器指定表达式框中的表达式为逻辑型,且当表达式不为逻辑型时提示“输入条件错误”。指定保存表达式的内存变量返返 回回求记录个数的命令求记录个数的命令求记录个数的命令求记录个数的命令求记录个数的命令求记录个数
55、的命令 格式:格式:COUNT FOR WHILE TO 功能:功能:统计当前表中指定范围内满足条件的记录个数,并存于中。参数描述:参数描述:、子句的用法和前面所有命令的用法是一样的。若使用、子句,可统计出指定内满足的记录个数,否则统计表中的记录的总数。对COUNT命令,默认的范围是ALL。若使用任选项TO 可选项,可将统计的结果送到内存变量中保存,否则将统计结果显示在屏幕上(SET TALK ON)。 例:例:USE STUDENT SET EXACT OFF COUNT FOR 姓名=李.OR.姓名=王 TO RS返返 回回求和命令求和命令求和命令求和命令求和命令求和命令 格式:格式:SU
56、M FOR WHILE TO /TO ARRAY 功能:功能:对当前表中指定范围内满足条件的数值型字段或是由字段组成的数值型表达式累加求和,并把结果存放在对应的标识的变量中。若使用任选项,则只对中的各表达式累加求和,否则将对当前表中的所有数值型字段累加求和,数值型字段之间或表达式之间用逗号分隔开。若使用 TO ,可将求出的各表达式的值依次赋给各内存变量,但要注意:表达式表中的表达式的个数应该与内存变量表中的变量个数相等,若省略,内存变量的个数应该与数值型字段的个数相等。也可将求出的各表达式的值存放于指定的数组中,一个数组元素等同于一个内存变量。 返返 回回求平均值命令求平均值命令求平均值命令求
57、平均值命令求平均值命令求平均值命令 格式:格式:AVERAGE FOR WHILE TO | TO ARRAY 功能:功能:对当前表中指定范围内满足条件的记录的数值型字段求算术平均值,并把结果存入中或存入指定的数组中。 说明:说明:AVERAGE和SUM命令的不同之处仅仅在于前者是求数值型字段或数值型表达式的平均值,而后者是求和。 若省略,约定为ALL,若省略,约定为当前表中的所有的数值型和浮点型字段。若省略和,则不保留结果,若系统设置为SET TALK ON则只显示,否则不显示。返返 回回表的关联表的关联表的关联表的关联表的关联表的关联 如果在多个工作区同时打开多个表文件,在当前工作区中移动
58、表的记录指针时,其它表的记录指针是不会随之移动 。如果要想其它表的记录指针也随之移动,则要建立表间的关联。 关联就在二个或二个以上的表之间建立某种联接,使其表的记录指针同步移动。用来建立关联的表称为父表,被关联的表称为子表。 1、建立关联、建立关联 格式:格式:SET RELATION TO INTO / , INTO / IN /ADDITIVE 功能:功能:在两个表之间建立关联。参数描述:参数描述:指定用来在子表和父表之间建立关联的关联表达式。关联表达式经常是子表主控索引的索引表达式。可以是下列三种参数之一:1、是记录号函数RECNO()。此时,两个或多个关联表之间的联系是根据记录号来进行
59、关联的,关联表与被关联表之间当前记录号保持相等。如果关联表记录的记录号大于被关联表的记录总数,则被关联表的当前记录指针指向最后一条记录的下一条记录,EOF()函数值为.T.。 SELECT 2USE SCORE ALIAS CJSELECT 1USE STUDENTSET RELATION TO RECNO() INTO CJ 2、是数值型表达式。此时,在表达式中通常含有RECNO()函数,每当关联表的记录指针重新定位时,被关联表的记录指针将重新定位于的值所对应的记录之上。如果的值大于被关联表文件的记录总数,则被关联表文件的当前记录指针指向最后一条记录的下一条记录,EOF()函数值为.T.。
60、SELECT 2USE SCORE ALIAS CJSELECT 1USE STUDENTSET RELATION TO 3*RECNO()-2 INTO CJ 3、选择二个表的公共字段建立关联,使用这种方法时,要求被关联的表文件必须是按指定的公共关联字段建立并打开了索引文件。 SELECT 2USE SCORE ALIAS CJINDEX ON 学号 TO XHSYSELECT 1USE STUDENT SET RELATION TO 学号 INTO CJ INTO /:指定被关联表的工作区或别名,也可以是被关联表的别名。ADDITIVE:建立关联时,如果命令中不使用ADDITIVE子句,则
61、父表以前建立的关联将自动解除;若使用了ADDITIVE子句,则父表以前建立的关联仍然保留。 说明:说明:在建立关联之前,必须打开一个表(父表),而且还必须在另一个工作区内打开其它表(子表)。相关的各表通常有一个相同的字段。父表可以同时与多个子表建立关系,称为“一父多子”的关系。可以是字符型、数值型、日期型表达式。如果建立父子关联之前,子表已经按照关联条件建立了索引,并将该索引文件指定为主控索引,那么,每当当前工作区父表的记录指针重新定位时,就检索子表,将子表的记录指针定位于值与值相同的第一条记录之上。 除了可以在一个工作区中与多个表建立关联以外,还允许在多个工作区中建立多个表之间的关联,但关联
62、不能构成循环。 这样建立的关联,只能显示一对一的关系,当要父表中的一条记录同时对应子表中的多条记录时,还要先用到SET SKIP TO 命令 格式:格式:SET SKIP TO / ,/ 功能:功能:在父表的每条记录与子表中所有对应记录之间建立“一对多”的关联。 说明:说明:如果已经建立了一父多子的关联,并且父表与每个子表都要建立“一对多”的关联,那么只要在SET SKIP TO命令中分别写出子表所在的或者即可。 2、解除关联、解除关联 用SET RELATION命令建立关联之后,当移动关联表的记录指针时,被关联表的记录指针也相应要移动,并且将要引起读/写磁盘操作,这样会降低系统的性能,因此,
63、当某些关联不再使用,或暂时不再使用时,应及时解除关联,以提高系统的运行速度。 格式格式1:SET RELATION TO 功能:功能:删除当前工作区表与其它工作区表建立的关联。 格式格式2:SET RELSTION OFF INTO / 功能:功能:删除当前工作区与由/指定的工作区中表建立的关联。该命令必须在父表所在的工作区执行。例如:要关闭当前工作区与C工作区建立的关联。可以作下述命令进行:SET RELATION OFF INTO C 当用USE关闭某些表时,系统将自动删除掉与它建立的关联。如果关闭的是父表文件,则它与子表的关联将全被删除。 当关闭父表时,将自动关闭与父表建立的所有关联。 返返 回回表的连接表的连接表的连接表的连接表的连接表的连接 表的连接是正好与COPY命令相反的过程 格式:格式:JOIN WITH / TO FOR FIELDS 功能:功能:连接当前工作区中打开的表和/指定的表,生成规定的新的表文件。参数描述:参数描述:/:指定第二个表的别名或所在的工作号。 FOR :指定一个筛选条件。若的值为真,则向新表中写入一个新记录。 FIELDS :指定新表中包含的字段的列表。两个表中指定的字段都可以包含在中。说明:说明: JOIN命令也可以连接两个以上的表,这时可先连接其中的两个,生成一个新的表文件后再利用JOIN命令连接另外的表。 返返 回回