第三章 Visual FoxPro数据库和表

Slides:



Advertisements
Similar presentations
2014 年 10 月. 学生入学考试 15 位编号 号工号 ****** 北科 MBA 网址: 如: 初试密码为身份证 后六位,登录成功 后可进行修改。
Advertisements

3.1 表的建立 教学内容 :一、建立表结构 ; 二、输入数据. 重点 :建立表 难点 :建立表.
Chapter 3: SQL.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
授课-2 自由表操作(一) 2.1 表的基本操作(一) 2.2 表结构的有关操作
第二章 数据库及其操作 本章基本目标 *掌握数据库和数据表的操作及与其操作相关的简单命令 *掌握数据库表和自由表的区别以及两者相互转化
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 数据操纵功能 数据操纵 在关系数据库中,经常需要进行插入新记录、删除或修改已有记录等数据操纵(Data Manipulation)。
(第11讲) Mysql 简介和创建新的数据库 本讲大纲: 1、MYSQL简介与概要 2、访问MYSQL的几种途径
第四章 排序、索引与数据库 教学目标: 教学重点:排序、索引。 教学难点:访问远程数据源,创建本地和远程表的视图 。
第4章 表与数据库的基本操作.
Oracle数据库 Oracle 子程序.
主 要 内 容 第一章 数据库系统基础知识 第二章 Visual Foxpro 操作基础 第三章 Visual Foxpro 的数据及其运算
授课-3 自由表操作(二) 3.1 表的基本操作(二) 3.2 数据统计操作
C语言实验 第一课 标题:学号+姓名.
在PHP和MYSQL中实现完美的中文显示
Hadoop I/O By ShiChaojie.
第三章 数据库和表的操作.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
数据库基础 1.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
Hub Web System 主要功能: 1.查询库存(Query Current Storage) 2.创建PL(Create PL) 3.查询、打印PL单(Query & Print PL) 4.查询允交量、在途量 5.修改用户的基本信息(Update Password) 6.查询GR(Query.
第17章 网站发布.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
新PQDT论文全文库提交平台.
SQL 范引娣.
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
SQL查询语句 蔡海洋.
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
数据库系统与应用实验 基于SQL Server 2005.
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
1.把下面的关系模式转化为E-R图 1)系(系号,系名,电话) 2)教师(工号,姓名,性别,年龄,系号)
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
数据库应用基础 电大崇信县工作站:王 敏.
Visual Basic程序设计 第13章 访问数据库
学习目标 1、如何对结果进行分组 2、分组函数的一些实用方法.
熟悉PowerDesiner12操作环境 菜单栏 标题栏 工具栏 导航栏 工作区 浮动工具条 导航选项卡 控制信息栏 状态栏.
Lync 2013 for Android 课程摘要卡 加入 Lync 会议 登录并开始使用 在会议中启动您的视频 更改状态或注销
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
Python 环境搭建 基于Anaconda和VSCode.
期末复习.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
回归分析实验课程 (实验三) 多项式回归和定性变量的处理.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
VB与Access数据库的连接.
Visual Foxpro程序设计 第4章 表的操作.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
RefWorks使用指南 归档、管理个人参考文献.
学习目标 1、什么是列类型 2、列类型之数值类型.
JUDDI安装手册.
Presentation transcript:

第三章 Visual FoxPro数据库和表 本章教学要求:掌握数据库和表的建立,对表的基本操作。 3.1 Visual FoxPro数据库和表的建立 3.2 Visual FoxPro表记录的操作 3.3 表的统计 3.4 表的索引 3.5 多表操作

3.1 Visual FoxPro数据库和表的建立 应当说明的是数据库是表、视图和连接等的集合,数据记录内容是存放在表中的,如图3-1所示。

学生学籍库 课程表 成绩表 学生基本信息表 图3-1 学生学籍库的组成

3.1.1 数据库的建立 在Visual FoxPro中有多种方法建立数据库。 l     在命令窗口中输入命令 格式:Create database 数据库名 例如:在命令窗口中输入: Create database c:\学籍管理\学生学籍库 将在“c:\学籍管理”文件夹下创建一个文件名为“学生学籍库.DBC”数据库。

l 通过菜单或工具栏上的“新建”命令 步骤: 点击工具栏上的“新建”按钮,出现如图3-2所示的 “新建”对话框,选择“数据库”,然后点击“新建文件” 按钮,出现“创建”对话框,输入文件名c:\学籍管理\学生学籍库(如图3-3所示),点击“保存” 按钮,屏幕上将出现“数据库设计器”窗口,如图3-4所示。 图3-2 新建对话框

图3-3创建对话框

图3-4 数据库设计器窗口

l 使用数据库向导创建数据库 步骤: 点击工具栏中的“新建”按钮,出现“新建”对话框,选择“数据库”,然后点击“向导” 按钮,按照屏幕指示进行操作即可。 3.1.2 数据库的打开与关闭 1. 打开数据库 l 使用Open DataBase命令 格式:Open DataBase [<数据库名|?>] [Shared|Exclusive][Noupdate][Validate]

命令参数: 若省略数据库名或用?代替数据名,则系统将显示“打开”对话框,让用户从中选择现有的数据库。 Shared:表式以共享方式打开数据库。 Exclusive:表式以独占方式打开数据库。 Noupdate:指定不能对数据库进行修改操作,即只能对数据库进行读操作。 Validate:指定在打开数据库时对数据库中的表和索引是否可用进行检查。 例如:打开c:\学籍管理\学生学籍库.dbc数据库 open database c:\学籍管理\学生学籍库

l 在Visual FoxPro的集成环境中打开数据库 点击工具栏中的“Open”按钮,然后在“打开”对话框中选择要打开的数据库文件。 说明:当数据库打开后,若要使用表还必须使用Use命令打开表。   2.  关闭数据库 l 使用Close DataBase命令 格式:Close DataBase [All] 命令参数:

All:关闭当前数据库和表,如果没有当前数据库,则关闭所有已打开的自由表、索引文件和格式文件,并把当前工作区设为1。  3.1.3 表的建立 在Visual FoxPro中表是非常重要的,数据都是以记录的形式存放在表中的,表由两部分组成:表结构和记录, 创建一个表时,首先应创建表结构,然后再根据需要输入数据,创建一个表结构时,应事先确定表结构的如下内容: l  字段名 只能以字母、下划线和汉字开始,后面可跟字母、数字、

下划线和汉字。每个字段名的最大长度不超过10个字符。 下列符号不能用于表字段名: @ # $ % ^ & * 空格 ! ~ Visual FoxPro的保留字等 l  数据类型、宽度及小数据位数 Visual FoxPro表中常用的数据类型: Visual FoxPro字段数据类型表: 数据类型 宽度 (字节) 小数 位数 备注 字符型(Character) <=254   任意字符

字符型(Character)) <=254 任意字符 货币型(Currency) 8 数值型(Numeric) <=20   任意字符 货币型(Currency) 8   数值型(Numeric) <=20 <=19   浮动型(Float) <=20 <=19   日期型(Date) 8     日期时间型(DateTime) 8     双精度型(Double) 8 <=7   整型(Integer) 4     逻辑型(Logical) 1     备注型(Memo) 4     通用型(General)     保存OLE对象的引用 字符型(二进制)(Binary) <=254   保存数据不经代码页修改 备注型(二进制) (Memo Binary) 4   保存数据不经代码页修改

双精度型(Double) 8 <=7 整型(Integer) 4 逻辑型(Logical) 1 备注型(Memo) 4   整型(Integer) 4     逻辑型(Logical) 1     备注型(Memo) 4     通用型(General)     保存OLE对象的引用 字符型(二进制)(Binary) <=254   保存数据不经代码页修改 备注型(二进制) (Memo Binary) 4   保存数据不经代码页修改

在Visual FoxPro中创建新表的方法有多种,但通常是在Visual FoxPro的集成开发环境中点击“文件”菜单→“新建”,在弹出的新建对话框中选择“表”,然后选择“新建文件”按钮,屏幕上出现“创建”对话框,在该对话框中键入表文件名(如图3-5所示),键入表文件名后,点击“保存”按钮,屏幕上出现“表设计器”窗口,在“表设计器”窗口中输入表结构(如图3-6所示),输入完成后点击“确定”按钮,屏幕上出现“现在输入数据记录吗?”对话时,若选择“否”则不输入数据,若选择“是”则屏幕上出现数据记录输入窗口,可在其中输入数据(如图3-7所示),输入完成后关闭数据记录输入窗口即可。 注:备注型输入方法是当光标移动到备注型字段时按“Ctrl+PageDown”键,屏幕上就会出现输入备注型字段的编辑窗体,如图3-7所示。

图3-5 创建对话框

图3-6 表设计器-学生基本信息表结构

图3-7 数据记录输入

3.1.4 表的打开与关闭 1. 通过菜单操作打开表 操作步骤: 点击“文件”菜单→“打开”,屏幕上出现“打开”文件对话框,选择要打开的表文件(如图3-8所示),然后点击“确定”按钮即可。 注:在图3-8中,若选择了“以只读方式打开(R)”,则只能对打开的表进行读操作不能进行修改、删除和增加等操作;若选择了“独占”,则其它用户此时只能以共享方式打开该表。

图3-8 “打开”对话框

2.     通过命令打开表 在Visual FoxPro的命令窗口中使用Use命令打开表。 命令格式:Use <表文件名> [Shared|Exclusive][ Alias <别名>] 命令参数: Shared:指定以共享方式打开表,以这种方式打开的表,可以对表进行增加、删除和修改数据记录的操作,但不能修改表结构。 Exclusive:指定以独占方式打开表,以这种方式打开的表,除可以对表进行增加、删除和修改数据记录的操作,还可以修改修表的结构。

若不指定打开方式,则以独占方式打开表。 Alias <别名>:指定打开表的别名,若省略该参数,表的别名就是表名。 例如 要共享方式打开表C:\学籍管理\学生基本信息表.dbf,可使用如下命令: Use C:\学籍管理\学生基本信息表.dbf Shared 若要对表进行操作,必须先打开表。   3. 表的关闭 对表的操作完成后,应及时关闭表。 命令格式:Use

3.2 Visual FoxPro表记录的操作 3.2.1 记录指针定位 1. Go/GoTo命令 命令格式: Go/GoTo [[RECORD] <记录号>|<TOP>|<BOTTOM>] [In <工作区>|<表别名>] 命令功能:移动记录指针。

命令参数: [RECORD] <记录号>:将表记录指针移到<记录号>指定的记录。 TOP:将表记录指针移到第一条记录。 BOTTOM:将表记录指针移到最后一条记录。 [In <工作区>| <表别名>]:指定要移到记录表所在的工作区,若省略该参数则是对当前工作的表进行操作。 例如 将当前工作区的表的记录指针移到第3条记录,可使用如下命令: GoTo 3 或者

Go 3 或者 3  2. Skip命令 命令格式:Skip [<数值表达式>] [In <工作区>|<表别名>] 命令功能:移动记录指针。 命令参数: <数值表达式>:指定记录指针移动的相对记录数,即若<数值表达式>为正数,表示记录指针向文件尾方向移动,为负数表示向文件头方向移动记录指针;若省略该参数,则表示记录指针向文件尾方向移动一个记录位置。

In <工作区>|<表别名>:指定要移动记录指针的工作区或表别名。 例如假设当前工作区的当前记录为12,总共有30条,执行如下程序: Skip –1 && 记录指针移到第11条记录 Skip –90 && 记录指针移到第1条记录 Skip && 记录指针移到第2条记录 Skip 100 && 记录指针移到第30条记录,即最后一条 Skip && 出错,因为已到文件尾 与记录指针移动有关的函数有3个:

Recno( ):返回当前记录号。 Bof( ):测试记录指针是否已到文件头,若已到文件头返回.T.,否则返回.F.。 Eof( ):测试记录指针是否已到文件尾,若已到文件尾返回.T.,否则返回.F.。 3.2.2 增加记录 向表中增加记录主要有两种方式,一种是直接通过全屏幕方式从键盘输入数据,另一种是从其它表文件中把有关数据记录添加到表中。 1.  从键盘输入新记录

(1)      Apppend命令 命令格式:Append [Blank] [In 工作区|表别名] [NoMenu] 命令功能:在表的最末尾添加记录。 命令参数: Blank:若有该参数,则在表的末尾添加一条新记录,若没有该参数,则屏幕上出现数据输入窗体,在该窗体中可进行添加记录操作,如图3-9所示。 In 工作区|表别名:指定要对哪一个工作区的表进行操作,省略该参数,则是向当前工作区的表添加记录。 NoMenu:指定从系统菜单中删除“表”菜单项。

图3-9 向表中追加记录

例如,要向表“C:\学籍管理\学生基本信息表.dbf”添加一个空白记录,可在命令窗口中输入如下命令: Use C:\学籍管理\学生基本信息表 &&若表文件的扩展名为.DBF可省略 Append Blank Use &&关闭表  (2)      Insert命令 命令格式:Insert [Before] [Blank] 命令功能:在当前表中插入新的记录。 命令参数:

Before:在当前记录之前插入新记录,若没有该参数则是在当前记录之后插入新记录。 Blank:插入一条空记录,屏幕上不出现数据输入窗口;若没有该参数,屏幕上出现数据输入窗口,用户可以输入新的数据。 例如 在表“C:\学籍管理\学生基本信息表.dbf”的第3和第4条记录之间插入新的记录,可在命令窗口输入如下命令: Use C:\学籍管理\学生基本信息表.DBF Go 3 &&使当记录指针指向第4条记录 Insert Use

2. 从其它表文件中把有关数据记录添加到表 命令格式: Append From [文件名|?] [Fields <字段列表>] [For <条件表达式>] 命令功能:从其它文件中将所需的数据复制到当前表中。 命令参数: 文件名:指定源数据文件名,即数据来自哪一个文件。 ?: 当执行该命令时,显示打开文件对话框,让用户从中选择一个源数据文件。

Fields <字段列表>:指定要将源表的哪些字段复制到当前表中,若有多个字段,字段之间用逗号“,”隔开,若省略该参数,则是将源表的所有字段值复制到当前表以对应的字段中去。 For <条件表达式>:指定添加记录的条件,只有符合条件的记录才会被添加到当前表中,若省略该参数,则是将源数据文件所有的记录添加到当前表中。 例如,C:\ 学籍管理\新生数据.DBF的内容如图3-10所示,C:\学籍管理\学生基本信息表.DBF的内容如图3-11所示。

图3-10新生数据表内容

图3-11学生基本信息表内容

将C:\ 学籍管理\新生数据.DBF文件中的所有记录复制到C:\学籍管理\学生基本信息表.DBF中,在命令窗口中输入如下命令: Use C:\学籍管理\学生基本信息表.DBF Append From C:\学籍管理\新生数据.DBF Use 上述命令执行完后,表C:\学籍管理\学生基本信息表.DBF的内容如图3-12所示

图3-12 追加记录后学生基本信息表内容

3.2.3 删除记录与恢复 当表中的数据不再需要时,应将删除。为了防止误删除,在Visual FoxPro中删除记录分两步进行,第一步是逻辑删除,即只在要删除的记录上作一个删除标记,数据记录并没有真正从表中删除,当发现删除操作有误时,还可以用恢复命令将其恢复,显然只被逻辑删除的记录仍要占用硬盘空间,被逻辑删除的记录在列表显示(List或Display)时记录前有一个删除标记“*”或“■”(用Browse浏览记录时);第二步是物理删除,即将作了删除标记的记录从硬盘中彻底删除,物理删除后的记录不可以再恢复。   1.       逻辑删除 命令格式:Delete [<范围>] [For <条件>] [While <条件>] [In <工作区>|<表别名>] 命令功能:对符合条件的记录进行逻辑删除。 命令参数: <范围>: 指定要操作的记录范围,该参数可以是: All:所有记录。 Next n:从当前记录开始的后面n个记录。 Record n:第n号记录。 Rest:从当前记录开始一直到文件结束。 For <条件>:指定要作删除标记的条件,依次对指定范围内的记录进行操作,若条件为真,对记录作删除标记,否则不作删除标记,然后再对下范围内的一个记录进行操作。 While <条件>:指定要作删除标记的条件,依次对指定范围内的记录进行操作,若条件为真,对记录作删除标记,若条件为假或已到范围内的最后一个记录则停止。 若省略范围、For <条件>和While <条件>参数,则只删除当前记录。 若省略范围,但有For <条件>或While <条件>参数,则缺省的范围为整个记录。 In <工作区>|<表别名>:指定要进行逻辑删除的表所在的工作区或表别名,若省略该参数,则是对当前工作区进行操作。 例如,假设当前表为前面的学生基本信息表,执行如下操作: Delete record 5 && 给第5条记录加删除标记 Go 7 && 给第7条记录成为当前记录 Delete && 给当前记录加删除标记 Delete for 学号=’ 20040805 ’ &&给学号为20040805加删除标记。 List &&列表显示记录 记录号 学号 姓名 性别 出生日期 身高 简历 1 *20040805 刘军 .T. 07/04/85 170.3 memo 2 20040807 张平 .T. 06/13/85 175.0 Memo 3 *20040805 刘军 .T. 07/04/85 170.3 memo 4 20040807 张平 .T. 06/13/85 175.0 Memo 5 * 李光辉 .T. 07/14/85 170.3 memo 6 张勇 .T. 11/17/85 177.6 Memo 7 * 罗丽 .F. 07/04/86 162.8 memo 8 欧阳德雷 .T. 03/18/85 175.0 Memo 2.       物理删除 命令格式:Pack 命令功能:将作了删除标记的记录从表中彻底删除,释放其所占的内存空间。 说明:要执行该命令,必须以独占方式打开表。 例如: Use C:\学籍管理\学生基本信息表.DBF exclusive Delete for 姓名=’李勇’ Pack Use 3.       ZAP命令 命令格式:ZAP [IN <工作区> | <表别名>] 命令功能:物理删除表中的所有记录。 In <工作区> | <表别名>:指定要执行删除操作的工作区或表别名。 当要物理删除表中的所有记录可使用该命令,该命令与下面两条命令相当: delete all pack 4.       记录的恢复 命令格式:RECALL [<范围>] [FOR <条件>] [WHILE <条件>] 命令功能:取消已打删除标记记录的删除标记。 <范围>: 参见DELETE的命令参数说明。 For <条件>:指定要恢复记录的条件,依次对指定范围内的记录进行操作,若条件为真,对恢复记录,否则不恢复,然后再对下范围内的一个记录进行操作。 While <条件>:指定要恢复的条件,依次对指定范围内的记录进行操作,若条件为真,对恢复记录,若条件为假或已到范围内的最后一个记录则停止。 若省略范围、For <条件>和While <条件>参数,则只恢复当前记录。 若省略范围,但有For <条件>或While <条件>参数,则缺省的范围为整个记录。 In <工作区>|<表别名>:指定要进行恢复的表所在的工作区或表别名,若省略该参数,则是对当前工作区进行操作。 Use C:\学籍管理\学生基本信息表.DBF 5 && 使第5号记录为当前记录 delete && 对第5号记录作删除标记录 7 && 使第5号记录为当前记录 delete && 对第7号记录作删除标记录 recall && 恢复第7号记录 recall all && 恢复所有记录 3.2.4 修改记录 对表记录的修改有两种方式:屏幕编辑方式和和程序方式 1.       屏幕编辑方式 l         EDIT/CHANGE命令 命令格式:EDIT/CHANGE [FIELDS <字段名列表>][<范围>] [FOR 条件] [WHILE条件] 命令参数: FIELDS <字段名列表>:指定哪些字段可以被修改。 <范围>:参见DELETE命令说明。 For <条件>或While <条件>:指定要修改记录的条件,符合条件的记录才会在编辑窗口中显示并修改。 说明:EDIT和CHANGE的功能是完全相同的。

1.  逻辑删除 命令格式:Delete [<范围>] [For <条件>] [While <条件>] [In <工作区>|<表别名>] 命令功能:对符合条件的记录进行逻辑删除。 命令参数: <范围>: 指定要操作的记录范围,该参数可以是: All:所有记录。 Next n:从当前记录开始的后面n个记录。 Record n:第n号记录。 Rest:从当前记录开始一直到文件结束。

For <条件>:指定要作删除标记的条件,依次对指定范围内的记录进行操作,若条件为真,对记录作删除标记,否则不作删除标记,然后再对下范围内的一个记录进行操作。 While <条件>:指定要作删除标记的条件,依次对指定范围内的记录进行操作,若条件为真,对记录作删除标记,若条件为假或已到范围内的最后一个记录则停止。 若省略范围、For <条件>和While <条件>参数,则只删除当前记录。 若省略范围,但有For <条件>或While <条件>参数,则缺省的范围为整个记录。

In <工作区>|<表别名>:指定要进行逻辑删除的表所在的工作区或表别名,若省略该参数,则是对当前工作区进行操作。 例如,假设当前表为前面的学生基本信息表,执行如下操作: Delete record 5 && 给第5条记录加删除标记 Go 7 && 给第7条记录成为当前记录 Delete && 给当前记录加删除标记 Delete for 学号=’ 20040805 ’ &&给学号为20040805加删除标记。

List &&列表显示记录 记录号 学号 姓名 性别 出生日期 身高 简历 1 *20040805 刘军 .T. 07/04/85 170.3 memo 2 20040807 张平 .T. 06/13/85 175.0 Memo 3 *20040805 刘军 .T. 07/04/85 170.3 memo 4 20040807 张平 .T. 06/13/85 175.0 Memo 5 * 李光辉 .T. 07/14/85 170.3 memo 6 张勇 .T. 11/17/85 177.6 Memo 7 * 罗丽 .F. 07/04/86 162.8 memo 8 欧阳德雷 .T. 03/18/85 175.0 Memo  

2.  物理删除 命令格式:Pack 命令功能:将作了删除标记的记录从表中彻底删除,释放其所占的内存空间。 说明:要执行该命令,必须以独占方式打开表。 例如: Use C:\学籍管理\学生基本信息表.DBF exclusive Delete for 姓名=’李勇’ Pack Use

4. 记录的恢复 命令格式:RECALL [<范围>] [FOR <条件>] [WHILE <条件>] 命令功能:取消已打删除标记记录的删除标记。 命令参数: <范围>: 参见DELETE的命令参数说明。 For <条件>:指定要恢复记录的条件,依次对指定范围内的记录进行操作,若条件为真,对恢复记录,否则不恢复,然后再对下范围内的一个记录进行操作。 While <条件>:指定要恢复的条件,依次对指定范围内的记录进行操作,若条件为真,对恢复记录,若条件为假或已到范围内的最后一个记录则停止。

若省略范围、For <条件>和While <条件>参数,则只恢复当前记录。 In <工作区>|<表别名>:指定要进行恢复的表所在的工作区或表别名,若省略该参数,则是对当前工作区进行操作。 例如: Use C:\学籍管理\学生基本信息表.DBF 5 && 使第5号记录为当前记录 delete && 对第5号记录作删除标记录

7 && 使第5号记录为当前记录 delete && 对第7号记录作删除标记录 recall && 恢复第7号记录 recall all && 恢复所有记录 3.2.4 修改记录 对表记录的修改有两种方式:屏幕编辑方式和和程序方式 1.  屏幕编辑方式 l         EDIT/CHANGE命令 命令格式:EDIT/CHANGE [FIELDS <字段名列表>][<范围>][FOR 条件][WHILE条件]

命令参数: FIELDS <字段名列表>:指定哪些字段可以被修改。 <范围>:参见DELETE命令说明。 For <条件>或While <条件>:指定要修改记录的条件,符合条件的记录才会在编辑窗口中显示并修改。 说明:EDIT和CHANGE的功能是完全相同的。 3.2.5 查询记录 把数据放在数据表中,是为了将来在需要时对其进行查询,查询操作是数据库操作中最常用的。 1.  用Browse命令进行浏览查询

命令格式: Browse [Scope] [Fileds <FieldList>] [for <条件表达式>] 功能:显示数据表中的记录。 参数说明: Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 Fields <FieldList>:指定要查询显示的字段名列表,若省该参数,则显示所有字段。 for <条件表达式>:指定要查询显示的记录应满足的条件。

例如: Set century on && 设置日期要显示世纪 Set date ansi && 设置日期显示格式为yyyy.mm.dd Open database c:\学籍管理\学生学籍库.DBC Use 学生基本信息 Browse for 出生日期>{^1980.05.23} Close   上面的程序运行过程中将打开一个查询窗口(如图3-14所示),可在其中浏览查询到的记录。

图 3-14 数据浏览查询窗口

 2. 用Locate命令进行查询 命令格式: Locate [Scope][for <条件表达式>] 功能:将记录指针定位到指定记录范围内满足条件的第一条记录,若没有记录满足条件,记录移到记录末尾,Eof()函数返回“真”。 参数说明: Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 for <条件表达式>:指定要查找的记录应满足的条件。

  3.  用Continue命令进行查询 命令格式: Continue 功能:激活Locate命令,继续顺查找。 例如: Set century on && 设置日期要显示世纪 Set date ansi && 设置日期显示格式为yyyy.mm.dd Open database c:\学籍管理\学生学籍库.DBC Use 学生基本信息 Locate for 出生日期={^1980.05.23}

 Do while .T. If Eof()=.T. ?’没有满足条件的记录!’ exit else ?学号,姓名,性别,出生日期 Continue &&查找下一个出生日期为1980.05.23的记录 Endif Enddo Close all

 3.2.6 从表向数组传递数据 在Visual FoxPro中对数组大小没有什么限制,主要取决于磁盘和内存空间的大小,数组存在于内存,运行处理速度很快。 当前记录传到数组中/数组中的数据送当前记录: 有关命令: 1.  Scatter命令 命令格式: Scatter [Fields <字段名列表>] [Memo] TO <数组名> 功能:将当前表的当前复制到数组中。

 参数说明: <字段名列表>:指定要复制到数组的字段,若省略该参数,则将所有字段复制到数组中(对于备注型字段需要Memo参数)。 Memo:指定复制备注型字段,若省略该参数,则不复制备注型字段到数组。 <数组名>:指定记录要复制到的数组。 说明:若要复制的字段个数大于数组的大小,系统会自动将数组的大小扩大,若数组未定义,系统会自动创建数组。 

  2.       Gather命令 命令格式: Gather From <数组名> [Fields <字段名列表>] [Memo] 功能:将数组中的数据复制到当前表的当前记录中。 参数说明: <数组名>:指定要复制数据的数组。 <字段名列表>:指定要接收数据的字段,若省略该参数,则将对所有字段进行操作(对于备注型字段需要Memo参数)。

  3.2.7 使用SQL语言对表进行操作 结构化查询语言SQL(Structured Query Language)是目前关系型数据库中应用最广泛的语言之一,美国国家标准协会(ANSI)早在1982年就开始着手SQL的标准化工作,并公布了SQL标准,目前SQL已成为关系型数据库语言的国际标准。 SQL语言具有如下特点: l 综合统一。SQL语言集数据操纵语言(DML)、数据语言(DDL)和数据控制语言的功能于一体,能独立完成数据库的全部活动。 l 高度非过程化。用SQL语言对数据进行操作时,用户只需提出“做什么”,而不需要指出“怎么做”,也不需要指出存取路径,存取路径和操作过程都由系统自动完成。

l 面向集合的操作方式。SQL语言的操作对象、查询结果都可以是元组的集合。 SQL语言即是自主型语言,又是嵌入式语言。当作为自主型语言使用时,用户通过联机方式直接在终端上键入SQL命令对数据库进行操作;SQL作为嵌入式语言可嵌入到其它高级语言中使用,例如C语言、Visual FoxPro等。 值得注意的是,实际系统中实施的SQL语言与标准SQL语言是有一定差异的,大部分的实际系统并没有完全支持标准的SQL,但在某些方面还对标准SQL语言进行了扩充。 1.         SELECT-SQL数据查询命令

命令格式: Select <表达式1> [as 别名1],<表达式2> [as 别名2],…,<表达式n> [as 别名n] From <表1>,<表2>,…,<表m> [Into <输出目标>] [Where <条件表达式>] [group by <分组条件>] [having <条件表达式>] [order by <排序方式>]

参数说明: from:指定要查找的数据来自哪些表或视图。 Into:指出查询结果输出到哪里,若省该参数,屏幕上会出现查询窗口显示查询结果。 Where:指定查询条件,若省略该参数,则对所有的记录进行操作。 Group by:指定如何对查询结果进行分组,若省略该参数,则不对查询结果不进行分组。 Having:指定分组应满足的条件,与group by一起使用。 Order by:指定查询结果的排序方式,若省略该参数,则不对查询结果进行分组。

SELECT-SQL命令有多个子句,下面通过一些示例来说明其一般用法:  示例一: Select * from 学生基本信息表   查询“学生基本信息”表中所有字段(“*”号表示所有字段)和所有记录,如果表“学生基本信息表”没有打开,系统会自动打开,但命令执行完后表仍处于打开状态,查询结果如图3-16所示。

图3-16 Select使用示例一

示例二: Select 学号 As 学生学号, 姓名 As 学生姓名, ; 性别, 出生日期 ; From C:\学籍管理\学生基本信息表.DBF ; Where 性别=.t.   “Where”指定查询条件,“As”指定列标题,如果不指定列标题,则用字段名作列标题。示例二的查询结果如图3-17所示。

图3-17 Select使用示例二

示例三: Select 学号, 姓名, iif(性别,’男’,’女’) As 性别, ; 2002-year(出生日期) As 年龄 ; From C:\学籍管理\学生基本信息表.DBF ; order by 学号   在Select命令中可以使用函数和表达式,查询结果按学号顺序排列。示例三的查询结果如图3-18所示。

图3-18 Select使用示例三

示例四: Select 学号, 姓名; Into array array1; From C:\学籍管理\学生基本信息表.DBF ; Where 出生日期>={^1985.05.03} list memory like array* && 显示内存变量   Select命令的查询结果输出到数组array1中,示例四的运行后的结果如图3-19所示。 

图3-19 Select使用示例四

示例五: Select 学号, 姓名,max(出生日期) as 最大年龄; from C:\学籍管理\学生基本信息表.DBF 查询表中年龄最大的记录,运行结果如图3-20。

图3-20 Select使用示例五

 2.  INSERT-SQL数据插入命令 命令格式: Insert Into <表名> [(字段名1,字段名2,…,字段名n)] Values (表达式1 [,表达式2, [...,[表达式n]]]) 或 Insert Into <表名> [(字段名1,字段名2,…,字段名n)] From Array <数组名> 参数说明: Into <表名>:指定数据要插到哪一张表中。 (字段名1,字段名2,…,字段名n):指定要插入哪些字段内容,若省略该参数,则是要插入所有字段的值。

From Array <数组名>:将指定数组的内容插到表中。 下面通过示例来说明Insert-SQL命令的用法。 示例一: Use C:\学籍管理\学生基本信息表.dbf insert into 学生基本信息表(学号,姓名) ; values(‘20020889’,’罗明华’)   执行上述命令后,会在“学生基本信息表”的末尾插入一记录。

示例二: Use C:\学籍管理\学生基本信息表.dbf Dimension array1(2) Array1(1)= ‘20020890’ Array1(2)= ’张子华’ insert into 学生基本信息表(学号,姓名) from array array1 执行上述命令后,会在“学生基本信息表”的末尾插入一记录。

3.3 表的统计 对于数据库的操作来说,各种统计是经常要遇到的,Visual FoxPro为用户提供了功能强大的各种数据统计命令和函数方便用户编程。 3.3.1 记录统计 记录的统计就是统计表中的记录数有多少。 1. Count记录数统计命令 命令格式: Count [Scope] [For <条件表达式>] [To <变量名>]

参数说明: Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 For <条件表达式>:指定要查找的记录应满足的条件,若省略该参数,则是对指定记录范围内的所有记录进行统计。 To <变量名>:指定统计结果存放的变量,若省略该参数,统计结果显示在屏幕上。 注意:对于该命令,若Set delete被设置为Off,则统计的记录数包括被作了删除标记的记录;若Set delete被设置为On,则统计的记录数不包括被作了删除标记的记录。

例如: Set talk off Set delete off Use C:\学籍管理\学生基本信息表.dbf browse count to var1 Set delete on count to var2 ?’包括作了删除标记的记录数为:’,var1 ?’不包括作了删除标记的记录数为:’,var2

图3-21浏览“学生基本信息表”

从图3-21中可以看出有3个记录作了删除标记,关闭图3-21的窗体,程序显示记录的统计结果: 包括作了删除标记的记录数为: 8 不包括作了删除标记的记录数为: 4 3.3.2 累加值和平均值 累加值求某个或多个字段表达式的算术和。 1. Sum记录数统计命令 命令格式: Sum [<字段表达式列表>] [Scope] [For <条件表达式>] [To <内存变量> | To Array <数组名>]

参数说明: <字段表达式列表>:指定一个或多个要求累加和的字段表达式,表达式的值必须为数值型,若省略该参数,则是对所有数值字段求和。 Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 For <条件表达式>:指定参加求和的记录应满足的条件。 To <内存变量列表>:指定保存累加和结果的变量列表,变量个数应与<字段表达式列表>的个数相同,多个变量名之间用逗号“,”隔开。

To Array <数组名>:指定保存累加和结果的数组,若指定的数组不存在,Visual FoxPro会自动创建这个数组,若指定的数组元素不够多,Visual FoxPro会自动扩展数组元素的个数。 若省略“To <内存变量列表>”和“To Array <数组名>”参数,则计算结果直接显示在屏幕上。 例如:计算全班平均身高。 USE c:\学籍管理\学生基本信息表.dbf Sum 身高 to v1 &&计算全班身高总和 Count to v2 &&统计全班总人数 ?’全班平均身高:’,v1/v2 &&显示全班平均身高

2.  Average计算平均值命令 命令格式: Average [<字段表达式列表>] [Scope] [For <条件表达式>] [To <内存变量> | To Array <数组名>] 参数说明: <字段表达式列表>:指定一个或多个要求平均值的字段表达式,表达式的值必须为数值型,若省略该参数,则是对所有数值字段求平均值。 Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。

For <条件表达式>:指定参加求平均值的记录应满足的条件。 To <内存变量列表>:指定保存平均值结果的变量列表,变量个数应与<字段表达式列表>的个数相同,多个变量名之间用逗号“,”隔开。 To Array <数组名>:指定保存平均值结果的数组,若指定的数组不存在,Visual FoxPro会自动创建这个数组,若指定的数组元素不够多,Visual FoxPro会自动扩展数组元素的个数。 若省略“To <内存变量列表>”和“To Array <数组名>”参数,则计算结果直接显示在屏幕上。

例如:计算全班平均身高。 USE c:\学籍管理\学生基本信息表.dbf Average 身高 to v1 ?’全班平均身高:’,v1

3.4 表的索引 表中的记录是按录入的先后顺序排列的,通常是没有规律的,对于这种没有规律排列的记录,对其查找只能按从头至尾的方式进行查询,如果表中有10000个记录,则查询一个记录平均要遍历5000个记录,对于一些记录数较多的表来说,其查询时间可能非常长。 索引是对表中的记录按一定规律排序,从而可大大提高查询速度,索引并不是修改表中记录的排列顺序,而是新建一个索引文件,记录的关键字(即排序字段)在索引文件中按顺序排列。对于一个表可以建立多个索引,每个索引代表一种排列方式(如第1个索引为按学号排列,第2个索引按成绩排序等)

注意:当对表中的记录进行了修改、增加或删除操作,Visual FoxPro也会对相应的索引文件进行修改、增加或删除操作,因此对一个表不要建太多的索引,否则Visual FoxPro会在维护索引上耗费相当时间,使程序运行效率降低。 在Visual FoxPro中,索引有三种:结构复合索引(.CDX)、独立复合索引(.CDX)和独立索引(.IDX),用得最多的索引是结构复合索引(.CDX),其特点是: l 打开表时自动打开索引。 l 在同一索引文件中可以有多种排序方式,具有多个索引关键字。 l    在对表进行修改、增加或删除操作时,系统自动维护索引文件。

3.4.1 索引的建立 1.结构复合索引的建立 在Visual FoxPro的“项目管理器”中, 选择要建立索引的表(如图3-22所示),然后点击“修改”按钮,屏幕上出现“表设计器”窗口,在“表设计器”中选择“索引”卡(如图3-23所示)。

图3-22 选择要建立索引的表

图3-23 “表设计器”索引卡

在图2-23中的“索引名”输入框中输入索引名,在“类型”处选择索引类型,共有4种索引类型: l  主索引(Primary Indexs):要求其对应的索引表达式的值在表中是唯一的,不允许重复,如图3-23中的Sno就是主索引,要求表中每个学生的学号不能相同。数据库中的都可建立一个主索引,也可以没有主索引,自由表不能建立主索引。 l 候选索引(Candidate Indexs):也是具有唯一值的引索,数据表和自由表都可以建 立候选索引,一个表可以建立多个候选索引。 l         普通索引(Regular Indexs):允许索引对应的表达式值重复,一个表可建立多个普通索引。

l 唯一索引(Unique Indexs):主要是为了与以前的版本兼容,允许索引对应的表达式的值重复,但在唯一索引中只存储重复值第一次出现的记录,忽略重复值第二次和以后的记录。 在图3-23中,建立索引时还可以指定索引的排序方式:升序(↑)或是降序(↓),要改变索引的排序方式,选中要改变排序方式的索引,然后点击其左边的 即可。 对于一个索引还可以指定其“筛选条件”,要指定筛选条件,点击筛选输入框右连的按钮,屏幕上将会出现筛选“表达式生成器”窗口(如图3-24所示),可在图3-24的表达式输入筛选条件,对索引指定了筛选条件后,则只有符合筛选条件的记录才会在索引文件中出现。

图3-24 筛选“表达式生成器”对话框

在图3-23中输入完要建立的索引后,按“确定”按钮,屏幕上出现图3-25所示的对话框,在图3-25中,点击“确定”按钮,系统开始检测当前表中记录是否符合索引的设置(针对主索引和候选索引),若屏幕上出现图3-26所示的消息框,则说明当前表中的记录违返了索引唯一性要求,若没有新的窗口出现,则说明索建立成功了。

图3-25 表结构修改确认对话框 图3-26 Visual FoxPro消息框

当建立索引成功后,用户可以看到在与表相同的目录中会有一个与表同名,但扩展名为.CDX的索引文件。  2.独立索引的建立 命令格式: Index On <索引表达式> To <索引文件名> [Ascending|Descending] [For <条件表达式>][Unique] 参数说明: <索引表达式>:指定索引关键字。 To <索引文件名>:指定索引文件名。

Ascending:指定索引按升序排序。 Descending:指定索引按降序排序,若不指定排序方式,缺省是按升序排序。 For <条件表达式>:指定参加索引的记录应满足的条件,不满足条件的记录不会在索引中出现,若省略该参数,缺省是所有的记录。 Unique:指定建立唯一索引,即具有相同引索关键字的记录只有第1条记录出现在索引中。 例如,有一学生成绩表,按课程名称和学号排序。 Use 学生成绩表 exclusive

Browse && 按记录在表中的物理顺序浏览表中的记录 Index on 学号 to index1 Browse && 按索引顺序浏览表中的记录 Use &&关闭打开的表 注意:要为表建立索引文件,表必须以独占方式打开。 上面程序运行的结果如图3-27和3-28所示。

图3-27 按表中物理顺序显示记录

图3-28 按索引顺序显示表中记录

3.4.2 索引的使用 要使用索引,必须先打开索引文件,对于结构索引文件,不需要专门打开索引文件,当表打开时,其相应的索引文件就自动打开;对于独立索引文件,需要用专门命令来打开。  1.     打索引文件 l     在打开表时同时打开相应的索引文件 命令格式: Use <表名> index <索引文件名列表> 参数说明: <表名>:指定要打开的表。

<索引文件名列表>:指定同时要打开的索引文件,若有多个索引文件,则各个索引文件之间用逗号“,”隔开。 例如: Use 学生成绩 index index1 l  打开索引文件 命令格式: Set Index to <索引文件名列表> 功能:打开索引文件。

参数说明: <索引文件名列表>:指定要打开的索引文件,若要打开多个索引文件,索引文件之间用逗号“,”隔开。 说明:打开索引文件之前,必须先打开其对应的表。 当有多个索引文件同时打开时,只能有一个索引可以作为当前索引并起作用,其它索引虽然已打开,但不起作用,要设置当前索引,可用如下命令: Set Order To [<数值表达式>|<索引名>] <数值表达式>:指定索引文件列表中第几个作为当前索引。

<索引名>:指定作为当前索引的引索名。 若省略参数<数值表达式>和<索引名>,则是取消当前索引。 例如: Use 学生成绩表 index index1,index2,index3,index4 Set Order to index2 对于复合索引,不需要专门打开索引文件,当打开表时,其对应的索的索引文件也就自动打开了,但索引并不起作用,例如: Use 学生基本信息表 Browse

上面程序命令执后,显示结果如图界面3-29所示 图3-29 记录按物理顺序排列显示

若要使其按索引顺序显示,可按如下步骤操作: 选择主菜单“表”,然后选择“属性”菜单项。屏幕上出现如图3-30所示的窗口。 图3-30 工作区属性窗口

在图3-30中的“索引顺序”选择要使用的索引(如学生基本信息表 在图3-30中的“索引顺序”选择要使用的索引(如学生基本信息表.sno),系统默认的是“无顺序”,选择好后,按“确定”按钮,则屏幕显示如图3-31所示。 图3-31 按“学号”顺序显示记录

对于上面的示例,如果要在程序中使用索引,可按如下方式进行: Use 学生基本信息表 Set order to sno   建立索引文件的目的就是加快对表的查询,与表的索引查询有关的Visual FoxPro命令有2个:Find命令和Seek命令。

2.  索引查询 l   Find命令 命令格式: Find <表达式> 参数说明: <表达式>:按索引查询的值,该表达式的值只能是常量值,若表达式是非数字字符串常量,在该命令中可以不使用字符定界符;若表达式是内存变量,则必须用宏代换。

例如: Use 学生基本信息表 Set order to sno Find ‘2004082’ && 在索引上(即学号)查询索引值的 && 前7个字符为“2004082”的记录。 Xh='2004082' Find Xh && 在索引上(即学号)查询索引值的 && 前2个字符为“Xh”的记录。 Find &Xh && 在索引上(即学号)查询索引值的

Find 李平 && 在索引上(即学号)查询索引值的前4 && 个字符为“李平”的记录。 l  Seek命令 命令格式: Seek <表达式> 参数说明: <表达式>:按索引查询的值,该表达式中可以有变量,表达中的字符串常量必须使用字符串定界符。

Use 学生基本信息表 Set order to sno Seek ‘2004082’ && 在索引上(即学号)查询索引值的 && 前7个字符为“2004082”的记录。 Xh='2004082' Seek Xh && 在索引上(即学号)查询索引值的 Seek 李平 && 出错,因为没有定义变量“李平”

 3.5 多表操作 在实际应用中,一次需要操作多个表的情况是很普遍的,利用Visual FoxPro提供的工作区,可同时打开多个表,工作区是Visual FoxPro在内存中开辟的一块区域,Visual FoxPro提供了32767个工作区,其编号从1到32767,因此在Visual FoxPro可同时打开32767个表,一个工作区一次只能打开一个表,若在一个工作区中已经打开了一个表,再打开另一个表,则系统会自动关闭前面已打开的表。 3.5.1 工作区与别名 正在被使用的工作区称为当前工作区,当Visual FoxPro刚启动时,当前工作区是1号工作区,Visual FoxPro的工作区有32767个,编号从1到32767,对于1~10号工作区,

Visual FoxPro还为其取了别名,分别是A~J。 要指定当前工作区,可使用Selec命令。 Select命令格式: Select <工作区号|工作区别名>|<表别名> 参数说明: <工作区号|工作区别名>:指定要选择的工作区号(1~32767)或工作区别名(A~J)。 <表别名>:指定表别名所在的工作区为当前工作区。 说明:Select 0表示选择当前未用的最小工作区号作为当前工作区。

例如: Select 1 &&选择1号工作区作为当前工作区 USE c:\学籍管理\学生成绩表.dbf Alias cj Select E &&选择E工作区(即5号工作区)作为当前 &&工作区 USE c:\学籍管理\学生基本信息表.dbf . Select 3 &&选择3号工作区作为当前工作区 Select cj &&选择表别名“cj”所在的工作区(即1号 &&工作区)作为当前工作区

Select 学生基本信息表 &&选择表别名“学生基本信息 &&表”所在的工作区(即5号工 &&作区)作为当前工作区 3.5.2 表的关联 表的关联就是在2个或多个表之间建立某种联系,例如,有如下2个表:三好学生和学生基本信息表。

三好学生 三好学生 学号 1 3 … 学号 1 3 … 2 65 姓名 张军 王平 刘丽 李华 性别 男 出生日期 1981.06.23 1982.01.20 1981.04.15 1980.05.11 备注 体优生 班长

这2个表之间的联系是:当“三好学生”表中记录指针移动时,“学生基本信息”表的记录指针也相应移动对应的“学号”记录上,表之间的这种联系就称为表间的关联,“三好学生”表称为父表,“学生基本信息”表称为子表。关联可以是临时性的,也可以是永久性的。 1.  建立表间的临时关联 可使用Set Relation To命令来建立表间的临时关联。 命令格式: Set Relation To [<关系表达式1> into <工作区1>| <表别名1>[,<关系表达式2> into <工作区2>| <表别名2>…][into <工作区>|<表别名>][Additive]

参数说明: <关系表达式n>:指定父表与子表之间建立的关系表达式。 <工作区n>|<表别名n>:指定子表所在的工作区或表别名。 <工作区>|<表别名>:指定父表所在的工作区或表别名,若省略该数,则以当前工作区的表作为父表。 Additive:指在建立表间新的关联时保留以当前工作区中已存在的关联,若省略该参数,则在建立表间新关联时取消所有已存在的关联。 说明:在使用该命令之前必须先对子表建立索引。

例如: Select 1 Use 学生基本信息 Index on 学号 to xh Select 2 Use 三好学生 Set relation to 学号 into a Goto 2 ?学号,A->学号,A->姓名

上述程序运行后,显示结果: 3 3 王平   说明:字段变量的引用格式为 [<工作区别名>|<表别名>]->字段变量 或 [<工作区别名>|<表别名>]->字段变量 参数说明: <工作区别名>:指定要引用的字段变量所在的工作区别(取值A~J)。 <表别名>:指定要引用的字段变量的表别名。

若在引用字段变量时未指定<工作区别名>和<表别名>,则缺省为当前工作区的在的表。 用Set Relation to命令建立的表间的关联是临时的,若下一次再打开这些表,它们之间的这种关联就消失了,若还要让它们关联,必须再用Set Relation to命令来建立它们之间的关联。  2. 建立表间的永久关联 可按如下步骤建立表间的永久关联: 在Visual FoxPro集成开发环境中,新建一个数据库,然后在“数据库设计器”中新建(或将表添加到数据库中)表,并为要建立关联的父表建成立一个主索引,为为要建立关联的子表建成立一个索引,如图3-32所示。

图3-32 “数据库”设计器窗口

在图3-32中选中父表(三好学生表)的主索引(sno),按住鼠标左键不放,将鼠标拖到子表(学生基本信息表)的索引上,然后松开鼠标,此时两表间的关联就建立了(如图3-33所示) 关联线 图3-33建立表间的关联

若要修改关联,在图3-33中,先选中“关联线”,然后点击鼠标右键,在出现的快捷菜单中选择“编辑关系”项,屏幕上出现“编辑关系”对话框(如图3-34所示),可在图3-34修改表和相关表的关联关系。 图3-34 “编辑关系”对话框

在图3-34中点击“参照完整性”按钮,屏幕上出现“参照完整性生成器”窗口(如图3-35所示),在“参照完整性生成器”窗口中可设置关联表间的更新规则、删除规则和插入规则。

图3-35“参照完整性生成器”窗口