2010-5-20 Visual FoxPro 6.0程序设计 1
学习要点
1、查询向导和查询设计器的使用方法;
2、单表查询和交叉表查询;
3、查询设计器中各选项卡的功能和使用方法;
4、本地视图和远程视图;
5、视图向导和视图设计器的使用方法;
6、使用视图。
第 6章 查询与视图
2010-5-20 Visual FoxPro 6.0程序设计 2
第 6章 查询与视图
6.1 用查询向导设计查询
6.2 用查询设计器设计查询
6.3 创建视图
6.4数据库视图的操作
小 结
返回 退出
6.5 利用视图更新数据
6.6 利用视图处理自由数据
2010-5-20 Visual FoxPro 6.0程序设计 3
6.1 用查询向导设计查询
6.1.1 设计单表查询
6.1.2 建立交叉表
返 回 退 出
2010-5-20 Visual FoxPro 6.0程序设计 4
6.1.1 设计单表查询
查询向导可以引导用户快速设计一个查询。下面将示例使用查
询向导设计一个简单的单表查询:从 GXGLXT数据库的 Student
表中查询系部代号为,04”且是 99级的所有学生的信息。
操作过程如下:首先从“项目管理器”开始,选择 【 数据 】 卡
片中的“查询”,然后单击 【 新建 】 按钮,则出现设计查询的方
式选择对话框。
单击
2010-5-20 Visual FoxPro 6.0程序设计 5

择GX
GL
XT




的Stu
de
nt


























单击
查询向导 ——字段选取
2010-5-20 Visual FoxPro 6.0程序设计 6
从中选择
Student.系部
代号
0
在此输入值
4
取默认值
从中选择
“包含”
在此输入值98
单击
单击 【 预览 】 按钮可以显示查询结果。根据要求,设置条件如上图。其中,
虽然表中没有年级字段,但可通过“学号”得到年级(学号的前二位为年
级)。



导——




2010-5-20 Visual FoxPro 6.0程序设计 7
选择排序字段 单击 【 添加 】 选择排序方式
调整排
序顺序
移动按钮
单击



导——




2010-5-20 Visual FoxPro 6.0程序设计 8
查询向导 ——限制记录
限制查询结
果中所包含
的记录数
说明:查询结果中所包含
的记录数限制共有四种方
式:
1、“部分类型”中选择
“所占记录百分比”,
“数量”中选择“所有记
录”,查询结果集中包含
全部记录。
2、“部分类型”中选择
“所占记录百分比”,
“数量”中选择“部分
值”,再在“微调框”中
设置数值,查询结果集中
包含指定数值百分数的记
录。3,“部分类型”中选择“记录号”,“数量”中选择“所有记录”,查询结果集中包含全部记录。
4,“部分类型”中选择“记录号”,“数量”中选择“部分值”,再在
“微调框”中设置数值,查询结果集中包含指定数值的记录数。
单击
取默认值,
查询结果
集中包含
全部记录
2010-5-20 Visual FoxPro 6.0程序设计 9
查询向导 ——完成
将查询以文
件的形式
(,QPR)保
存到一个指
定的目录中。
将查询保存到一
个指定的目录中
并运行该文件。
利用查询向导设计的查询功能有限,可以使用查询设计器修改它。
单击,可以查看查询结果集中的全部数据
打开帮助文件 取消所建立的查询 返回到向导的上一步
结束向导,
完成查询设
计。
单击
2010-5-20 Visual FoxPro 6.0程序设计 10
保存设计的查询
目录选择下拉列表框
文件名输入文本框
文件类型选择下位列表框
在“文件名输入文本框”中
输入,Stud_query”后,单击
【 保存 】 按钮,结束查询设
计过程。
在项目管理器中
的“数据”选项
中的查询项下产
生了一个查询文
件 返回
2010-5-20 Visual FoxPro 6.0程序设计 11
6.1.2 建立交叉表
如果在上文所述的建
立查询的第一步选择
“交叉表向导”,则可
以建立交叉表。下面通
过示例来介绍如何建立
交叉表。用 Grade表中的
数据建立一个交叉表,
以显示每个学生所有课
程的总成绩。 Grade表
中的部分数据如:
前面的设计过程同以
上内容,但是在第二步
需要确定交叉表的行和
列 。
2010-5-20 Visual FoxPro 6.0程序设计 12
交叉表设计向导 ——字段选取
选择数据库和表 选定字段
单击
单个字段选定按钮
全部字段选定按钮 单个字段撤消按钮
说明:在这
一步先在“
数据库和表
”一选择一
个数据库,
再选择用以
建立交叉表
的数据表,
然后再从可
用字段列表
框中选择要
用的字段,
交叉表只用
三个字段,
这一步可多
选 字段。
全部字段撤消按钮 单击
2010-5-20 Visual FoxPro 6.0程序设计 13
交叉表向导 ——定义布局
说明:
( 1) 行, 将要加入到
交叉表中的第一个字
段名, 本示例中选择
字段, 学号, ;
( 2) 列, 将要加入到
交叉表中的从第二个
字段开始的若干个字
段的字段名, 注意这
些从源表中选择的数
据不能超过 254个 。 本
示例中选择字段, 课
程代号, ;
( 3)数据,对应行和
列的运算结果,本示
例中选择“课程成
绩”。
按提示操作:从可用字段列表框中将“学号”字
段拖入“行”框,将“课程代号”拖入“列”框,
将“课程成绩”拖入“数据”框。
单击
2010-5-20 Visual FoxPro 6.0程序设计 14
交叉表查询向导 ——加入总结信息
说明,这一步的操作,
决定在生成的交叉表中
要加入的一个字段的内
容。
( 1)求和:求出对应行
和列的数据字段的和;
( 2)计数:求出对应行
和列的数据字段的数目;
( 3)平均值:求出对应
行和列的数据字段的平
均值;
( 4)最大值:求出对应
行和列的数据字段的最
大值;
( 5)最小值:求出对应
行和列的数据字段的最
小值。
本示例中选择“求和”运算。
如果不想加入总结信息,可
以在“分类汇总”中选择
“无”。
单击
2010-5-20 Visual FoxPro 6.0程序设计 15
交叉表向导 ——完成
将交叉表查询以文件的
形式(,QPR)保存到一
个指定的目录中。
将交叉表查询保存到一
个指定的目录中并运行
该文件。
将交叉表查询保存到一个指定的目录中并打开“查询设计器”修改
它。
对于值为空的记录是否以,NULL.填充 说明, 系统默认值是
“保存交叉表查询”和
“显示 NULL值”。
选择“保存并运行
交叉表查询”后单

2010-5-20 Visual FoxPro 6.0程序设计 16
交叉表保存及运行结果
按上一步的操作完成后,进行到“另存为 …” 对话框中,将该
查询取名为 Grad_Query,然后保存在默认的目录中。
保存后,系统进入到数据查询过程,稍候系统将查询结果显示
出来。如:
从中可以看到,凡是没有数据的栏,就被,NULL.值填充,且有
许多数据丢失。
交叉表可以用数据过滤处理,在下一节中介绍。
返回
2010-5-20 Visual FoxPro 6.0程序设计 17
6.2 用查询设计器设计查询
6.2.1 确定各表间的联接关系
退 出
6.2.2 选定查询字段
6.2.3 筛选记录
6.2.4查询结果排序
6.2.5 建立分组查询
6.2.6 杂项的设置
6.2.7 定向输出查询结果
6.2.8 运行查询
返 回
2010-5-20 Visual FoxPro 6.0程序设计 18
6.2 用查询设计器设计查询
前面学习了如何使用 VFP6中文版提供的查询向导快速的设计一
个查询。但是在实际应用中,查询向导设计的查询往往不能满足
需求。这时还可以采用查询设计器方便灵活的设计各种查询,也
可以先用查询向导设计一个简单的查询,再在查询向导中打开并
修改它。
将上一节建立的 Grad_Query交叉表查询,用, 查询设计器, 进
行修改,使用之包含尽可能少的空栏。
可以通过以下所提供的多种方法之一来打开查询设计器:
■ 从, 项目管理器, 启动查询设计器
1、在, 项目管理器, 中选择, 数据, 选项卡,再选取, 查询,
项,再单击 【 新建 】,进入查询设计方式选择对话框后单击 【 新
建查询 】, 则启动“查询设计器” 。
2、在, 项目管理器, 中选择, 数据, 选项卡,从, 查询, 项
中选择一个已存在的查询文件,再单击 【 修改 】,也 启动“查询
设计器” 。
2010-5-20 Visual FoxPro 6.0程序设计 19
■ 从 【 文件 】 菜单启动查询设计器
选择系统菜单中的 【 文件 】 |【 新建 】 命令,在“新建”对话框中
选中“文件类型”下的“查询”单选项,再单击右边的 【 新建文
件 】 按钮,也可启动“查询设计器”;
■ 使用
CREATE
QUERY
命令也可
启动“查
询设计器”
现采用新
建方式启
动“查询
设计器”
2010-5-20 Visual FoxPro 6.0程序设计 20
查询设计器下部分的窗口中有几个选项卡,其含义简介如下:
( 1), 字段,,用来选定包含在查询结果中的字段;
( 2), 排序依据,,用来决定查询结果输出中记录或行的排列顺序;
( 3), 联接,,用来确定各数据表或视图之间的联接关系;
( 4), 筛选,,相当于命令 SET FILTER TO,利用过滤的方法查找一个特定
的数据子集;
( 5), 分组依据,,所谓分组就是将一组类似的记录压缩成一个结果记录,
这样就可以完成基于一组的计算。
要设计一个查询文件,首先必须明确查询的目的是什么,即想要得到哪些数
据,并以什么方式存在;或者想要得到满足某些条件的特定记录,或者想要
知道某些记录的字段值组合成的表达式按某一方式输出。明确了输出的数据
后,就可以开始设计查询了,一般要通过以下几个步骤进行:
( 1)启动查询设计器;
( 2)选择出现在查询结果中的字段;
( 3)设置选择条件来查找可给出所需结果的记录;
( 4)设置排序或分组选项来组织查询结果;
( 5)选择查询结果的输出类型:表、报表、浏览等;
( 6)运行查询。
返回
2010-5-20 Visual FoxPro 6.0程序设计 21
6.2.1 确定各表间的联接关系
下面将通过一个示例来介绍创建一个含有多个表中信息的查询。
例如在 GXGLXT数据库中有三个表,Student,Grade,Courses,
现在想知道学号前四位是 9904和 9804的所有学生考试的成绩。
当在多个表或视图间进行查询时,需要指出这些表或视图间的
联接关系。如前面所述,启动查询设计器,在, 添加表和视图,
对话框中从, 数据库, 中选择 GXGLXT库,在, 数据库中的表, 中
选择 Student表,单击 【 添加 】 按钮,再选择 Grade表,再单击
【 添加 】,此时系统自动弹出
一个, 联接条件,,询问
是否根据两表中都有的
,学号, 字段建立内部联
接,单击, 确定,,两表
间就有了一条连线,代表
它们之间的联接。然后再
添加 Courses表,最后关闭
对话框。
2010-5-20 Visual FoxPro 6.0程序设计 22
在“查询设计器”中选择“联接”选项卡,如图:
在 VFP6中表间的联接有四种类型,分别是:
2010-5-20 Visual FoxPro 6.0程序设计 23
( 1) Inner Join:内部联接,指定只有满足联接条件的记录包含在
结果中,此类型是默认的,也是最常用的;
( 2) Right Outer Join:右联接,指定满足联接条件的记录,以及
满足联接条件右侧的表中记录(即使不匹配联接条件)都包含在
结果中;
( 3) Left Outer Join:左联接,指定满足联接条件的记录,以及满
足联接条件左侧的表中记录(即使不匹配联接条件)都包含在结
果中;
( 4) Full Join:完全联接,指定所有满足和不满足联接条件的记
录都包含在结果中。
如果想修改各表间的联接,双击查询设计器上部窗口表之间的连
线,系统将弹出“连接条件”对话框;或者通过打开查询设计器
下部的“联接”选项卡进行。一般不应随便更改连接条件,不然
会与实际数据间的关系不符。
,条件, 列表中包含如下几项:
( 1) =:指字段值与实例相等;
2010-5-20 Visual FoxPro 6.0程序设计 24
( 2) LIKE:表示“字段名”栏中给出的字段值与“实例”栏
中给出的文本值之间执行不完全匹配,它主要针对字符类型。例
如,如设置查询条件为,Student.学号 LIKE 9904”,那么诸如
“学号”字段前四位为 9904的记录都满足该条件;
( 3) ==:表示在, 字段名, 栏中给出的字段值与, 实例, 栏中
给出的文本值之间执行完全匹配检查, 它也主要是针对字符类型
的 。
( 4) >:即为, 字段名, 栏中给出的字段的值应大于, 实例,
栏中给出的值;
( 5) >=:即为, 字段名, 栏中给出的字段的值应大于或等于
,实例, 栏中给出的值;
( 6) <:即为, 字段名, 栏中给出的字段的值应小于, 实例,
栏中给出的值;
( 7) <=:即为, 字段名, 栏中给出的字段的值应小于或等于
,实例, 栏中给出的值;
( 8) Is Null:指定字段必须包含 Null值;
( 9) Between:即为输出字段的值应大于或等于, 实例, 栏中的
2010-5-20 Visual FoxPro 6.0程序设计 25
最小值,而小于或等于“实例”栏中的最大值;
( 10) IN( 在 … 之中 ),即为输出字段的值必须是, 实例, 栏
中所给出值中的一个, 在, 实例, 栏中给出的各值之间以逗号分
隔 。
此外,, 联接, 选项卡中的, 否, 列用于指定,NOT.条件,, 逻
辑, 列用于设置各联接条件和筛选条件之间的逻辑关系
( 无,,AND.和,OR.),, 大小写, 列用于指定是否区分大小写 。
下方的, 插入, 和, 移去, 按钮分别用于增加或移去查询条件 。
最后, 在设置筛选条件时, 我们应注意如下几点:
( 1) 备注字段和通用字段不能用于设置查询条件;
( 2) 逻辑值的前后必须使用句点号, 如,T.;
( 3) 只有当字符串与查询的表中字段名相同时, 要用引号将字
符串括起来, 否则不需要用引号将字符串括起来;
( 4) 日期不必用花括号括起来 。
返回
2010-5-20 Visual FoxPro 6.0程序设计 26
6.2.2 选定查询字段
根据建立查询的目的,选择查询结果中应包含的字段。操作方
法与用向导设计查询的方法相同。在本示例中先在“查询设计器”
中选择“字段”选项卡,然后从可用字段列表框中选择,Student.
学号,Student.姓名,Courses.课程名称,Grade.课程成绩,如图。
选择一个字段 单击 【 添加 】 选定的字段列表
重复操作添加 Student.姓名,Courses.课程名称,Grade.课程成绩
返回
2010-5-20 Visual FoxPro 6.0程序设计 27
6.2.3 筛选记录
选择表中符合条件的一部分记录而不是全部记录是查询的重要
任务。此例要求从所有学生的成绩信息中选出“学号”前四位为
,9904”和,9804”的所有学生的成绩,可以利用查询设计器中的
“筛选”选项卡。“筛选”选项卡可确定用于选择记录的字段和
比较准则,以及输入与该字段进行比较的示例值。
选择筛选字段 设置筛选条件 输入筛选实例 设置条件逻辑是否区分大小写
在字段名下的下拉选择框中选择,Grade.开课学期”,在“条
件”下的下拉选择框中选择,=”,在“实例”下的文本框中输入
“第 1学期”,返回
2010-5-20 Visual FoxPro 6.0程序设计 28
在“逻辑”下的下拉选择框中选择,AND”,然后再在字段名下
的下拉选择框中选择,Student.学号”,在“条件”下的下拉选
择框中选择,In”,在“实例”下的文本框中输入,9904,9804”
( 请注意中间的“,”是 En状态下输入的 )。
6.2.4查询结果排序
排序决定了查询输出结果中记录或行的先后顺序,我们可以通
过“排序依据”选项卡设置查询的排序次序,方法同在用查询向
导设计查询介绍的一样,首先从“选定字段”框中选定要使用的
字段,
返回
2010-5-20 Visual FoxPro 6.0程序设计 29
并把它们移到“排序条件”框中,然后利用“排序选项”(从
中选择升序或降序)来设置排序条件。本例中设置 Student.学号,
升序为排序依据。
选择一个字段 单击 【 添加 】 选定的字段列表
如果还需要添加用于排序的字段,可以重复以上的操作步骤。
返回
2010-5-20 Visual FoxPro 6.0程序设计 30
6.2.5 建立分组查询
所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可
完成基于一组记录的计算。分组在与某些累计功能联合使用时效
果最好,例如 SUM(),COUNT(),AVG()等。
如果不想压缩结果记录,则不必设置它。在此例中不设分组查询。
如果想求各门课程的平均成绩,可以用“课程名称”进行分类查
询。
选择一个字段 单击 【 添加 】 选定的字段列表
2010-5-20 Visual FoxPro 6.0程序设计 31
操作步骤如下:
( 1)在查询设计器的“字段”选项卡中,单击“函数和表达式”
右边的按钮,出现“表达式”生成器;
( 2)在“数学”下拉式列表框中双击 AVG( expN),在“来源
于表”下拉框中选择 Grade表,在“字段”列表框中双击“课程
成绩”,单击 【 确定 】 。即在“函数和表达式”框中自动生成了
,AVG(Grade.课程成绩 )”这个表达式,用以计算 Grade表中课程
成绩的平均值。
( 3)单击“添加”按钮,该表达式被添加到“选定字段”列表
框中。将来查询结果中就会有一列数据求平均值;
( 4)单击“分组依据”选项卡,进入“分组依据”窗口,在
“可用字段”中选择 Grade.课程名称,再单击 【 添加 】 按钮,该
字段即成为分组字段。
运行查询后的结果
返回
2010-5-20 Visual FoxPro 6.0程序设计 32
6.2.6 杂项的设置
经过以上五个步骤,基本上已生成了一个比较全面的查询。接下
来还可以通过查询设计器中的“杂项”选项卡做最后处理。
单击“杂项”选项卡,可以看到其间包括“无重复记录”、“交
叉数据表”、“全部”、“百分比”这四个复选框和一个微调按
钮。
选中“无重复记录”复选框表示对于查询结果如果存在重复记录,
则只取相同记录中的一个。选中此项,在查询生成器的 SQL语句
中会自动加上限定词 Distinct,表示去掉重复记录。
2010-5-20 Visual FoxPro 6.0程序设计 33
当输出的字段只有三项时,“交叉数据表”复选框为可选状态,
否则为不可选状态。选中“交叉数据表”复选框表示将查询的
结果以交叉表的形式传递给其它报表或表。三项查询字段分别
表示 X轴,Y轴和图形的单元值。
如,在本示例中,将前面已加入到“选定字段”中的 Student.
学号字段移去,并按 Student.姓名,Courses.课程名称和 Grade.课
程成绩的顺序调整字段在“选定字段”列表框中的顺序,然后
在“杂项”选项卡中选中“交叉数据表”,同时将“分组依据”
中的,Grade.课程代号”取消,其它设置不变。
从图中可以看到“交叉数据表”成为了可选。现选中“交叉数据表”项,
如图:
设置
返回
2010-5-20 Visual FoxPro 6.0程序设计 34
6.2.7 定向输出查询结果
查询检索的信息,可以输出到不同的目的地,以用作不同的用途。
如果没有选定输出的目的地,查询结果将显示在浏览窗口中。查
询输出目的可以是浏览窗口、临时表、表、图形、屏幕、报表、
标签等。选择结果的去向方法如下:
单击“查询设计器工具”中的 【 查询去向 】 按钮,或者从 【 查
询 】 菜单中选择 【 查询去向 】,可看到如图所示的“查询去向”
对话框。
对话框中的按钮含义如下:
2010-5-20 Visual FoxPro 6.0程序设计 35
【 浏览 】,在浏览窗口中显示查询结果,这是查询缺省设置;
【 临时表 】,将查询结果存储在一个临时只读表中。多次查询
的结果可放在不同的表内。该表可用于浏览数据,制作报表等,
直到用户关闭它们;
【 表 】,将查询的结果保存在一个命名的表(,DBF )中,此时
查询的结果是真正的存放到磁盘上的,多次查询的结果可放在
不同的表内;
【 图形 】,使查询结果可用于 Microsoft Graph(包含在 VFP6中
的一个独立的应用程序)中制作图表;
【 屏幕 】,在 VFP6主窗口或当前活动输出窗口中显示查询结果;
【 报表 】,将输出送到一个报表文件(,FRX)中;
【 标签 】,将输出送到一个标签文件(,LBX)中。
选定一个去向,按一定的步骤设置一些属性,然后单击 【 确
定 】 按钮,系统就将按意图放置查询结果。
假设本例将查询结果保存到临时表中,取临时表名为“查询
1”。
返回
2010-5-20 Visual FoxPro 6.0程序设计 36
6.2.8 运行查询
在完成了查询的设计工作并指定了结果输出去向后,可通过以
下五种方式之一运行查询:
■在查询设计器区域内单击右键,在弹出菜单中选择“运行查
询”;
■在“项目管理器”中选定查询的名称,然后选定“运行”按
钮;
■在“查询”菜单中选择“运行查询”:
■在命令窗口中键入 DO 查询名,qpr。
■单击系统常用菜单上的“运行”按钮。 本例中按前述步骤设置后,单
击系统菜单上的“运行”按钮运
行交叉表查询,并将查询结果保
存到临时表“查询 1”中,然后再
在浏览窗口中单击 【 显示 】 |【 浏
览“查询 1”】,结果如右表。
返回
2010-5-20 Visual FoxPro 6.0程序设计 37
6.3 创建视图
6.3.1 创建本地视图
6.3.2 用已有的 SQL SELECT语句创建视图
6.3.3 创建远程视图
返回 退出
2010-5-20 Visual FoxPro 6.0程序设计 38
6.3.1 创建本地视图
视图可以通过向导和设计器两种方法来创建。
1,利用向导创建本地视图
用本地视图向导创建本地视图,可采取以下方式:
方式一,
( 1)在主窗口下打开 【 工具 】 菜单,选择 【 向导 】 菜单命令。
( 2)再选择 【 全部 】 菜单,出现 【 向导选取 】 对话框,如图
单击滑动按钮
选择“本地视图向导”
单击 【 确定 】
进入到“本地视图向
导‘步骤 1——字段选
取’”
2010-5-20 Visual FoxPro 6.0程序设计 39
方式二,
( 1)在主窗口下打开 【 文件 】 菜单,选择 【 新建 】 菜单命令。
( 2)选择“视图”,再单击 【 向导 】,将弹出 【 本地视图向导 】
对话框。
( 3)然后按照向导屏幕上的指示操作。
方式三,
( 1)在项目管理器中选定数据库。
( 2)选定本地视图,单击 【 新建 】 按钮。
( 3)单击 【 视图向导 】 按钮
( 4)然后按照向导屏幕上的指示操作。
方式四,
( 1)打开数据库设计器,打开 【 数据库 】
菜单。
( 2)选择 【 新建本地视图 】,再单击
【 视图向导 】 按钮。
( 3)然后按照向导屏幕上的指示操作。
2010-5-20 Visual FoxPro 6.0程序设计 40
本地视图向导:步骤 1——字段选取
说明,按照上述几种
方式,可以快速建立
本地视图,但要强调
的是,在项目管理器
中创建或使用视图时,
项目管理器会自动打
开数据库。如果要使
用项目以外的表或视
图,则必须先打开数
据库或事先确认数据
库在作用范围内 。
本地视图向导对话框如图,可以看到,创建视图大体要经过以
下步骤:
( 1)字段选取。选择数据库,数据库中的表和表中的字段。如
果当前已经打开了一个数据库,则第一步的对话框中显示的
2010-5-20 Visual FoxPro 6.0程序设计 41
是创建当前数据库的视图,也可以选择其它的数据库。
( 2)关联表。建立数据库中表与表之间的关系。
( 3)包含记录。指定包含表中的全部记录还是仅匹配的记录。
( 4)筛选记录。选定符合条件的记录。
( 5)排序记录。为选定的记录按照某一字段进行排序。
( 6)限定记录。定制显示一定数量的记录。
( 7)完成视图。选择保存视图后浏览还是修改。
例:创建包含 Grade表和 Courses表的本地视图“视图 1”。
选择表 Grade
单击全部
添加按钮
选择 Courses表
单击单个添加按
钮,添加课程名、
学时数、学分数
字段选择完成后,单击 【 下一步 】,步骤 2——为表建立关系。
2010-5-20 Visual FoxPro 6.0程序设计 42
本地视图向导:步骤 2——为表建立关系
父表字段选择
下拉选择框
子表字段选择
下拉选择框
说明:在这一步要
建立用来建立本地
视图的表间的关系。
1、先在父表字段选
择下拉选择框中选
择要用来建立关系
的主关键字;
2、再在子表字段选
择下拉选择框中选
择用来建立关系的
子表关键字;
3、单击 【 添加 】,
将设定关系添加到
关系列表框中。
上面的字段符合要求,单击 【 添加 】
关系设置完成后单击 【 下一步 】 进入到步骤 2a——字段选取对话框。
2010-5-20 Visual FoxPro 6.0程序设计 43
本地视图向导:步骤 2a——字段选取
生成的本地视图中只包
含表中关系相匹配的记
录,对应于关系中的内
联接的设置结果。
生成的本地视图中包含
Grade表中的全部记录和
子表中关键字段相匹配
的记录,对应于关系中
的左联接的设置结果。
生成的本地视图中包含
Courses表中全部记录和
父表中关键字段相匹配
的记录,对应于关系中
的右联接的设置结果。
生成的本地视图中包含表中所有的记录,对应于关
系中的完全联接的设置结果。
本例中选用默认值:仅包含匹配的行。然后单击 【 下一步 】,进入步骤 3—
—筛选记录。
2010-5-20 Visual FoxPro 6.0程序设计 44
本地视图向导:步骤 3——筛选记录
说明,本地视图
向导的筛选记录与
查询向导的筛选记
录的方式类似。
在本例中不筛选
记录。
单击 【 下一步 】,进入到本地视图向导的步骤 4——排序记录。
2010-5-20 Visual FoxPro 6.0程序设计 45
本地视图向导:步骤 4——排序记录
说明,在这一步
中设置在本地视图
的记录顺序。
本例中可先按
“学号”排序,学
号相同的再按“课
程代号”排序。
操作方法与建立
查询的记录排序方
法相同。先在“可
用字段”列表框中
选择“学号”,然后单击 【 添加 】,再选择“课程代号”,再单击 【 添
加 】 如上图。
排序字段及顺序设置后单击 【 下一步 】,进入本地视图向导:
步骤 4a——限制记录。
2010-5-20 Visual FoxPro 6.0程序设计 46
本地视图向导:步骤 4a——限制记录
限制记录的方法与建立查询的限制记录的方法完全相同。在
本例中仍保持在本地视图中包含所有的记录,因而取默认值,
直接单击 【 下一步 】,进入本地视图向导:步骤 5——完成。
在第 5步中的操作方法也与建立查询的方法相同,现选择“保
存本地视图并浏览”,然后单击 【 完成 】 。弹出“视图名”对
话框。 在“视图名”文本框中输入“视图 1”。
输入视图名后单击 【 确
认 】 按钮,系统显示所建
立的本地视图的结果。本
地视图向导结束。
2010-5-20 Visual FoxPro 6.0程序设计 47
2、利用视图设计器创建本地视图
通过本地视图向导建立数据库视图虽然方便,快捷,但这仅对入门者如此,
何况用视图向导建立数据库视图最终还要依赖视图设计器。因此,倾向独立
进行开发的程序员来说,仅仅学会使用向导是远远不够的,还应学会使用视
图设计器的
强大功能来
创建视图。
( 1) 进入
视图设计器
进入视图设
计器的方法
与进入查询
设计器的方
法基本相同,
下面以新建
视图的方式
进入视图设
计器。
2010-5-20 Visual FoxPro 6.0程序设计 48
启动视图设计器方法
新建一个视图可按以下步骤进入视图设计器:
■选择 【 文件 】 |【 新建 】 命令,单击“视图”单选框,再单击
【 新建文件 】 按钮。
■在数据库设计器中,选择 【 数据库 】 |【 新建本地视图 】 或单
击数据库设计器的快捷菜单中的 【 新建本地视图 】 |【 新视图 】
按钮。
■在项目管理器中,单击“数据”选项卡,在列表框中选定“本
地视图”,再单击 【 新建 】 按钮,单击 【 新建视图 】 按钮。
修改一个视图可按以下步骤进入视图设计器:
■ 在数据库设计器窗口中, 单击选定需要修改的视图, 选择 【 数
据库 】 |【 修改 】 命令 。
■ 在数据库设计器窗口中, 右击需要修改的视图, 在出现的快捷
菜单中选择 【 修改 】 命令 。
■在项目管理器中,单击 【 数据 】 选项卡,在列表框中选定需要
修改的视图,单击 【 修改 】 按钮。
2010-5-20 Visual FoxPro 6.0程序设计 49
“视图设计器”工具栏说明
添加表 移去表 添加联接 显示 SQL窗口 最大化上部窗格
添加表:显示“添加表或视图”对话框,从而可以向设计器窗口
添加一个表或视图
移去表:从设计器窗口的上窗格中移去选定的表。
添加联接:在视图中的两个表之间创建联接条件
显示 /隐藏 SQL窗口:显示或隐藏建立当前视图的 SQL语句
最大化 /最小化上部窗口:放大或缩小视图设计器的上窗格
2010-5-20 Visual FoxPro 6.0程序设计 50
( 2)从表中选择所需字段
在进行本地视图设计器之前,先建立 Classzc表和 Department表,
表结构和数据如下:
2010-5-20 Visual FoxPro 6.0程序设计 51
通过上述方式之一打开视图设计
器,在进入设计器之前,需要选定
数据库和表,现选定 GXGLXT数据
库,如右图:
从中选定表 Classzc并单击 【 添加 】
按钮,然后单击 【 关闭 】 按钮,启
动视图设计器。
2010-5-20 Visual FoxPro 6.0程序设计 52
视图设计器
进入视图设计器后,第一步先需要选定字段,选定字段可直
接通过字段选项卡进行。其操作方法与查询设计器中选择字段
的方法相同。
2010-5-20 Visual FoxPro 6.0程序设计 53
从“可用字段”列表框里选定 Classzc.班级简称字段,单击
【 添加 】 按钮或双击该字段,则 Classzc,班级简称字段将会出
现在右边的“选定字段”列表框中。本次建立的视图里,还需
要选定 Classzc.学习性质,Classzc.学制二个字段。它们选定的
方法与选定 Classzc,班级简称字段一样。如果需选定字段是
“可用字段”列表框中的所有字段,可以单击 【 全部添加 】 按
钮,这样就把所有字段添加到了“选定字段”列表框中去了,
可以通过 【 移去 】 按钮将其移出来。如果需要全部移出,可以
利用 【 全部移去 】 按钮快速移出。
要将表中的字段添加到“选定字段”列表框中,除了上述方
法外,还可以将鼠标指向视图设计器上部窗口中的表窗口中的
字段上,按住鼠标左键或右键拖动一个字段到“选定字段”列
表框,该字段就被加入到了“选定字段”列表框中。还可以通
过双击字段名将其加入到“选定字段”列表框。表窗口中的*
代表表中的全部字段,它也是可以拖动或双击的。若要从“选
定字段”列表框中移去字段,也可以使用鼠标拖动或双击。
2010-5-20 Visual FoxPro 6.0程序设计 54
“字段”选项卡还有一个 【 属性 】 按钮和一个“函数和表达式”
文本框。只要“选定字段”列表框中有一个值,【 属性 】 命令按
钮就成为可选的了。选择 【 属性 】 后,出现图:
2010-5-20 Visual FoxPro 6.0程序设计 55
属性设置可分为五种类型:字段有效性、显示、匹配字段到类、
数据匹配和注释。其中字段有效性、显示、匹配字段到类和注
释在第 3章中介绍数据表设计时已经作过说明,视图设计和数据
表设计在字段属性上基本类似。
“函数和表达式”文本框及其按钮:
“函数和表达式” 文本框用于输入一个函数和表达式,具体操
作只需单击“函数和表达式”文本框后的对话按钮,在随后出
现的表达式生成器中书写函数或表达式。此选项的功能是为了
生成一个虚拟的字段。
后面的创建步骤与本章前述的用查询设计器设计查询相似,
在此不一一阐述。
( 3) 建立多表关联
前面主要是针对单一的本地表建立视图,虽然很容易,但它
的实际功能不大。因为在实际开发中,系统的数据库很复杂,
表的关联性很强,用户关心的往往是一些复杂的数据,因此需
要建立多表视图。
2010-5-20 Visual FoxPro 6.0程序设计 56
从定义上讲,多表视图指的是:视图中的字段来源于两个或两个
以上的表。但是,在视图中表间的关系既不像数据库中的关系是
永久的,也不像表中的关系是暂时的,它不靠索引字段进行联接,
而是通过定义一个联接表达式来进行联接,表间的关系是松散的。
可以按如下办法建立表间的联接:
■在视图设计器中单击“联接”选项卡即可设置多表间的关联。
■在“添加表或视图”对话框中,选定表后,单击 【 添加 】 按钮,
当视图设计器中的表在两个及以上时,视图设计器就会为选定的
表建立关联。
说明,用以上的方法建立多表关联,必须有多个表添加到了视图
设计器中 。后续的操作方法与设计多表查询相似,除不同点外,
相同的部分这里不再讲述。
下面我们来建立表 Department,Classzc,Student,Courses和
Grade五表之间的关联的视图,起名为视图 3。
2010-5-20 Visual FoxPro 6.0程序设计 57
( 4)与设计多表查询不相同的部分 ——更新条件
视图的最大特点在于能用视图更新数据,这也是建立视图与建立
查询的主要区别,也是视图的重点所在。视图设计器中的“更新
条件”选项卡可以用来设置允许视图更新表字段的条件。
2010-5-20 Visual FoxPro 6.0程序设计 58
“更新条件”选项卡选项包括如下内容:
■,表”:指定视图所使用的哪些表可以修改。选择这个下拉列
表框中的选项,可以确定哪些表中的字段可以在“字段名”列
表框中,以便设置更新条件。此列表中所显示的表都包含了
“字段”选项卡“选定字段”列表中的字段。
■ 【 重置关键字 】,这个按钮作用是从每个表中选择主关键字
字段作为视图的关键字字段。每个主关键字字段是在“字段名”
列表中的、在钥匙符号下面打一个对钩的字段,关键字字段可
2010-5-20 Visual FoxPro 6.0程序设计 59
可用来使视图中的修改与表中的原始记录相匹配。
■ 【 全部更新 】,可以从字段名文本框中看到一些字段前的铅
笔符号下打了一个对钩,这表明这些字段可以更新。在这个按
钮中可以选择除了关键字字段以外的所有字段来进行更新,并
在“字段名”列表的铅笔符号下打一个对钩。
■,发送 SQL更新,,指定是否将视图记录中的修改传送给原
始表 。 如果选择了这个复选框, 将把在视图中对记录字段的修
改返回到源表中 。
■,字段名, 列表框:显示了从, 表, 列表框中所选的表中的
字段, 并用来输出这些字段, 不过这些字段都是可以更新的 。
在字段文本框中共有下列 3种方式字段:
● 关键字段 ( 使用钥匙符号作标记 ), 指定该字段是否为关键
字段 。
● 可更新字段 ( 使用铅笔符号作标记 ), 指定该字段是否为可
更新字段 。
● 字段名, 显示可标志为关键字字段或可更新字段的输出字段
名 。
2010-5-20 Visual FoxPro 6.0程序设计 60
■,SQL WHERE 子句包括”:
●“关键字段”:如果在原始表中有一个关键字字段被改变,设置 WHERE子
句来检测冲突,对于由另一用户对表中原始记录的其他字段所做修改不进行
比较。
●“关键字和可更新字段”:设置 WHERE子句来检测由某一用户修改了任何
可更新的字段的冲突。
●“关键字和已修改字段”:如果从视图首次检索(默认)以后,关键字字
段或原始表记录的已修改字段中,某个字段做过修改,设置 WHERE子句来检
测冲突。
●“关键字段和时间戳”:如果自原始表记录的时间戳首次检索以后,它被
修改过,设置 WHERE子句来检测冲突。只有当远程表有时间戳列时,此选项
才有效。
■“使用更新”:此单选按钮组用于指定字段如何在后端服务器上进行更新。
●,SQL DELETE然后 INSERT”:指定先删除原始表记录后,再创建一个新
的在视图中被修改的记录。
●,SQL UPDATE”:指定用视图字段中的内容来修改原始表中的字段。
具体说明如何设置更新条件详见 6.5在视图中更新数据。
返回
2010-5-20 Visual FoxPro 6.0程序设计 61
6.3.2 用已有的 SQL SELECT语句创建视图
同查询一样,可用 SELECT—SQL语言创建视图。若用 SELECT—
SQL建立视图,则可用下列 SELECT—SQL语句:
格式,SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]]
[Alias.] Select_Item [AS Column_ Name] [,[Alias.] Select_Item [AS
Column_Name],..] FROM [FORCE] [DatabaseName!] Table [[AS]
Local_Alias] [[INNER|LEFT [OUTER]| RIGHT [OUTER] |FULL
[OUTER] JOINDatabaseName!] Table [[AS ]Local_Alias] [ON
Join- Condition…] [[INTO Destination]|[TO FILE FileName
[ADDITIVE]|TO PRINTER [PROMPT]|TO SCREEN]]
[PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN]
[NOWAIT] [WHERE JoinCondition [.AND,JoinCondition,..]
[.AND.|.OR,FilterCondition [.AND.|.OR,FilterCondition,..]]]
[GROUP BY GroupColumn [,GroupColumn,..]] [HAVING
FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY
Order_Item [ASC|DESC] [,Order_Item [ASC|DESC],..]]
2010-5-20 Visual FoxPro 6.0程序设计 62
功能,从一个或多个表中检索数据。
参数描述:
SELECT:用 SELECT子句指定在查询结果中包含的字段、常量
和表达式。
[ALL]:在查询结果中包含所有的行(包括重复值)。它是系统
的默认设置。
[DISTINCT]:在查询结果中删除重复行。
[TOP nExpr [PERCENT]]:在符合查询条件的所有记录中,选取
指定数量或百分比的记录。 TOP子句必须与 ORDER BY子句同时
使用。 ORDER BY子句指定按哪个字段排序,TOP子句根据此排
序选定开始的 nExp个 或 nExp %的记录。可以指定选取 1~32767条
记录。
[Alias.]:限定匹配项的名称。 Select-Item指定的每一项在查询结
果中都生成一列,如果多个项具有相同的名称,则应在这些项前
加上表的别名和一个句点号,以防止出现重复的列。
Select_Item,指定包含在查询中的一个项。一个项可以是:
2010-5-20 Visual FoxPro 6.0程序设计 63
① FROM子句中所包含的表中的字段名称。
②一个常量,查询结果中的每一行都出现这个常量值。
③一个表达式,可以是用户自定义函数名。
[AS Column_Name]:指定查询结果中的列标题。当 Select-Item
是一个表达式或一个字段函数时,如果要给此列取一个有意义
的名称可用这个子句。它可以是一个表达式。
FROM:列出所有从中检索数据的表。如果没有打开表,VFP会
显示“打开”对话框以便指定文件位置,表打开以后直到查询
结束才关闭。
[FORCE]:如果包含了此子句,VFP在建立查询时会严格按照在
FROM子句中申明的顺序建立联接,否则会试图对查询进行优
化。避免优化过程,可能会加快查询执行的速度。
[DatabaseName!]:当包含表的数据库不是当前的数据库时,此
子句指定数据库的名称。如果数据库不是当前数据库,就必须
指定包含表的数据库名称,注意其后应加上“!”号。
Table [[AS] Local_Alias]:为 Table中的表指定一个临时名称。
2010-5-20 Visual FoxPro 6.0程序设计 64
如果指定了本地别名,那么在整个 Select语句中都必须用这个别
名代替表名。
INNER JOIN:只有在其它表中包含对应记录(一个或多个)的
记录才出现在查询结果中。
LEFT [OUTER] JOIN:在查询结果中包含 JOIN左侧表中的所有记
录,以及右侧表中匹配的记录。这是左联接。
RIGHT [OUTER] JOIN:在查询结果中包含 JOIN右侧表中的所有
记录,以及左侧表中匹配的记录。这是右联接。
FULL [OUTER] JOIN:在查询结果中包含 JOIN两侧表中的所有
记录,这是完全联接。
[DatabaseName!]Table [[AS] Local_Alias]:指定和当前表建立联
接的表所在的数据库及表名或本地表别名。
ON JoinCondition:指定联接条件。
[INTO Destination]:指定在何处保存查询结果。如果在同一个查
询中同时包含了 INTO子句和 TO子句,则 TO子句不起作用。如果
没有包含 INTO子句,查询结果显示在“浏览”窗口中。
2010-5-20 Visual FoxPro 6.0程序设计 65
Destination可以是下列子句之一:
① ARRAY ArrayName:将查询结果保存到数组中。如果查询结
果中不包含任何记录,则不创建这个数组。
② CURSOR CursorName:将查询结果保存到临时表中。如果指
定了一个已打开表的名称,则 VFP产生错误信息。执行完
SELECT语句后,临时表仍然保持打开、活动,但只读。一旦关
闭临时表,则自动删除它。
③ DBF TableName|TABLE TableName:将查询结果保存到一个表
中,如果指定的表已经打开,并且 SET SAFETY设置为 OFF,则
VFP在不给出任何警告信息的情况下改写该表。执行完 SELECT
语句后,临时表仍然保持打开活动状态。
[TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO
SCREEN]:如果命令中包含了 TO子句,但没有包括 INTO子句,
则查询结果定向输出到名为 FileName的 ASCII码文件、打印机或
主窗口。包含 ADDITIVE子句使查询结果追加到所指定的文本文
件的内容后面。
2010-5-20 Visual FoxPro 6.0程序设计 66
[PREFERENCE PreferenceName]:如果查询结果送往浏览窗口,
就可以使用该子句保存浏览窗口的属性和选项以备后用。
[NOCONSOLE]:不显示送到打印机、文件、或 VFP主窗口的查
询结果。
[PLAIN]:防止列标题出现在显示的查询结果中。
[NOWAIT]:打开浏览窗口并将结果输出到这个窗口后继续程序
的执行。
WHERE:告诉 VFP只在查询结果中包含一定的记录。从多表检
索中查找数据时需要用到该子句。
JoinCondition:指定一个字段,该字段联接 FROM子句中的表。
如果查询中包括不止一个表就应该为第一个表后的每一个表指定
联接条件。联接多个查询条件必须使用,AND.。每个联接都是这
样的形式:
FieldName1 Comparison FieldName2
其中,FieldName1是一个表的字段名,FieldName2是另一个表的
字段名。 Comparison是下列的某一操作符:
2010-5-20 Visual FoxPro 6.0程序设计 67
=,==,LIKE,<>,!=,#,>,>=,<,<=
FilterCondition:指定包含在查询结果中的记录必须满足条件。筛
选条件的数目没有限制,只要将它们用,AND.或,OR.操作符连接
起来即可。也可以使用操作符,NOT.对逻辑表达式取反,或使用
EMPTY()函数检查字段是否为空等。
[GROUP BY GroupColumn]:按列的值对查询结果进行分组。
GroupColumn 可以是常规的表字段名,也可以是一个包含 SQL字
段函数的字段名,还可以是一个数值表达式指定查询结果表中的
列位置。
[HAVING FilterCondition]:指定包含在查询结果中的组必须满足
的条件。它应和 GROUP BY GroupColumn一起使用。
[UNION [ALL] SELECTCommand]:把一个 SELECT语句的最后
查询结果同另一个 SELECT语句最后的查询结果组合起来。 ALL
防止 UNION删除组合结果中的重复行。
[ORDER BY Order_Item ]:根据列的数据对查询结果进行排序。
每个 Order_Item都必须对应查询结果中的一列。
2010-5-20 Visual FoxPro 6.0程序设计 68
用 SELECT—SQL命令完成上节的设计任务:
SELECT Department.系部名称,Classzc.班级名称,Student.学号,;
Student.姓名,Course.课程名,Grade.课程成绩 ;
FROM gxglxt!department INNER JOIN gxglxt!classzc;
INNER JOIN gxglxt!student;
INNER JOIN gxglxt!grade;
INNER JOIN gxglxt!course ;
ON Grade.课程代号 = Course.课程代号 ;
ON Student.学号 = Grade.学号 ;
ON Classzc.班级代号 = Student.班级代号 ;
ON Department.系部代号 = Classzc.系部代号 ;
WHERE Classzc.系部代号 = "04";
.AND,Grade.开课学期 = "第 1学期 ";
ORDER BY Student.学号 ;
INTO CURSOR 视图 1
2010-5-20 Visual FoxPro 6.0程序设计 69
运行该 SELECT语句后,选择 【 显示 】 |【 浏览“视图 1”】 屏幕
显示如图:
返回
2010-5-20 Visual FoxPro 6.0程序设计 70
6.3.3 创建远程视图
1,用视图向导创建远程视图
创建使用远程数据( ODBC)的视图,必须存在一个数据库来
保存视图,同时还需要存在数据源或命名连接。如果没有打开
数据库,系统将提示打开数据库或创建数据库。
在运行“远程视图向导”之前,可以在“选项”对话框的“远
程数据”选项卡上设置远程视图和连接的默认选项。也可以在
“连接设计器”中创建连接。
如果要利用远程视图向导创建远程视图,则选择 【 文件 】 |
【 新建 】 命令,在弹出的新建对话框中选中远程视图,然后单
击 【 向导 】 按钮。就会进入远程视图向导对话框中。或者在数
据库设计器工具栏中单击 【 新建远程视图 】 按钮,选择使用向
导。
2010-5-20 Visual FoxPro 6.0程序设计 71
创建远程视图
主要有以下步
骤:
1,数据源选

2,字段选取
3,为表建立关

4,包含记录
5,排序记录
6,筛选记录
7,完成
在第一步数据源选取中,可以在可用的数据源列表框中选择一
种 ODBC数据源或者一个已经建立的连接。如果选择的是一种
未连接任何数据源的 ODBC数据源,系统将显示一个“确认连
接”对话框,从中选择一个数据源。当选择的 VFP Tables或 VFP
2010-5-20 Visual FoxPro 6.0程序设计 72
Databases时,会打开建立数据源对话框。在此对话框中为数据
库选择一种类型,同时在 Path中输入远程数据源的文件名或者使
用 【 Browse】 按钮选择一个文件作为远程数据源。
选择数据源以后,向导就会进入下一步,以后的步骤与本地
视图及创建查询没有太大的差别,在此不再赘述。
2010-5-20 Visual FoxPro 6.0程序设计 73
2、利用视图设计器创建远程视图
创建新的远程视图首先必须要有同数据源的连接。
在数据库设计器中单击鼠标右键选择 【 新建远程视图 】 或者在
【 文件 】 下的 【 新建 】 命令,在新建对话框中选择远程视图,
并单击 【 新建文件 】 按钮。此时会显示选择连接或数据源对话
框,在此对话框中选择连接或者可用的数据源。如图。
2010-5-20 Visual FoxPro 6.0程序设计 74
如果已经存在定义的连接,该对话框中就显示所定义的连接。如
果要定义新的连接,可单击 【 新建 】 按钮,出现图示的“连接设
计器”。
2010-5-20 Visual FoxPro 6.0程序设计 75
在数据源下面的下拉选项框中选择 Visual FoxPro Database项,
其它项均采用系统默认设置,然后选择 【 验证连接 】 按钮。如果
为这个连接指定了一个数据库,则会出现“连接成功”的提示信
息,否则,将出现如图所示的连接配置( Configure Connection)
对话框。
在该对话框中选择 【 Browse】 后将出现图示的“选择数据库”
( Select Database)对话框。
2010-5-20 Visual FoxPro 6.0程序设计 76
在此对话框中可以选择本地存在的数据库或网上邻居中设置为共
享的数据库。然后选择 【 打开 】,就会在“连接配置 Configure
Connection”对话框中,Path”后的文本框中加入所添加的数据库
文件名及其所在的路径,如,\\092\FOXPRO上机操作
\Visualfp.dbc”。然后按 【 OK】,系统会告诉“连接成功”。
然后再在“连接设计器”中单击 【 确定 】,接着弹出“保存对话
框”,默认的连接名为“连接 1”,可以采用默认的连接名,也可
以重命名连接名,再单击 【 确定 】 。
2010-5-20 Visual FoxPro 6.0程序设计 77
在保存连接后,
“远程视图设计器”
进入“打开”对话框。
在视图设计器中对
加入的表创建远程视
图的操作与建立本地
视图的操作一样,此
处不再赘述。
2010-5-20 Visual FoxPro 6.0程序设计 78
3,控制如何检查更新冲突
如果在一个多用户环境中工作,服务器上的数据也可以被别的用
户访问,也许别的用户也在试图更新远程服务器上的记录,为了
让 VFP检查用视图操作的数据在更新之前是否被别的用户修改过,
可使用更新条件选项卡上的选项。
在更新条件选项卡中,SQL WHERE子句包括框中的选项可以帮
助管理遇到多用户访问同一数据时应如何更新记录。 在允许更
新之前,VFP先检查远程数据源表中的指定字段,看看它们在记
录被提取到视图中后有没有改变,如果数据源中的这些记录被修
改,就不允许更新操作。
在“更新条件”选项卡中可以设置 SQL WHERE子句。
这些选项决定哪些字段包含在 UPDATE或 DELETE语句的
WHERE子句中,VFP正是利用这些语句将在视图中修改或删除
的记录发送到远程数据源或源表中,WHERE子句就是用来检查
自从提取记录用于视图中后,服务器上的数据是否已改变。
2010-5-20 Visual FoxPro 6.0程序设计 79
关键字段:当源表中的关键字段被改变时,使更新失败。
关键字和可更新字段:当远程表中任何标记为可更新的字段被
改变时,使更新失败。
关键字和已修改字段:当在本地改变的任一字段在源表中已被
改变时,使更新失败。
关键字和时间戳:当远程表上记录的时间戳在首次检索之后被
改变时,使更新失败(仅当远程表有时间戳列时有效)。
4,定制视图
同本地视图一样, 可以在远程视图中包含表达式, 设置提示输
入值, 也可以设置高级选项来协调与服务器交换数据的方式
( 1) 控制更新方法
若要控制关键字段的信息实际上在服务器上更新的方式,可使
用视图设计器中更新条件选项卡中, 使用更新, 中的选项。如

2010-5-20 Visual FoxPro 6.0程序设计 80
当记录中的关键字更新时,这些选项决定发
送到服务器或源表中的更新语句使用什么
SQL命令。
可指定先删除记录,然后使用在视图中输入的新值取代原值
( SQL DELETE然后 INSERT),也可指定使用服务器支持的
SQL UPDATE函数来改变服务器的记录。
( 2)在远程视图中添加表达式
若要在视图中添加表达式,可在“筛选”选项卡中,从“字段
名”框中选择“表达式”。
当视图基于远程数据源时,在“表达式设计器”中显示的函数
反映了服务器所支持的函数。可以查看服务器文档中列出的该
服务器所支持的函数列表,VFP不对构造的表达式作语法分析,
而是将它们发送到远程服务器上。
2010-5-20 Visual FoxPro 6.0程序设计 81
5,建立连接
使用远程视图,无需将所有记录下载到本地计算机上即可提取
远程 ODBC服务器上的数据子集。可以在本地机上操作这些选
定的记录,然后把更改或添加的值返回到远程数据源中。
有两种连接远程数据源的方法,可以直接访问在机器上注册的
ODBC数据源,也可以用连接设计器设计自定义连接。
在安装 VFP时,选择 VFP的“完全”或“自定义”安装选项,就
可以把 ODBC安装在系统中。
如果想为服务器创建定制的连接,可以使用连接设计器,创建
的连接将作为数据库的一部分保存起来,并含有如何访问特定
数据源的信息。
使用连接设计器能够创建并修改命名连接。因为连接是作为数
据库的一部分存储的,所以仅在有打开的数据库时才能使用连
接设计器。
连接设计器对话框中有如下选项:
( 1)指定的数据源
2010-5-20 Visual FoxPro 6.0程序设计 82
■ 数据源、用户标识、密码指定 VFP显示以下三个框:
●数据源:允许从已安装的 ODBC数据源列表中选择一个数据源。
●用户标识:如果数据源需要用户名称或标识,允许键入。
●密码:如果数据源需要密码,允许键入密码。
●数据库:可以选择一个数据库,作为所选数据源连接的目标。
■连接串:指定 VFP显示连接串文本框,可在其中键入连接串。
选择对话按钮,显示选择连接或数据源对话框,如图所示。
可以选择现有文件或机器数据
源。
■ 【 验证连接 】,可以对那些
刚输入了内容的连接进行检查。
如果连接成功,则显示对话框
提示此消息;如果连接失败,
则出现错误信息。如果没有对
话指定内容,则显示选择
2010-5-20 Visual FoxPro 6.0程序设计 83
数据库对话框,从中选择数据源。前文已作介绍。
■ 【 新建数据源 】,显示,Data Sources”对话框,可以在其中
添加、删除或配置数据源。前文已作介绍。
( 2)显示 ODBC登录提示
●未指定登录信息时显示:如果在命名连接定义中未存储用户
标识和密码,则 VFP用,ODBC数据源注册”对话框提示用户。
●总显示:指定 VFP 总是使用,ODBC数据源注册”对话框提
示用户,该框允许用户使用与存储在命名连接中不同的注册 ID
和密码。
● 从不显示:指定 VFP从不提示用户 。 此选项确保更高的安全
性 。
( 3) 数据处理
此选项与用户用 DBSETPROP( )函数设置的连接属性相对应 。
■ 异步执行:指定异步连接 。 此选项与 Asynchronous连接属性
相对应 。
■ 显示警告信息:指定显示不可捕获警告 。 此选项与 Disp
2010-5-20 Visual FoxPro 6.0程序设计 84
warning连接属性相对应。
■批处理:指定以批处理方式进行连接操作。此选项与
BatchMode连接属性相对应。
■自动事务处理:指定自动执行事务处理。此选项与
Transactions连接属性相对应。
■包大小:当和远程数据位置之间传送信息时,可以指定传送信
息网络包的大小(以字节为单位)。在下拉列表中选择或键入一
个值。
( 4)超时间隔
这些选项设置连接属性的值,也可用 DBSETPROP( )函数设置。
■连接(秒):以秒为单位指定连接超时时间间隔。此选项与
ConnectTimeout连接属性相对应。
■查询(秒):以秒为单位指定查询超时时间间隔。此选取项与
QueryTimeout连接属性相对应。
■空闲(分钟):以分钟为单位指定空闲超时时间间隔。在指定的时间间隔
后,活动连接变为不活动。此选项与 IdleTimeout连接属性相对应。
■等待时间(毫秒):以毫秒为单位指定在 VFP确定 SQL语句是否执行完毕
之前经过的时间。此选项与 WaitTime连接属性相对应。
返回
2010-5-20 Visual FoxPro 6.0程序设计 85
6.4数据库视图的操作
6.4.1 使用视图
退 出
6.4.2、显示视图结构
6.4.3、重新命名视图
6.4.4 删除视图
6.4.5 创建视图索引
6.4.6 创建参数化视图
返 回
2010-5-20 Visual FoxPro 6.0程序设计 86
6.4.1 使用视图
建立视图后,不但可以用它来显示和更新数据,而且还可以通过
调整它的属性来提高性能。处理视图类似处理表,可以:
■使用 USE命令并指定视图名来打开一个视图。
■使用 USE命令关闭视图。
■在 【 浏览 】 窗口中显示视图。
■在 【 查看 】 窗口中显示已打开的视图的别名。
■将视图作为数据源,供表单或表格控件使用。
若要使用一个视图,可采取如下方法:
■在项目管理器中先选择一个数据库,再选择视图名,然后单击
【 浏览 】 按钮,在 【 浏览 】 窗口中显示视图。
■使用编程的方式访问视图。
下面的代码在 【 浏览 】 窗口中显示存放在 c:\gxglxt目录下 gxglxt数
据库中的视图 1:
open database c:\gxglxt\gxglxt
use 视图 1
2010-5-20 Visual FoxPro 6.0程序设计 87
browse
在使用一个视图时,视图将作为临时表在自己的工作区打开。
如果此视图基于本地表,则 VFP6会在另一个工作区同时打开基
表。如果没有打开任何表,或先执行 Close All命令后再执行以上
命令,则视图 1在工作区 1打开,而其基表则在工作区 2打开。要
查看基表,可以通过选择系统菜单上的 【 窗口 】 |【 数据工作期 】
打开“数据工作期”窗口。但有一个例外,如果视图是基于远程
表,则基表将不在工作区中打开。而只在 【 查看 】 窗口中显示远
程视图的名称。
返回
2010-5-20 Visual FoxPro 6.0程序设计 88
有时用户只想了解视图的结构,而不关心视图中的数据。这样
可以使用带 NODATA子句的 USE命令来快速显示视图的结构。
例如:
open database c:\gxglxt\gxglxt
use 视图 1 nodata in 0
Select 视图 1
browse
通过运行上面的命令语句,将在 【 浏览 】 窗口中看到没有记
录的视图 1。因为使用 NODATA子句时,VFP6为视图 1创建一个
永远返回,F,值的 WHERE子句,而数据源上没有记录匹配
WHERE子句的条件,所以没有记录被选择。
6.4.2、显示视图结构
返回
2010-5-20 Visual FoxPro 6.0程序设计 89
6.4.3、重新命名视图
建立一个视图以后,还可以为其重新命名视图,进行视图的重
新命名,可以使用项目管理器或用 RENAME VIEW命令。
■在项目管理器中先选择一数据库,再右击要重新命名的视图。
单击 【 重命名 】 按钮,出现一对话框后即可为视图输入新的名
称。
■使用 RENAME VIEW命令。
例如,下面的代码将视图 2重新命名为视图 1:
rename view 视图 1 to 视图 2
说明,在重新命名视图之前,必须打开包含要命名视图的数据
库 。 6.4.4 删除视图
视图同表一样也是可以删除的,删除视图可以使用项目管理器或
使用 DELETE VIEW命令。
■在项目管理器中选择一个数据库,再选择要删除的视图,然后
用鼠标右击,单击 【 移去 】 按钮,即可删除所选的视图。
返回
2010-5-20 Visual FoxPro 6.0程序设计 90
■ 使用 DELETE VIEW命令。
例如,如果要删除数据库 xsglxt中的视图 2,可以键入以下的命令
语句:
delete view视图 2
说明,在删除视图之前,必须打开包含要删除视图的数据库并设
置其为当前数据库。
6.4.5 创建视图索引
同为表建立索引一样,也可以为视图建立索引。但与表不同
的是,在视图上创建的本地索引不能永久保存,它们随着视图
的关闭而消失。为视图建立本地索引,可以使用 INDEX ON命
令。关于该命令的参数,在创建表的索引时已有介绍。 另有一
点需要注意的是,在决定是否在视图上建立索引时,要考虑视
图结果集合的大小。对于一个大的结果集合来说,索引要花费
很长的时间,并可能降低视图的性能。因此,要根据实际情况
处理。
返回
2010-5-20 Visual FoxPro 6.0程序设计 91
6.4.6 创建参数化视图
VFP 可以创建具有提示输入值来查询信息的视图,称为参数化
视图,这样的视图具有更大的灵活性和更强的适应性。可避免每
取一部分记录值就要建立视图的情况。
可用以下方法创建参数化视图:
( 1)打开视图设计器,从 【 查询 】 菜单中选择 【 视图参数 】 命
令,此时系统弹出视图参数对话框,如图
2010-5-20 Visual FoxPro 6.0程序设计 92
( 2)在视图参数对话框中输入参数名及其数据类型。此例中建
立一个名为“系部代号”的视图参数,此视图参数可以任意取,
但数据类型要和所要查询的记录类型一致。参数名可以是字母
字符、数字和单引号的任意组合。
( 3)按下确定按钮,就为此视图建立了一个视图参数了。
下面设计一个带参数的视图(视图 4):
( 1)打开“视图设计器”,选定表 Classzc,Student,Course和
Grade四个表,并选取, Classzc.系部代号,Classzc.班级名称、
Student.学号,Student.姓名,Course.课程名,Grade.开课学期、
Grade.课程成绩这 7个字段名作为输出字段。
( 2) 在“筛选”选项卡中的“字段名”下拉列表框中选择
Classzc.系部代号,在“条件”列表框中选定,=”,在“实例”
文本框中输入,?系部代号”。这个问号表示引用一个表达式所
需要的参数。问号后的文字标识了这个参数的名称。同时还可
以设定如,Grade.开课学期 =??开课学期’”。
( 3)选择 【 查询 】 |【 视图参数 】,进入“视图参数”对话框,
2010-5-20 Visual FoxPro 6.0程序设计 93
在“参数名”文本框中输入参数名称“系部代号”,在“类型”
下拉列表框中选定参数的类型为“字符型”,同样还输入“开
课学期”、“字符型”,然后单击 【 确定 】 按钮。
( 4)通过选择 【 查询 】 |【 运行查询 】 命令,或通过单击鼠标右
键再选择 【 运行查询 】 命令,系统弹出如图所示的视图参数对
话框。
在此对话框中可以输入将要查询的参数的某一具体数值,在
此输入,05”;在后面弹出的“输入一个字符型值,供‘开课学
期’使用”对话框中输入 "第 1学期 "。
单击确定按钮,查询的结果即显示在屏幕上。
返回
2010-5-20 Visual FoxPro 6.0程序设计 94
6.5 利用视图更新数据
在项目管理器中选择“视图 3”,单击 【 修改 】,在视图设计器中
选择“字段”选项卡,如图。
返回
2010-5-20 Visual FoxPro 6.0程序设计 95
在上图中,请注意 Grade表中的字段。
选择“更新条件”选项卡,进行如图设置:
■ 设定关键字段和可修改字段。
注意:因为表 Grade中每个字段的值都不唯一,所以要用组合关
键字(学号 +课程代号 +开课学期)
■存档并显示结果。 选 【 文件 】 |【 保存 】 或从工具栏中单击保
存按钮保存此视图。选取菜单 【 查询 】 |【 运行查询 】 查看结果,
为视图参数输入,04”(带定界符)、“第 1学期”后的运行结
果如图,
2010-5-20 Visual FoxPro 6.0程序设计 96
■ 修改视图数据。既然我们已经为视图 3视图文件设定关键字段
与可更新字段,也就是设定了视图文件中哪些字段可以经过修
改而自动更正原始数据文件内容,现在就来验证这些设定是否
生效。
将视图中最后一条记录的“课程成绩”由 62改为 99。
2010-5-20 Visual FoxPro 6.0程序设计 97
99
在视图中更改此处数据
更改完毕后操作光标离开这条记录,观察 Grade表中相关记录变
化的情形。
从结果可以
看出,Grade
表中的学号和
课程成绩已随
着视图文件的
更改而自动修
正了。表示我
们设定的可更
新字段生效。
99
返回
2010-5-20 Visual FoxPro 6.0程序设计 98
6.6 利用视图处理自由数据
我们经常需要将一些数据从主数据库中分离出来进行操作,比如
在下面的一些情况中:
( 1)数据大量的存放在一个地方(大型数据库主要由 MIS服务
器维护),而我们却只对其中某方面的数据感兴趣,比如我们只
想了解 990520班的学生,就可以构造一个包含相关信息的视图,
然后将数据从主数据库中分离出来,使之成为游离数据,允许对
其数据进行更新,最后把变动过的数据提交给来源数据库;
( 2)用于地理位置较远的情况,若条件不允许与数据库相连,
则可事先将有用的数据子集装在便携机上,独立于主数据库操作
这些数据,以后再用这些调整后的数据更新主数据库。
在这样的情况下,我们可以使用 Visual FoxPro提供的处理游离数
据的功能,用与主数据库相连的视图建立数据的子集,这样就脱
离了主数据库对游离数据进行操作,可以直接访问视图,也可以
通过应用程序访问。最后,还可以将数据上载回主数据库。
下面我们就介绍如何创建游离视图。
返回
2010-5-20 Visual FoxPro 6.0程序设计 99
6.6.1 创建游离视图
经过需求分析确定了脱机使用的数据子集之后,就可以使用已有
的视图或是创建新视图。如果已有视图返回的记录正是脱机操作
时想要的,可直接使用它,否则需要以编程的方式创建视图。游
离视图中包含的数据存储在本地机数据库中的一个,DBF文件中。
如果要在游离视图中修改数据,则要在使之游离前确认视图可更
新。由于视图是游离的,只能以设置它的更新属性,不能在“视
图设计器”中修改游离视图。
可使用 CREATE SQL VIEW命令,跟之以 CREATEOFFLINE()命令
来创建游离视图。例如,以下代码创建一个游离视图,用于显示
来自联机数据库中,student”和,grade”表中的数据。由于没有指
定更新条件,因此视图是只读的。
CREATE SQL VIEW test1
CONNECTION 连接 1
AS SELECT * FROM student INNER JOIN grade;
ON student.学号 =grade.学号 ;
CREATEOFFLINE(“test1”) 返回
2010-5-20 Visual FoxPro 6.0程序设计 100
6.6.2 显示和修改游离视图
为游离数据创建了视图后,就可以在应用程序中像使用其他视图
一样使用这些视图:添加、修改、删除记录。多个用户可以以共
享模式同时访问同一数据库中的游离数据。
1、使用游离数据
使用游离数据视图,可以像使用联机视图那样使用表单、报表或
应用程序来显示和更新数据。例如以下代码用于打开 test1视图:
USE test1
2、管理游离数据
在一些情况下,尤其在多用户环境下,很多人同时操作相同的数
据。在把游离数据更新到源数据库之前,可能希望检查一下那些
被改动过的数据。使用带有 ADMIN字句的 USE命令可以查看对
游离数据的所有修改,还可以有选择的放弃一些还没有与数据源
相连的那些修改。例如,以下代码在管理员模式下打开 test1视图:
USE test2 ADMIN
返回
2010-5-20 Visual FoxPro 6.0程序设计 101
小 结
1、查询和视图是 VFP6的重要组成部分,是非常相似的一种查
询数据库中数据的方法。
2、查询是以磁盘文件形式存放的程序,其扩展名为,QPR,它
通过 DO命令来执行。
3、视图是一种定制的虚拟表,是依附于基表上的寄生表。
4、建立查询分为单表查询、多表查询和交叉表查询三种。
5、可以通过菜单、命令、项目管理器建立查询,通过菜单还可
以使用查询向导,但查询向导的功能有限。
6、视图分为本地视图和远程视图二种。
7、建立本地视图的方法与建立查询的方法相似。
8、建立远程视图需要有远程连接。
9、可以通过视图更新源表中的数据,这是视图与查询的本质区
别。
10、查询和视图都可以通过 SQL-SELECT语句实现,查询和视
图的 SQL语句可以通过显示 SQL窗口按钮查看。
返回
2010-5-20 Visual FoxPro 6.0程序设计 102
学习要点
1、表单的基本设计方法,单表表单和多表表
单在设计上的不同点,表单关系;
2、向表单中添加控件的方法;
3、常用控件的功能和使用方法;
4、常用控件所具有的事件;
5、方法程序的编写;
6、使用表单解决数据输入和输出问题。
第 7章 VFP6表单设计