第四章 visual foxpro 数据库及其操作

106
第第第 第第第 Visual Foxpro Visual Foxpro 第第第第第第 第第第第第第

Upload: ella

Post on 23-Jan-2016

174 views

Category:

Documents


1 download

DESCRIPTION

第四章 Visual Foxpro 数据库及其操作. 内容. 介绍数据库、数据表的基本概念 数据库和数据表的建立 编辑表中的数据、记录修改与删除 表的索引等有关操作。. 概念. 数据库 (.dbc) 就是一个关于某一特定主题或目标的信息集合。 表 (.dbf) 基本单位,是数据库的基础 可以说表是关系数据库系统中的基本结构。 要存数据,为所需记录的信息创建一个表。 由行和列组成的,一行为一个记录,一列为一个字段。. 通常所说的表格. 一行为一个记录( Record ). 一列为一个字段 (Field). 二维表简称表 (Table) 特征:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章 Visual Foxpro 数据库及其操作

第四章第四章

Visual FoxproVisual Foxpro 数据库及其数据库及其操作操作

Page 2: 第四章 Visual Foxpro 数据库及其操作

内容内容• 介绍数据库、数据表的基本概念• 数据库和数据表的建立• 编辑表中的数据、记录修改与删除• 表的索引等有关操作。

Page 3: 第四章 Visual Foxpro 数据库及其操作

概念概念• 数据库 (.dbc)

– 就是一个关于某一特定主题或目标的信息集合。• 表 (.dbf)

– 基本单位,是数据库的基础– 可以说表是关系数据库系统中的基本结构。– 要存数据,为所需记录的信息创建一个表。– 由行和列组成的,一行为一个记录,一列为一个字段。

Page 4: 第四章 Visual Foxpro 数据库及其操作

一行为一个记录( Record )

一列为一个字段 (Field)

通常所说的表格

Page 5: 第四章 Visual Foxpro 数据库及其操作

二维表简称表二维表简称表 (Table)(Table) 特征:特征:

(1) 若干记录(2) 若干个字段,每记录具有相同结构的字段(3) 不同类型的字段来存储不同类型的数据(4) 字段的顺序与存储的数据无关(5) 记录在的顺序与存储的数据无关。

Page 6: 第四章 Visual Foxpro 数据库及其操作

表的两要素:•表结构(列)•相应记录(行)

Page 7: 第四章 Visual Foxpro 数据库及其操作

表结构

Page 8: 第四章 Visual Foxpro 数据库及其操作

表的字段表的字段• 表是由记录组成• 记录又由字段组成

• 字段的属性(表结构)– 字段名– 字段类型– 字段宽度– 小数位数

Page 9: 第四章 Visual Foxpro 数据库及其操作

1.1. 字段名字段名• 约定:

– 只能使用字母、汉字、下划线和数字– 见名知义– > < = + / \ | [ ] : ? 空格– 字段名必须以字母或汉字开头,并且长度不能超过

128 个字符– 如:下列那些合法

不以数字开头 × 3mn 姓名 1mn3不能含有空格; × m n × 编 号

不能含有各种运算符; × S-N S_N × AI*X

Page 10: 第四章 Visual Foxpro 数据库及其操作

2.2. 字段类型字段类型• 不同类型的字段来存储不同类型的数据

字符型 货币型 数值型

浮点型 日期型 日期时间型

双精度 整型 逻辑型

备注型 通用型

Page 11: 第四章 Visual Foxpro 数据库及其操作

(1) 字符型 (Character)– 通常用于存储键盘输入的文本数据。

• 汉字、字母、数字、空格、• 符号及标点符号

– 字符型数据必用双引号或单引号或 [] 来定界– 字符型字段的宽度最大为 254 *****– 如:– “how” ‘1234’ [ 中国人 ]

zpz:

内存变量

zpz:

内存变量

Page 12: 第四章 Visual Foxpro 数据库及其操作

(2) 货币型 (Currency)– 保存货币数值时,用货币类型而不是数值类

型字段

– 最多保留 4 位小数位数,多则四舍五入至 4位

– 内存变量用 $ 数值来赋初值• 如 :x=$999• ? Type(‘x’)

zpz:

内存变量

zpz:

内存变量

Page 13: 第四章 Visual Foxpro 数据库及其操作

(3) 数值型 (Numeric)– 数值型字段用来存储数值数据。– 它可以包含数字 0 ~ 9 ,也可以带正、负号

或小数点– 如: 1234 100.89

(4) 浮点型 (Float)– 浮点型字段在功能上等价于数值型字段。

zpz:

内存变量 N

zpz:

内存变量 N

Page 14: 第四章 Visual Foxpro 数据库及其操作

(5) 日期型 (Date)– 用于存储包含有年、月、日的日期数据– 长度为 8 字节

(6) 日期时间型 (DateTime)– 用于存储包含有年、月、日、时、分、秒的日期和

时间数据。

(7) 双精度型 (Double)– 双精度型用于存储精度要求较高、位数固定的数值,

或真正的浮点数值。

zpz:

内存变量 5.6

zpz:

内存变量 5.6

Page 15: 第四章 Visual Foxpro 数据库及其操作

(8) 备注型 (Memo)– 长度固定为 4 字节

– 用于存储不定长度的文本数据– 当文本数据长度可能大于 254 ,无法使用字

符型存储时,使用备注类型字段– 所有备注型字段的实际内容存储在和表名相

同,扩展名为 .FPT 的备注文件中

Page 16: 第四章 Visual Foxpro 数据库及其操作

(9) 通用型 (General)– 通用型用于存储 OLE 对象数据– 字段宽度固定为 4 个字节,用于存储一个 4 个字节

的指针,指向该字段的实际内容– 其内容存储在扩展名为 .FPT 的文件中。– OLE 对象包括电子表格、字处理文档、图像或其他

多媒体对象等– OLE 对象可以用链接方式存储在表中。– 存储数据的大小,取决于相的 OLE 服务程序,和磁

盘空间大小的限制。

Page 17: 第四章 Visual Foxpro 数据库及其操作

(10) 整型 (Integer)– 整型用于存储整数数据– 字段宽度固定为 4 个字节。– 取值范围从 -2 147 483 647 到 2 147 483 64

6 。

(11) 逻辑型 (Logical)– .T. 或 .Y. 为逻辑真– .F. 或 .N. 为逻辑假– 长度固定为 1 字节

Page 18: 第四章 Visual Foxpro 数据库及其操作

(12) 字符型 (二进 )((Character(Binary))– 字符型 (二进制 ) 用于存储不需要系统代码页维护的字

符数据– 其他字段特性同字符型字段– 密码(各国)

(13) 备注型 (二进制 )((Memo(Binary))– 备注型 (二进制 ) 用于存储不需要系统代码页维护的备

注字段数据。其他字段特性同备注型字段。

Page 19: 第四章 Visual Foxpro 数据库及其操作

数据类型数据类型 (( 结结 ))

• 数据类型 (Type)13种 C-字符型 N-数值形 F-浮点型 D-日期型 I- 整 型 L-逻辑型 M-备注型 G-通用型 Y货币型

Page 20: 第四章 Visual Foxpro 数据库及其操作

3.3. 字段宽度字段宽度• 规定宽度

– 字符型字段 254– 货币型字段 8– 数值型字段 20– 日期型字段 8– 备注型 4– 逻辑型 1– 日期时间型 8– 通用型字段 4

• 用于存储一个 4 个字节的指针,指向该字段的实际内容。整型字段宽度固定为 4 个字节。

Page 21: 第四章 Visual Foxpro 数据库及其操作

•宽度 (Width) ( 结 )( 以下类型宽度固定)

• 货币型、日期型、日期时间型、双精度型: 8 字节

• 整型、备注型、备注型(二进制)、通用型: 4 字节

• 逻辑型: 1 字节

Page 22: 第四章 Visual Foxpro 数据库及其操作

4. 小数位数– 有小数的字段:

• 数值型• 浮点型• 双精度型

– 字段宽度 = 整数部分宽度 + 小数点 1 位 +小数位宽度

– 如小数位数不为 0 ,则小数位数至少要比整个字段宽度小 2

Page 23: 第四章 Visual Foxpro 数据库及其操作

小数位数小数位数• 一个 N形变量宽为 6 ,小数位数为 3 ,则这个变量最大可表示的数为多少?

• _ _ . _ _ _• 99.999

Page 24: 第四章 Visual Foxpro 数据库及其操作

5.5. 空值空值 (NULL)(NULL)– 空值是用来标识一个字段“没有值”的标志– 空值表示没有任何值或没有确定值– 空值不等同于数值 0 、空字符串或逻辑“假”– 函数 EMPTY() 测试空值

– 如果允许字段接受 NULL值,则应选中该栏所在框

– 表的关键字段不允许为 NULL值

Page 25: 第四章 Visual Foxpro 数据库及其操作

字段类型 中文名称 宽度 ( 字节 ) 说明 – Character 字符型 254 字母、汉字、数字、文本、符号 – Currency 货币型 8 货币单位 – Numeric 数值型 20 整数或小数 – Float 浮点型 20 同数值型 – Date 日期型 8 年、月、日 – DateTime 日期时间型 8 年、月、日、时、分、秒 – Double 双精度型 8 双精度数值 – Integer 整型 4 整数 – Logical 逻辑型 1 真或假 – Memo 备注型 4 不定长的字母、文本、数字

– General 通用型 4 OLE图像、多媒体对象

Page 26: 第四章 Visual Foxpro 数据库及其操作

•建表的步骤:1 )设计表结构

2)建表的结构 creat 表名

3)保存表文件 ctrl+w

4 )输入记录 append browse

Page 27: 第四章 Visual Foxpro 数据库及其操作

表结构的创建表结构的创建1 、表设计器(1) 打开“表设计器”

项目管理器 / 自由表 / 新建 / 新表 / 保存注: A 、也可从菜单或工具栏中直接新建表 B 、与在“项目管理器”中新建表不同的是:

这样新建的表将不包含在项目中(2)在“表设计器”中创建表结构

表设计器 / 字段 / 输入 / 确定

Page 28: 第四章 Visual Foxpro 数据库及其操作

表结构的创建表结构的创建2 、用 create table -SQL 命令创建表结构

– create table |DBF 表文件名(字段名 1 字段类型 [(字段宽度 [,小数位数 ]) ];[,字段名 2 字段类型 [(字段宽度 [,小数位数 ]) ]]…) ---- 编程时用

• 例:学生表结构– 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)

Page 29: 第四章 Visual Foxpro 数据库及其操作

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 on

Page 30: 第四章 Visual Foxpro 数据库及其操作

数据表的建立数据表的建立

• 如:– 一张名为教师档案文件 zgda.dbf

• 编号 姓名 性别 年龄 职称 工作时间 婚否 简历 1 张黎黎 女 26 助教 05/ 24/ 83 T memo 2 李 艳 女 30 助教 09/ 14/ 90 T memo 3 刘 强 男 38 讲师 12/ 24/ 76 T memo

Page 31: 第四章 Visual Foxpro 数据库及其操作

职工档案表结构(职工档案表结构( zgda.dbfzgda.dbf ))• 字段名 类型 宽度 小数位数 索引 NULL• 编号 字符型 4 无 升序 否• 姓名 字符型 6 无 无 否• 性别 字符型 2 无 无 否• 年龄 数值型 2 无 无 否• 职称 字符型 8 无 无 可• 工时 日期型 8 无 无 否• 婚否 逻辑型 1 无 无 否• 简历 备注型 4 无 无 可• 照片 通用型 4 无 无 可

Page 32: 第四章 Visual Foxpro 数据库及其操作

表的打开表的打开VFP 在使用一个表前必须把表打开• 打开命令

– USE < 文件名 >VFP 在结束使用一个表时,必须把表关闭• 关闭命令

– USE– CLOSE ALL– CLOSE DATABASE/TABLE

Page 33: 第四章 Visual Foxpro 数据库及其操作

修改表结构1 、表设计器

项目管理器 / 选定表 / 修改

2 、命令– USE books – MODIFY STRUCTURE

Page 34: 第四章 Visual Foxpro 数据库及其操作

修改表结构修改表结构2 、命令

– ALTER TABLE-SQL 命令•添加字段: ADD [ COLUMN ] 子句例: ALTER TABLE books ADD COLUMN 折扣 n ( 4,2 )

•重命名字段: RENAME COLUMN 子句例: ALTER TABLE books RENAME COLUMN 折扣 TO zk

• 删除字段: DROP [ COLUMN ] 子句例: ALTER TABLE books DROP COLUMN zk

Page 35: 第四章 Visual Foxpro 数据库及其操作

3 、菜单 / 按钮方式法 1 :

•“ 表”—“属性”•“工作区”•“工作区属性”—“修改”

法 2 :•“窗口” —“数据工作期” •(“ 属性”— “修改” )

Page 36: 第四章 Visual Foxpro 数据库及其操作

记录的处理记录的处理记录的追加

1 、立即输入记录(浏览 / 编辑 / 追加方式)2 、浏览窗口下追加( USE/BROWSE )(表 / 追加新记录)3 、使用 INSERT - SQL命令追加记录insert into zgda( 姓名 , 性别 , 年龄 ) values (' 洪七公 ',' 男 ',900)

4 、从其他表中追加记录•命令 APPEND

– APPEND FROM– APPEND [ BLANK ]

Page 37: 第四章 Visual Foxpro 数据库及其操作

记录的浏览1 、浏览窗口

– 进入 :•BROWSE 命令 •use books/显示 /浏览•项目管理器 /选定某个表 / 单击“浏览”按钮

2 、命令– BROWSE– LIST / DISPLAY– BROWSE FIELDS 书号 , 书名 ,作者 for ...

Page 38: 第四章 Visual Foxpro 数据库及其操作

如何定制浏览窗口?如何定制浏览窗口?

• 重新安排列的位置:– 拖动

• 改变列的宽度:– 拖动

• 显示或隐藏表格线:– 显示 /网格线

• 分为两个窗格:– 左下角拖动

Page 39: 第四章 Visual Foxpro 数据库及其操作

6.3.3 6.3.3 记录的定位记录的定位

记录结束标志

记录开始标志

第 n条记录

文件头

Go top

go bottom

skip

1 、记录指针标志记录号(输入顺序)记录的开始标志 BOF ( )记录指针标志 ( 当前记录 ) RECNO ( )记录的结束标志 EOF ( )

2 、记录的定位方式绝对定位 go相对定位 skip条件定位

Page 40: 第四章 Visual Foxpro 数据库及其操作

几个概念几个概念

•记录指针•当前记录•记录定位•记录号 RECNO ()

Page 41: 第四章 Visual Foxpro 数据库及其操作

例例 11假设ZGDA表有 848条记录,先后执行以下命令 bof() eof() recno()use books f f 1skip -1 t f 1skip -1 Error f 1go bott f f 848skip f t 849skip Error

Page 42: 第四章 Visual Foxpro 数据库及其操作

例例 22

RECN()Use books 1go 5 5skip +2 7skip -3 4locate for …

Page 43: 第四章 Visual Foxpro 数据库及其操作

3 、记录定位的实现– 界面方式 (“ 表”—“转到记录” )

• 记录号:绝对定位 goto• 定位:条件定位 locate for• 作用范围: all,next,record,rest,for•找到 /未找到

– 命令方式 绝对定位: GO( GOTO ) GO( GOTO ) TOP/BOTTOM 相对定位: SKIP(与索引有关) skip=skip 1 快速移动: SEEK 及 FIND

Page 44: 第四章 Visual Foxpro 数据库及其操作

记录的修改记录的修改

1 、在浏览窗口中修改EDIT / CHANGE / BROWSE项目管理器 / 浏览例:修改 books 表中第 5 条记录 use books edit record 5

Page 45: 第四章 Visual Foxpro 数据库及其操作

记录的修改记录的修改2 、批量记录的修改

( 1 )界面方式 “表”—“替换字段”—字段条件( 2 )命令方式– UPDATE-SQL 命令 ( 表不必事先打开 ,以下同)– REPLACE 命令USE bookscopy to tempuse tempREPLACE 单价 WITH 5.00 FOR 单价 <5

Page 46: 第四章 Visual Foxpro 数据库及其操作

记录的删除记录的删除

•目的:– 节省时空

•删除步骤:– 逻辑删除– 物理删除

Page 47: 第四章 Visual Foxpro 数据库及其操作

逻辑删除逻辑删除– 给要删除的记录加标记( * 号)

• 标记要删除的记录(逻辑删除)– 浏览窗口:

• 单击小方框– “ 表”

• “ 删除记录”– 命令 DELETE FROM 表名 [WHERE 过滤条件表达式 ]例:– 删除教材表中库存在数量为 0 的记录

• delete from books where 库存数量 =0

Page 48: 第四章 Visual Foxpro 数据库及其操作

物理删除物理删除•彻底删除(物理删除)

– “ 表”• “彻底删除”

– 命令PACK(独占)• 删除有删除标记的记录

– 命令ZAP=delete all +pack(独占)

Page 49: 第四章 Visual Foxpro 数据库及其操作

恢复恢复记录的删除记录的删除– 恢复带删除标记的记录 ( 与 set dele 无关 )

法 1 :– 小方框 黑 -->白

法 2 :“表”– “恢复记录”

法 3 : RECALL [范围 ][FOR 条件表达式 1][WHERE 条件表达式 2]例: recall recall all recall all for 库存数量 =0 (这里的 all 可省)说明:缺省范围(当前记录,不是全部记录)

Page 50: 第四章 Visual Foxpro 数据库及其操作

记录的删除记录的删除– 对带删除标记记录的访问

(1)测试记录的删除标记 deleted()– 有删除标记返回为真,否为假

(2)控制对带删除标记记录的访问• set deleted on/off说明:• 有些默认为 ON ,有些默认为 OFF实验:•先删除若干记录(逻辑删除)•LIST 默认为 OFF•SET DELETED ON•LIST

Page 51: 第四章 Visual Foxpro 数据库及其操作

set deleted on/offset deleted on/off• 为 set deleted on 时

– 屏蔽掉有标记的记录,不能访问– 影响 Count命令– 不影响 Reccount()

• 例: 8 个记录,一个有删除标记– Set deleted on– Count to x– ? X 7– ? Reccount() 8

Page 52: 第四章 Visual Foxpro 数据库及其操作

筛选记录筛选记录• 界面

“ 表”—“属性”—“数据过滤器”• 命令

– SET FILTER TO <条件表达式 >– SET FILTER TO– FOR子句:临时性记录筛选

例: USE ZGDA• SET FILT TO 出版社 =‘石油大学’• 注意:

– 是隐藏而非删除– 与 FOR子句不同

• 对 SE LECT-SQL、 DELETE-SQL、 UPDATE-SQL无效

Page 53: 第四章 Visual Foxpro 数据库及其操作

筛选字段筛选字段• 表 / 属性 / 字段筛选• SET FIELDS TO < 字段 1> [ , < 字段 2

>]– SET fields to 姓名 , 性别

Page 54: 第四章 Visual Foxpro 数据库及其操作

关于表的打开和关闭关于表的打开和关闭• 刚创建的表处于打开状态 *1 、表的打开

– 界面• 文件 /打开•窗口 / 数据工作期 /打开•USE ?

– 命令 •USE < 表文件名 >•USE < 表文件名 > IN 0

– 多次打开同一张表(同时)•USE < 表文件名 > AGAIN•例: USE books/SELE 0/USE XS AGAIN

Page 55: 第四章 Visual Foxpro 数据库及其操作

2 、表的关闭– 界面

•窗口 / 数据工作期 / 关闭– 命令

•USE•USE IN <别名 /工作区 >• CLOSE ALL&&数据库、索引、项目管理器等也被关闭

• CLOSE DATABASES &&如果当前没有打开的数据库,则把自由表全部关闭

• CLOSE TABLES &&关闭表,不关闭库•退出 VFP

注意: SQL语句能自动打开表,但不会自动关闭表!

Page 56: 第四章 Visual Foxpro 数据库及其操作

表的独占与共享使用表的独占与共享使用

• 设置独占与共享打开表的默认状态– 工具 /选项 / 数据– SET EXCLUSIVE OFF/ON (共享 /独占)

• 强行用独占方式打开表– “打开”—“独占”复选框– USE < 工作表 > SHARED/EXCLUSIVE

• 设置改变,并不改变已经打开的表的状态• 一张表同时被多次打开时,只以第一次的打开方式为准(窗口 / 数据工作期)

Page 57: 第四章 Visual Foxpro 数据库及其操作

概念概念• 物理顺序:

– 一般是按照其输入的顺序进行记录的存储顺序– 顺序找,速度慢– 不便于查找需要的信息

• 逻辑顺序:– 记录的处理顺序– (快速)– 可以使用索引来改变记录的顺序即逻辑顺序– 根据表中字段的值,建立具有逻辑顺序的索引文件,然后根据索引文件重新排列数据库表中显示的记录。

Page 58: 第四章 Visual Foxpro 数据库及其操作

索引文件索引文件1 、索引:

•如同目录•数据库的辅助文件,不能单独使用

– 可以按一个字段索引,也可以多个

– 一个表可以创建多个索引

– 索引存储在索引文件中

– 索引文件中存储着记录号和索引字段的索引值

Page 59: 第四章 Visual Foxpro 数据库及其操作

理解索引理解索引

• 索引可以理解为根据某一字段的值进行逻辑排序的一组指针

• 按照索引显示记录, VFP 按照指针排列的顺序分别读取每一条记录,而这些记录在数据库中的实际存储位置并未改变。

Page 60: 第四章 Visual Foxpro 数据库及其操作

按年龄索引后的表文件按年龄索引后的表文件

姓名 年龄 张黎黎 26 李 艳 30 刘 强 38 DA.DBF

姓名 年龄 刘 强 38李 艳 30张黎黎 26

DA.DBF

物理顺序 逻辑顺序

记录号 年龄大小 3 1 2 2 1 3 NL.CDX

Page 61: 第四章 Visual Foxpro 数据库及其操作

关键字与关键字与索引标识索引标识

( 1 )索引关键字 (Index Key )•建立索引的依据 ( 索引表达式 )•字段 / 字段表达式• VFP使用索引关键字来显示和访问表中的记录

( 2 )索引标识( Tag )•索引关键字的名称 ( 索引名 )• <=10 字节

Page 62: 第四章 Visual Foxpro 数据库及其操作

索引的类型索引的类型• 4种类型索引(根据关键字段)

– 主索引– 候选索引– 普通索引– 惟一索引

Page 63: 第四章 Visual Foxpro 数据库及其操作

表的索引表的索引2 、索引的类型– 主索引 (Primary indexs)

• 在数据库表中 ,每张表只能创建一个主索引• 组成主索引关键字的字段或表达式 ,在表的所有记录中不能有重复的

值 (学号可以 , 姓名不可以 )• 自由表不能建立主索引• 主索引存储于数据库表的结构复合索引中

– 侯选索引 (Candidate indexs)• 在指定的关键字段或表达式中不允许有重复值的索引• 一张表中可以建立多个侯选索引• 侯选索引可用于数据库表和自由表

Page 64: 第四章 Visual Foxpro 数据库及其操作

表的索引表的索引2 、索引的类型

– 普通索引 (Regular indexs)• 可以决定记录的处理顺序•允许关键字段或表达式的值出现重复•对一张表可以创建多个普通索引 (GL)

– 唯一索引 (Unique indexs)•允许有重复值• 具有重复值的记录仅存储其中的第一个 (出版社 )

• 惟一:对每一个特定的关键字只存储一次,而忽略了重复值第二次或以后的记录

Page 65: 第四章 Visual Foxpro 数据库及其操作

表的索引表的索引3 、索引文件的种类索引本身并不改变表中数据的物理顺序– 结构复合索引( CDX)

• 与数据表同名• 文件名是在创建时由系统自动给定• 结构复合索引文件与表文件同步打开、更新、关闭• 是表的一部分

– 非结构复合索引( CDX)• 文件名由用户给出• 非结构复合索引文件中不能创建主索引

– 独立索引( IDX):与 FoxBase 兼容

Page 66: 第四章 Visual Foxpro 数据库及其操作

创建索引文件创建索引文件• 表设计器

– “ 表设计器”——“索引”选项卡• Index 命令

INDEX ON < 索引表达式 > TAG < 索引标识名 > [FOR <条件表达式 >ASCENDING|DESCENDING][UNIQUE|CANDIDATE](允许相同 | 不允许相同 )

• 注意– 不能对备注字段和通用字段建立索引– 不要建立无用的索引

Page 67: 第四章 Visual Foxpro 数据库及其操作

析析 IndexIndex 命令命令?结构复合索引( CDX)?非结构复合索引( CDX)?独立索引( IDX)

INDEX ON < 索引表达式 > TAG < 索引标识名 >

[FOR <条件表达式 >ASCENDING|DESCENDING]

[UNIQUE|CANDIDATE](允许相同 | 不允许相同 )

Page 68: 第四章 Visual Foxpro 数据库及其操作

索引的建立索引的建立•步骤:

– 项目管理器 ---表 ---修改– 表设计器 ---索引– 输入索引名 ----类型 ---表达式

• 不要对每个字段都建立索引,否则会降低程序的运行效率

Page 69: 第四章 Visual Foxpro 数据库及其操作

对多个字段索引对多个字段索引• 操作步骤:

– 项目管理器 -- 选择已索引的表,选“修改”– 表设计器,选索引,输入索引的名称– 在“表达式”框中 ,输入对多个索引的表达式– 如:按性别与年龄进行索引 ,其表达式应为 性

别 +STR( 年龄, 2)– 确定

• 可以对多个字段建立索引• 其排序是按照表达式的值进行的

Page 70: 第四章 Visual Foxpro 数据库及其操作

索引的修改和删除索引的修改和删除• 索引的修改

– 表设计器• “ 表设计器”——“索引”选项卡

– 命令• INDEX 命令修改原索引

• 索引的删除– 表设计器

• “ 表设计器”——“索引”选项卡– DELETE TAG 删除索引标识

Page 71: 第四章 Visual Foxpro 数据库及其操作

索引的使用索引的使用• 设置主控索引

主控索引 :决定显示或访问表中记录的顺序的索引主控索引可以是 :

• 复合索引文件中的一个标识 ( 主控标识 )• 一个独立索引文件 ( 主控索引文件 )

– 打开表的同时指定主控索引• Use 表名 index 索引文件名

– 打开后再设置主控索引– 窗口 / 数据工作期 / 属性 / 索引顺序– 命令 SET ORDER TO TAG < 标识名 >

• 取消主控索引•SET ORDER TO

• 索引函数• CDX() ORDER() TAG()

Page 72: 第四章 Visual Foxpro 数据库及其操作

筛选记录(筛选记录( set filter toset filter to ))• 操作步骤:

– 项目管理器 -- 选择已索引的表,选“修改”– 表设计器,选索引,输入索引的名称– 在“筛选”处 ,输入过滤表达式– 按“确定” ,完成筛选表达式的建立– 如:筛选性别为男的记录,表达式为

Set filter to 性别 =‘男’• 可以实现对记录的控制

Page 73: 第四章 Visual Foxpro 数据库及其操作

• 4 4 王秋燕 女 45讲师 10/09/70 T memo gen• 5 5 姜丽萍 女 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

Page 74: 第四章 Visual Foxpro 数据库及其操作

索引应遵循原则索引应遵循原则(1) 为了提高速度 ,用普通索引、候选索引或

主索引

(2)控制字段的重复值对数据库“表”用“主索引”或“候选索引”,对于“自由表” ,用“候选索引”。

Page 75: 第四章 Visual Foxpro 数据库及其操作

数据分类排序数据分类排序分类:将关键字段值相同的记录按顺序存放在一起,生成一个新的表文件。

格式: SORT TO < 表文件名 > ON < 字段名 1> [/A | /D] [/C] [,<字段名 2> [/A | /D] [/C] ...] [ASCENDING|DESCENDING] [< 范围>] [FOR < 逻辑表达式 >] [WHILE < 逻辑表达式 >] [FIELDS <字段名列表 > | FIELDS LIKE < 框架 > | FIELDS EXCEPT < 框架>] 功能:对当前选定的表排序,并将排序后的记录输出到新表中。参数描述:< 表文件名 > :指定经过排序后所生成的新表的表文件名。 ON < 字段名 1> :在当前选定的、要排序的表中指定关键字段,字段的内容和数据类型决定了记录在新表中的顺序。 [/A | /D] [/C] :指定排序顺序(升序或降序)。 /A指定为按升序排序, /D指定按降序排序。如果在字符型字段名后面包含 /C ,则忽略大小写。可以把 /C选项与 /A 或 /D选项组合起来。

返 回

Page 76: 第四章 Visual Foxpro 数据库及其操作

[ASCENDING] :将所有不带 /D 的字段指定为升序排列。[DESCENDING] :将所有不带 /A 的字段指定为降序排列。如果省略 ASCENDING 和 DESCENDING参数,则排序默认为升序。[< 范围 >] :指定需要排序记录的范围。默认范围为 ALL 。[FOR < 逻辑表达式 >] :在当前表中指定排序中只包含逻辑条件为“真”的记录。 [WHILE < 逻辑表达式 >] :指定一个条件,在当前表中只要 <逻辑表达式 > 的计算值为“真”,则依据此条件,排序中包含这条记录。[FIELDS < 字段名列表 >] :指定用 SORT命令排序时所创建的新表中要包含的原表中的字段。如果省略 FIELDS子句,新表中将包含原表中的所有字段。[FIELDS LIKE < 框架 >] :在新表中包含那些与字段梗概框架相匹配的原表字段。[FIELDS EXCEPT < 框架 >] :在新表中包含那些不与字段梗概框架相匹配的原表字段。

Page 77: 第四章 Visual Foxpro 数据库及其操作

分类与索引的区别1 、分类要生成一个新的表文件,记录的物理顺序发生了改变;2 、分类生成的表可以单独使用。3 、索引它并不生成新的表文件,仅仅是表中记录的逻辑顺序发生了变化,但索引也要生成一个新的文件,即索引文件。4 、索引文件不能单独使用,它必须同表一起配合使用。

单索引文件总是按升序的顺序排列。对于一个表文件,允许建立多个索引文件。

USE STUDENTINDEX ON 学号 TO XHSYLIST

当执行上述命令后屏幕显示结果

按学号排序

Page 78: 第四章 Visual Foxpro 数据库及其操作

( 2 )利用表设计器的索引选项卡建立索引文件 索引选项卡

移动按钮

排序按钮 在此框中输

入索引标记

在此列表框中选择索引类型

在此文本框中输入索引表达式

在此输入条件表达式

表达式生成按钮

返 回

Page 79: 第四章 Visual Foxpro 数据库及其操作

使用索引使用索引 1 、打开索引文件

( 1 )在打开表时打开索引文件复合索引文件在打开表时将自动被打开。格式: USE < 表文件名 > INDEX < 索引文件名表 > [ORDER <数值表达式 >/ < 单索引文件名 >/[TAG] < 索引标记名 > [OF < 复合索引文件名 >]] [ASCENDING/ DESCENDING]

功能:打开指定的表,并且打开由 < 索引文件名表 >指定的所有索引文件。说明:虽然可以同时打开多个索引文件,但同一时间只能有一个单索引文件或是复合索引文件中的一个索引标识作为主控索引,记录的操作和显示由主控索引来控制。如果 < 索引文件名表 >中排在第一位的是单索引文件,则该单索引就是主控索引,如果排在第一位的是复合索引文件,则还需要用 ORDER子句规定主控索引,如果不使用 ORDER子句,记录将仍然按记录号的顺序显

Page 80: 第四章 Visual Foxpro 数据库及其操作

示。2 )在 ORDER子句中也可以使用单索引文件名、索引标记或数值表达式来规定主控索引。如:使用 ORDER < 单索引文件名 > 则规定一个单索引文件作为主控索引。3 )使用 ORDER [TAG] < 索引标记 > [OF <复合索引文件名 >]规定一个子索引文件作为主控索引, ORDER子句中的索引可以是结构复合索引文件中的索引标记,也可以是已经打开的非结构复合索引文件中的索引标记。4 )使用 ORDER < 数值表达式 >规定主控索引,以 < 数值表达式 > 的值作为索引文件的序号,根据序号来确定主控索引文件。系统给打开的单索引文件和复合索引文件的索引标记编号的方法是:首先按照打开索引文件时的单索引文件名的排列顺序编号,再按照结构复合索引文件中索引标记建立的顺序编号,最后按照非结构复合索引文件中的索引标记建立的顺序编号。

Page 81: 第四章 Visual Foxpro 数据库及其操作

(2) 在打开表后打开索引文件格式: SET INDEX TO [< 索引文件名表 >/ ? ] [ORDER < 索引号 >/< 复合索引文件名 >/[TAG] < 索引标记 > [OF < 复合索引文件名 >]] [ASCENDING/DESCENDING] [ADDITIVE]

功能:打开指定的索引文件或关闭索引文件。省略所有选项为关闭当前工作区中除结构复合索引文件外的所有索引文件。参数描述:< 索引文件名表 > :指定要打开的一个或多个索引文件。索引文件列表中可以包含多个单索引和复合索引文件。索引文件列表中,第一个索引文件成为主控索引,它控制记录的显示和访问。?:显示打开对话框,从这个对话框中,可以选择和打开一个单索引文件。[ORDER < 数值表达式 >] :指定一个索引文件或标识为主控索引文件,数值表达式指定在索引文件列表中出现的索引文件。

Page 82: 第四章 Visual Foxpro 数据库及其操作

首先,按索引文件列表中出现的顺序给单索引文件编号;然后,按照创建标识的先后顺序,对复合索引文件中的标识编号;最后,按照创建文件的顺序对独立的复合索引文件中的标识进行编号。如果数值表达式为 0 ,表中记录以物理顺序显示和访问,而索引文件保持打开状态。 [ORDER < 单索引文件名 >] :指定一个单索引文件为主控索引。[ORDER [TAG] < 索引标记名 > [OF < 复合索引文件名 >]] :指定复合索引文件中的一个标识作为主控标识。标识名来自结构化复合索引文件或独立的复合索引文件。在打开的独立复合索引文件中,如果存在相同名称的标识,则要使用 [OF <复合索引文件名 >]指定标识所在的复合索引文件。[ASCENDING/ DESCENDING] :指定显示和访问表记录时,是以升序还是以降序进行。 [ASCENDING/ DESCENDING]子句要跟在 ORDER子句的后面。[ADDITIVE] :指定以前打开的索引文件(除结构化复合索引文件外),在发出 SET INDEX命令打开另一个索引文件时,是否仍打开。如果没有该子句,将会关闭所有前面打开的文件。

Page 83: 第四章 Visual Foxpro 数据库及其操作

说明:在有索引文件的表中,记录的显示顺序和访问顺序可以由某个索引文件来决定。使用 SET INDEX命令可以打开单索引文件和复合索引文件。如果一个表有结构化复合索引文件,打开表时该文件自动打开。执行不带参数的 SET INDEX TO 命令,会关闭当前工作区中所有打开的索引文件(结构化复合索引文件除外)。

2 、设置主控索引 如果在打开索引文件时未指定主控索引,打开索引文件之后需要指定主控索引,或者希望改变主控索引,可使用下面的命令。 格式: SET ORDER TO [< 数值表达式 >/< 单索引文件名 >/[TAG] < 索引标记 > [OF < 复合索引文件名 >] [ASCENDING/DESCEN-DING]

功能:在打开的索引文件中指定主控索引。参数描述:

Page 84: 第四章 Visual Foxpro 数据库及其操作

< 数值表达式 > :指定主控索引或标识的编号。数值表达式指定的是在 USE 或 SET INDEX 中列出的索引文件或标识的序号。< 单索引文件名 > :指定作为主控索引文件的单索引文件名。[TAG] < 索引标记 > [OF < 复合索引文件名 >] :指定复合索引文件中的一个索引标识为主控索引标识名来自结构复合索引文件或任何打开的独立复合索引文件。如果在各打开的独立复合索引文件中存在相同的标识名,应使用 [OF <复合索引文件名>] 来指定包含此标记的复合索引文件。[ASCENDING/DESCENDING] :该参数用法同前。说明:⑴如果命令中不使用任选项,只写 SET ORDER TO ,那么不会指定主索引,记录仍按照记录号的顺序显示,但并未关闭索引文件。⑵VFP允许在 SET ORDER命令中使用 ASCENDING 和 DESCENDING暂时转换主控索引的顺序,但它不同于 SORT ON 命令中的 ASCENDING 和 DESCENDING 。

Page 85: 第四章 Visual Foxpro 数据库及其操作

⑶当数值表达式的值为 0 时,或省略所有可选项,则恢复表文件的自然顺序,但不关闭索引文件。⑷在打开的索引文件中,只有主控索引文件是有效。

3 、索引文件的重建或更新当表中的记录当生变化时,如果未打开索引文件,索引文件( 结构复合索引文件除外 ) 不会自动更新,要更新这些索引文件,可用下列命令:

格式: REINDEX

功能:重建当前打开的所有索引文件。说明:使用 REINDEX命令之前,必须首先打开需要重建索引的全部索引文件。对使用包含 UNIQUE 关键字的 INDEX命令或 SET UNIQUE ON命令创建的索引文件,在重建索引时,仍保持 UNIQUE状态。

返 回

Page 86: 第四章 Visual Foxpro 数据库及其操作

直接查询命令直接查询命令

直接查询也叫顺序查询,是按照记录的物理顺序逐个比较,逐个查询。

1 、 LOCATE 命令 格式: LOCATE [< 范围 >] [FOR < 条件 >] [WHILE < 条件>] 功能:按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。参数描述:[< 范围 >] :指定要定位的记录范围。只有在范围内的记录才被定位。 LOCATE命令的默认范围是 ALL 。[FOR < 条件 >] : LOCATE命令按顺序搜索当前表以找到满足逻辑表达式的第一个记录。若逻辑表达式是可优化的表达式,则 Rushmore优化由 LOCATE FOR 创建的查询。为了获得最佳执行效果,可在 FOR子句中使用可优化的表达式。

Page 87: 第四章 Visual Foxpro 数据库及其操作

[WHILE < 条件 >] :指定一个条件,只要逻辑表达式计算值为真,就继续查找记录。说明:(1)被搜索的表不必有索引。(2) 若 LOCATE发现一个满足条件的记录,就将记录指针定位在该记录上。可以使用 RECNO()返回该记录的记录号,同时 FOUND()函数返回“真”, EOF()函数返回“假”。如果没有找到,则将记录指针指向范围的最后一个记录,同时将 FOUND()函数值置为“假”,屏幕上显示“已到定位范围末尾”。(3) 如果执行 SET EXCAT OFF命令后,再用 LOCATE命令查找字符型数据时,不要求字符型数据精确匹配。 (4)该命令只能查找第一条满足条件的记录。若表中有多条满足条件的记录,当已经找到一条满足条件的记录后,还想继续查找后面满足条件的记录时,可以使用 CONTINUE 命令继续向后查找满足条件的记录。

Page 88: 第四章 Visual Foxpro 数据库及其操作

2 、 CONTINUE 命令

格式: CONTINUE

功能:它使 LOCATE命令从当前记录开始继续查找下一条满足条件的记录。说明: CONTINUE 是用在 LOCATE之后继续查找满足同一条件的记录的命令 , 它继续 LOCATE 的操作。 CONTINUE命令移动记录指针到下一个与 <条件 > 逻辑表达式相匹配的记录上。CONTINUE命令能被重复执行直到记录指针到表的结尾或到指定范围的尾部。如果 CONTINUE命令成功地查找到了一条记录, RECNO()函数将返回该记录的记录号,并且 FOUND()函数返回逻辑“真”值和 EOF()返回逻辑“假”值。如果 CONTINUE命令没有查找到满足条件的记录, RECNO()函数返回在 table plus one 中的记录数 , FOUND()函数返回逻辑“假”值,并且 EOF()函数返回逻辑“真”值。

返 回

Page 89: 第四章 Visual Foxpro 数据库及其操作

快速查询命令快速查询命令

用 LOCATE命令查询的优点是不论表中的记录是否有序都能进行查找,而其主要的缺点是查找速度慢。当表中的记录较多,并且要查询的记录又在表的底部时,问题尤为突出。为了解决这一问题, VFP提供了二条快速查询命令: FIND 和 SEEK 。

1 、 FIND 命令: 格式: FIND < 字符型常量 >/< 数值型常量> 功能:它在已经建立索引并且表文件和索引文件均已打开的表

中查找索引关键值与指定的字符串或数值型常量相匹配的第一条记录。如果找到,则把记录指针指向该记录,并且将 FOUND()函数的值置为“真”;如果没有找到与其相符的记录,则将记录指针指向表的末尾,且将 FOUND()函数的值置为“假”,将 EOF()函数的值置为“真”。 说明:⑴FIND命令是在索引文件中查询,找到后根据记录号从表文

Page 90: 第四章 Visual Foxpro 数据库及其操作

件中读出相应的记录。因为一个表在同一时刻只能有一个索引文件或一个索引标记为主控索引,因此,利用 FIND命令来查找记录时,只能查找主控索引字段的值。⑵查询的值可以是字符串,也可以是数值。通常字符串可以不用定界符括起来,但是当字符是以空格开始时,则必须用定界符括起来;如果要查找的字符串是以定界符开头时,就必须用不同的定界符将其括起来。⑶查询的值如果是字符串,它可以是索引关键表达式值的全部或前几个字符,但不能是中间的或是后面的字符。⑷查找字符串时,只要索引表达式(建立索引文件时使用的索引表达式)是字符型的,就可以使用 FIND命令查找,并要求组成索引表达式的字段必须是字符型的。⑸执行 SET EXACT命令后,再用 FIND命令查找字符串时,字符串可以是索引表达式值的全部或是从首字符开始的一个子串。如果执行了 SET EXACT ON命令后再用 FIND命令来查找字符串,则字符串只能和索引表达式的值精确匹配,即只能是

Page 91: 第四章 Visual Foxpro 数据库及其操作

索引表达式的值的全部。⑹建立索引文件时,索引表达式可以是多个字段组成的表达式,若字段之间用“ +”连接,用 FIND命令查询时,查询内容应当是包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串,究竞是用哪一种,这取决于 SET EXACT命令的设置;若字段之间用“ -” 号连接,用 FIND查找时,查询内容应当不包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串。⑺FIND命令只能使记录指针定位于第一条符合条件的记录,而CONTINUE命令又不能和 FIND命令一起配合使用,当符合条件的记录不止一条时,可用 FIND先查到满足条件的第一条记录,因为记录是根据索引关键表达式排序了的,因此符合条件的记录是在一起的,因此可用 SKIP命令配合 DISP命令查找,直到发现某条记录不满足条件时为止,此记录以后的记录肯定不符合条件。

Page 92: 第四章 Visual Foxpro 数据库及其操作

SEEK 命令: 格式: SEEK < 表达式 > [ORDER < 索引号 >/< 单索引文件名>/ [TAG] < 索引标记 > [OF < 复合索引文件名 >] [ASCENDING/ DESCENDING]]

功能:在打开的索引文件中快速查找与 < 表达式 > 相匹配的第1 条记录。参数描述:< 表达式 > :指定 SEEK搜索的关键字。 < 表达式 > 可以是空字符串。ORDER < 索引号 >/< 单索引文件名 >/[TAG] < 索引标记 > [OF < 复合索引文件名 >] [ASCENDING/DESCENDING] :指定 <表达式 > 是以哪一个索引或索引标记为主控索引。其使用方法同设置主控索引。说明:当省略所有的可选项时, SEEK命令与 FIND命令的功能基本

Page 93: 第四章 Visual Foxpro 数据库及其操作

相同,但 SEEK命令的功能更强, SEEK命令不仅可以查找字符串和常数,它还可以查找字符型、数值型、日期型或逻辑型表达式的值。用 SEEK命令查找字符串常量时,字符串常量必须放在定界符中。SEEK命令中的表达式必须和索引表达式的类型相同。

3 、顺序查询和快速查询比较 LOCATE FIND SEEK

查询内容 可以是字符型、数值型、日期型、逻辑型表达式,还可以查找备注型字段

可以是字符型、数值型、日期型表达式或逻辑型字段

字符串常量或常数

对表的要求

无论是否建立了索引文件均可方便地查询

必须建立并打开索引文件,只能在主控索引文件中查询

同左

命令特点

可使用<范围>子句限定查询范围,可与 CONTINUE命令配合使用,找出表中全部符合条件的记录

在整个表中查询,只能找出满足条件的第一条记录

同左

查询速度 慢 快 快

返 回

Page 94: 第四章 Visual Foxpro 数据库及其操作

对话查询 对话查询 格式: GETEXPR [< 字符表达式 1>] TO < 内存变量名 > [TYPE < 字符表达式 2>[;< 字符型错误信息文本 >]] [DEFAULT < 字符表达式 3>]

功能:通过命令 GETEXPR启动表达式生成器对话框,从中可以创建表达式,并把表达式存入内存变量或数组元素中,然后通过 LOCATE命令宏代换进行查询,此命令常用于程序中。 参数描述:[< 字符表达式 1>] :指定在“表达式生成器”中显示的标题,该标题可提示生成何种类型的表达式。TO < 内存变量名 > :指定存储表达式的内存变量或数组元素。如果此内存变量不存在, VFP将创建该变量。该命令不创建数组元素。如果按 Esc 键或选择【取消】按钮退出“表达式生成器”,将在内存变量或数组元素中存储空字符串。如果已经用DEFAULT子句创建了某个默认的表达式,在按 Esc 键或选择

Page 95: 第四章 Visual Foxpro 数据库及其操作

【取消】按钮退出“表达式生成器”时,将把这个默认表达式存储在内存变量中。[TYPE < 字符表达式 2>[;< 字符型错误信息文本 >]] : < 字符表达式 2>指定表达式类型: C- 字符型、 N- 数值型、 D- 日期型、 L- 逻辑型、 T- 日期时间型、 F- 浮点型、 I- 整型、 B- 双精度型、 Y-Currency (货币型)。< 字符型错误信息文本 > :定义错误提示信息文本,如果 < 字符表达式 2> 是非法的,可以用 < 字符型错误信息文本 >指定要显示的错误信息, < 字符表达式 2> 和 < 字符型错误信息文本 > 必须用分号分隔。 < 字符表达式 2> 、分号、 < 字符型错误信息文本 > 的结合体必须用一对单引号或双引号定界起来。[DEFAULT < 字符表达式 3>] :指定在“表达式生成器”中显示初始的默认表达式。 GETEXPR命令可以按受这个默认的表达式,该默认表达式也可用 < 字符表达式 3>指定的表达式改写。如果调用 GETEXPR命令而没有输入表达式,则该默认的表达式将作为输入的表达式存储到内存变量中。

Page 96: 第四章 Visual Foxpro 数据库及其操作

例:通过 GETEXPR获取 LOCATE命令中查询条件,以实现任意条件的查询。 GETEXPR " 输入查询条件 " TO CXTJ TYPE "L ;输入条件错误 " DEFAULT " 性别 =’ 男’ "

启动表达式生成器 指定表达式框中

的表达式为逻辑型,且当表达式不为逻辑型时提示“输入条件错误”。

指定保存表达式的内存变量

返 回

Page 97: 第四章 Visual Foxpro 数据库及其操作

求记录个数的命令求记录个数的命令

格式: COUNT [< 范围 >] [FOR < 条件 >] [WHILE < 条件 >] [TO < 内存变量 >]

功能:统计当前表中指定范围内满足条件的记录个数,并存于 <内存变量 > 中。参数描述:<范围 > 、 <条件 >子句的用法和前面所有命令的用法是一样的。若使用 <范围 > 、 <条件 >子句,可统计出指定 <范围 > 内满足 <条件 > 的记录个数,否则统计表中的记录的总数。对 COUNT命令,默认的范围是 ALL 。若使用任选项 TO < 内存变量 > 可选项,可将统计的结果送到内存变量中保存,否则将统计结果显示在屏幕上 (SET TALK ON) 。 例: USE STUDENT SET EXACT OFF COUNT FOR 姓名 ="李 ".OR.姓名 ="王 " TO RS

返 回

Page 98: 第四章 Visual Foxpro 数据库及其操作

求和命令求和命令 格式: SUM [< 数值型表达式表 >] [< 范围 >] [FOR < 条件 >] [WHILE < 条件 >] TO < 内存变量名表 >/TO ARRAY < 数组名 >

功能:对当前表中指定范围内满足条件的数值型字段或是由字段组成的数值型表达式累加求和,并把结果存放在对应的 < 内存变量名表 > 标识的变量中。若使用任选项 < 数值型表达式表 > ,则只对 < 数值型表达式表> 中的各表达式累加求和,否则将对当前表中的所有数值型字段累加求和,数值型字段之间或表达式之间用逗号分隔开。若使用 TO < 内存变量名表 > ,可将求出的各表达式的值依次赋给各内存变量,但要注意:表达式表中的表达式的个数应该与内存变量表中的变量个数相等,若省略 < 数值型表达式表 > ,内存变量的个数应该与数值型字段的个数相等。也可将求出的各表达式的值存放于指定的数组中,一个数组元素等同于一个内存变量。

返 回

Page 99: 第四章 Visual Foxpro 数据库及其操作

求平均值命令求平均值命令

格式: AVERAGE [< 数值型表达式表 >] [< 范围 >] [FOR < 逻辑表达式 1>] [WHILE < 逻辑表达式 2>] [TO < 内存变量列表 >| TO ARRAY < 数组名 >]

功能:对当前表中指定范围内满足条件的记录的数值型字段求算术平均值,并把结果存入 < 内存变量名表 > 中或存入 < 数组名 >指定的数组中。 说明: AVERAGE 和 SUM命令的不同之处仅仅在于前者是求数值型字段或数值型表达式的平均值,而后者是求和。 若省略 <范围 > ,约定为 ALL ,若省略 < 数值型表达式表 > ,约定为当前表中的所有的数值型和浮点型字段。若省略 < 内存变量名表 > 和 < 数组名 > ,则不保留结果,若系统设置为 SET TALK ON 则只显示,否则不显示。

返 回

Page 100: 第四章 Visual Foxpro 数据库及其操作

表的关联表的关联

如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其它表的记录指针是不会随之移动 。如果要想其它表的记录指针也随之移动,则要建立表间的关联。 关联就在二个或二个以上的表之间建立某种联接,使其表的记录指针同步移动。用来建立关联的表称为父表,被关联的表称为子表。

1 、建立关联 格式: SET RELATION TO [< 关联表达式 1>] INTO < 工作区 >/< 别名 > [,< 关联表达式 2> INTO < 工作区 >/< 别名 >…]] [IN <工作区 >/< 别名 >][ADDITIVE]

功能:在两个表之间建立关联。参数描述:< 关联表达式 1> :指定用来在子表和父表之间建立关联的关联表达式。关联表达式经常是子表主控索引的索引表达式。

Page 101: 第四章 Visual Foxpro 数据库及其操作

< 关联表达式 > 可以是下列三种参数之一:1 、 < 关联表达式 > 是记录号函数 RECNO() 。此时,两个或多个关联表之间的联系是根据记录号来进行关联的,关联表与被关联表之间当前记录号保持相等。如果关联表记录的记录号大于被关联表的记录总数,则被关联表的当前记录指针指向最后一条记录的下一条记录, EOF()函数值为 .T. 。

SELECT 2USE SCORE ALIAS CJSELECT 1USE STUDENTSET RELATION TO RECNO() INTO CJ

2 、 < 关联表达式 > 是数值型表达式。此时,在表达式中通常含有 RECNO()函数,每当关联表的记录指针重新定位时,被关联表的记录指针将重新定位于 < 关联表达式 > 的值所对应的记录之上。如果 < 关联表达式 > 的值大于被关联表文件的记录总数,则被关联表

Page 102: 第四章 Visual Foxpro 数据库及其操作

文件的当前记录指针指向最后一条记录的下一条记录, EOF()函数值为 .T. 。

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

Page 103: 第四章 Visual Foxpro 数据库及其操作

INTO < 工作区 >/< 别名 > :指定被关联表的工作区或别名,也可以是被关联表的别名。ADDITIVE :建立关联时,如果命令中不使用 ADDITIVE子句,则父表以前建立的关联将自动解除;若使用了 ADDITIVE子句,则父表以前建立的关联仍然保留。 说明:在建立关联之前,必须打开一个表(父表),而且还必须在另一个工作区内打开其它表(子表)。相关的各表通常有一个相同的字段。父表可以同时与多个子表建立关系,称为“一父多子”的关系。 < 关联表达式 > 可以是字符型、数值型、日期型表达式。如果建立父子关联之前,子表已经按照关联条件建立了索引,并将该索引文件指定为主控索引,那么,每当当前工作区父表的记录指针重新定位时,就检索子表,将子表的记录指针定位于 < 关联表达式 > 值与 < 索引表达式 > 值相同的第一条记录之上。 除了可以在一个工作区中与多个表建立关联以外,还允许在多个工作区中建立多个表之间的关联,但关联不能构成循环。

Page 104: 第四章 Visual Foxpro 数据库及其操作

这样建立的关联,只能显示一对一的关系,当要父表中的一条记录同时对应子表中的多条记录时,还要先用到 SET SKIP TO 命令

格式: SET SKIP TO < 工作区号 >/< 别名 > [,< 工作区号 >/< 别名 >…]

功能:在父表的每条记录与子表中所有对应记录之间建立“一对多”的关联。 说明:如果已经建立了一父多子的关联,并且父表与每个子表都要建立“一对多”的关联,那么只要在 SET SKIP TO命令中分别写出子表所在的 <工作区号 > 或者 <别名 >即可。

2 、解除关联 用 SET RELATION命令建立关联之后,当移动关联表的记录指针时,被关联表的记录指针也相应要移动,并且将要引起读 /写磁盘操作,这样会降低系统的性能,因此,当某些关联不再使用,或暂时不再使用时,应及时解除关联,以提高系统的运行速度。

Page 105: 第四章 Visual Foxpro 数据库及其操作

格式 1 : SET RELATION TO

功能:删除当前工作区表与其它工作区表建立的关联。 格式 2 : SET RELSTION OFF INTO < 工作区号 >/< 别名 >

功能:删除当前工作区与由 <工作区号 >/<别名 >指定的工作区中表建立的关联。该命令必须在父表所在的工作区执行。例如:要关闭当前工作区与 C工作区建立的关联。可以作下述命令进行:SET RELATION OFF INTO C 当用 USE 关闭某些表时,系统将自动删除掉与它建立的关联。如果关闭的是父表文件,则它与子表的关联将全被删除。 当关闭父表时,将自动关闭与父表建立的所有关联。

返 回

Page 106: 第四章 Visual Foxpro 数据库及其操作

表的连接表的连接 表的连接是正好与 COPY命令相反的过程

格式: JOIN WITH < 别名 >/< 工作区 > TO < 表文件名 > FOR < 条件 > [FIELDS < 字段名表 >]

功能:连接当前工作区中打开的表和 <工作区 >/<别名 >指定的表,生成 < 表文件名 >规定的新的表文件。参数描述:< 别名 >/< 工作区 > :指定第二个表的别名或所在的工作号。 FOR < 条件 > :指定一个筛选条件。若 <条件 > 的值为真,则向新表中写入一个新记录。 [FIELDS < 字段名表 >] :指定新表中包含的字段的列表。两个表中指定的字段都可以包含在 < 字段名表 > 中。说明: JOIN命令也可以连接两个以上的表,这时可先连接其中的两个,生成一个新的表文件后再利用 JOIN命令连接另外的表。

返 回