基于VFP的查询表单设计与实现

时间:2022-09-28 11:45:31

基于VFP的查询表单设计与实现

摘要:利用SQL-SELECT、参数化视图和数据过滤器等方法设计并实现了查询表单,并对三种设计方法进行了讨论。

关键词:VFP;查询;表单设计

中图分类号:TP311.1 文献标识码:A 文章编号:1009-3044(2009)36-10169-03

The Design and Implementation of Query Form Based on Visual FoxPro

SHANG Jun-ping, LIU He-bing

(Department of Computer Science & technology, Henan Agricultural University, Zhengzhou 450002, China)

Abstract: This paper presents the design and implementation of query form in Visual FoxPro with the methods of SQL-SELECT, parametric view and data filter, and the methods are discussed.

Key words: VFP; query; form design

数据的查询是数据处理中最基本的操作,几乎每个应用程序都会涉及查询的问题。在数据库应用系统开发中,查询表单的设计非常重要。本文以学生-课程-成绩数据库为例,利用SQL-SELECT、参数化视图和数据过滤器等三种方法设计并实现了查询表单。

1 表单设计

表单是数据处理的用户界面,用户通过各种表单来认识和使用数据处理应用软件。在开发一个数据库应用系统时,表单的设计是非常重要、不可缺少的一个环节。

表单设计的基本步骤:

1) 设置数据环境。分析表单是否涉及到数据表或视图中的数据,根据需要在数据环境中添加数据表或视图。数据环境及其中的表或视图都是对象,可以对其进行属性设置,数据环境的设置与表单一起保存。在运行表单时,VFP自动打开其数据环境中的表或视图。

2) 设计表单界面:添加各类控件,设置各个对象的属性,调整布局。

3) 编写事件代码:事件代码设计是表单设计的关键。对某些对象,如命令按钮等进行相关的事件设计,事件代码在对象的事件触发时自动执行。

2 数据源说明

本文以学生-课程-成绩数据库为数据源,数据库中包括主要三个数据表,关系模式分别为:

Xuesheng(Xh,Xm,Xb,Csrq),字段分别表示学生的学号、姓名、性别和出生日期;

Kecheng(Kcdh,Kcm,Llxs,Syxs,Bxk,Xq,Kcbz),其中字段分别表示课程代号、课程名、理论学时、实验学时、必修课、开课学期和课程备注;

Chengji(Xh,Kcdh,Cj),其中字段分别表示学号、课程代号和成绩。

在Xuesheng与Chengji之间、Kecheng与Chengji之间建立一对多永久关系。

部分数据如图1所示。

3 查询表单设计

运行查表单询,用户可以通过交互方式,实现根据输入查询信息,得到相关信息。

本文设计如图2所示的查询表单,运行表单,用户输入学生姓名,点击“查询”按钮查询其选修课程及成绩,结果显示在表单上的表格中,点击“退出”按钮,释放表单。

3.1 利用SQL-SELECT语句设计查询表单

SELECT语句是SQL(Structured Query Language)语言的核心语句,提供对数据库的查询。SELECT语句使用方式灵活,功能丰富,不仅可以完成单表查询,也可以完成复杂的连接查询和嵌套查询。

表单设计分析:利用SELECT语句设计图2所示表单,设计界面如图3所示,表单文件名设为F1。单击“查询”按钮,根据文本框Text1中输入的姓名进行查询,查询结果保存在临时表T1中,要使查询结果在Grid1中显示,表格Grid1的数据源Recordsource应设定为临时表T1。为避免表单初次运行表格Grid1中无数据出现空白表,在表单的Init事件中将表格的数据源进行初始化。

设计步骤如下:

1) 使用SELECT语句不需要打开要查询的数据表,所以无需考虑数据环境。

2) 添加两个标签,将Label1的Caption属性设为“基于VFP的查询表单”,FontName为“楷体_GB2312”,FontSize为18,Label2的Caption属性设为“请输入姓名”,FontName为“楷体_GB2312”,FontSize为14。

3) 添加一个文本框Text1,用于运行时输入要查询的信息。

4) 添加两个命令按钮,Caption属性分别设为“查询”和“退出”,FontName为“楷体_GB2312”。

5) 添加表格Grid1,用于显示查询信息。

6) 调整各个对象大小和布局。

7) 表单事件代码设计:

Form1的Init事件代码:

SELECT Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj;

FROM Xuesheng,Kecheng,Chengji;

WHERE Xuesheng.Xh=Chengji.Xh AND Chengji.Kcdh=Kecheng.Kcdh ;

AND Xuesheng.Xm=="";

INTO CURSOR T1

Thisform.Grid1.Recordsource="T1"

“查询”按钮的Click事件代码:

SELECT Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj;

FROM Xuesheng,Kecheng,Chengji;

WHERE Xuesheng.Xh=Chengji.Xh AND Chengji.Kcdh=Kecheng.Kcdh ;

AND Xuesheng.Xm=Allt(Thisform.Text1.Value);

INTO CURSOR T1

Thisform.Grid1.Recordsource="T1"

Thisform.Refresh

“退出”按钮的Click事件代码:

Thisform.Release

讨论:由于SQL-SELECT语句功能强大,可以对单表、多表实现单条件查询、多条件组合查询的查询功能,使用这种方法设计查询表单。对于不同的数据源和查询要求,可参照上例,多条件时增加输入文本框(或使用组合框、选项按钮组等),修改SELECT语句即可。

3.2 利用参数化视图设计查询表单

视图是关系数据库系统提供给用户从多种角度观察数据库中数据的重要机制。视图是从一个或者几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。在创建视图时,可以创建参数化视图,用它来限定视图的作用范围,避免每取一部分记录就单独创建一个视图。

利用参数化视图设计如图2所示表单,设计界面如图4所示,表单文件名设为F2。

设计步骤如下:

1) 打开学生-课程-成绩数据库,利用视图设计器创建参数化视图St1。将Xuesheng、Chengji与 Kecheng添加到视图中,在字段选项卡选定Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj,在“筛选”选项卡中设置条件:Xuesheng.Xm=?xx,用“?xx”方式调用参数变量。这里,xx是变量名。参数化视图St1的设计界面如图5所示。

2) 将参数化视图St1添加到查询表单数据环境中,并将数据环境中的参数化视图St1(Cursor1)的Nodataonload属性设置为.t.。Nodataonload 属性设为.t.,表单初始化时,打开视图,但视图不取得任何数据。这样可以避免运行表单时参数化视图弹出要求输入参数变量的对话框。

3) 标签、文本框、命令按钮的添加和属性设置同图3表单F1的设计。

4) 把数据环境中的参数化视图St1拖放到表单中,生成表格grdSt1。

5) 调整各个对象大小和布局。

6) 表单事件代码设计:

Form1的Init事件代码:

Local xx&&通过定义变量xx,实时改变视图的参数变量。

“查询”按钮的Click事件代码:

xx=Allt(Thisform.Text1.Value)&&通过文本框给参数变量赋值。

=requery(“St1”)&&当参数变量发生变化时可用ReQuery()函数刷新视图。

Thisform.Refresh

“退出”按钮的Click事件代码:

Thisform.Release

讨论:视图从一个或者几个基本表(或视图)导出数据,同样可以对单表、多表实现单条件查询、多条件组合查询。通过设计参数化视图,当参数变量发生变化时刷新视图,实现交互查询。对于不同的数据源和查询要求,参照上例,多条件时增加输入文本框(或使用组合框、选项按钮组等),修改参数化视图的设计即可。在设计时需要根据参数的个数、名称在表单的Init事件中设置对应的变量,在对参数变量重新赋值后,使用=ReQuery()函数刷新视图。ReQuery()的参数为视图名。

3.3 利用数据过滤器设计查询表单

在VFP中数据过滤器可以为数据表或视图设置逻辑表,将不符合条件的记录“屏蔽”起来。一个表或视图设置过滤器后,对表的操作仅限于满足条件的记录。数据过滤器实现可以通过菜单方式,也可以使用SET FILTER TO命令实现。

利用SET FILTER TO命令设计如图2所示的查询表单,设计界面如图6所示,表单文件名设为F3。设计步骤如下:

1) 该表单查询数据涉及到的数据表有Xuesheng.dbf、Kecheng.dbf和Chengji.dbf,打开学生-课程-成绩数据库,创建视图St2,字段包含Xuesheng.dbf中的Xh,Xm,Kecheng.dbf中的Kcdh,Kcm,Chengji.dbf中的Cj字段。将视图St2添加到表单数据环境中。

2) 标签、文本框、命令按钮的添加和属性设置同图3表单的设计。

3) 把数据环境中的视图St2拖放到表单中,生成表格grdSt2。

4) 调整各个对象大小和布局。

5) 表单事件代码设计:

“查询”按钮的Click事件代码:

SET FILTER TO St2.Xm=Allt(Thisform.Text1.Value)

Thisform.Refresh

“退出”按钮的Click事件代码:

SET FILTER TO

Thisform.Release

讨论:表单F3涉及多个表,使用视图作为数据源相对来说操作更方便,如果要多条件组合查询,只需在表单上增加输入文本框,修改SET FILTER TO命令的条件即可。如果对单表进行查询,用这种设计方法更能显出优势,直接将要查询的数据表加入数据环境,代码编写简单,易于实现。

4 结束语

该文对VFP查询表单的涉及进行了探讨,利用SQL-SELECT、参数化视图和数据过滤器等方法设计并实现了查询表单,详细说明了设计思路及步骤,提供了事件代码。利用SQL-SELECT方法设计查询表单,关键在SELECT语句。利用参数化视图,关键在参数化视图的设计。数据过滤器方法关键在数据源的组织和SET FILTER TO命令中条件表达式的表示。

参考文献:

[1] 王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.

[2] 刘瑞新,汪远征.Visual FoxPro程序设计教程[M].北京:电子工业出版社,2006.

[3] 杨佩理,陶瑜.Visual FoxPro数据库设计教程[M].北京:机械工业出版社,2004.

上一篇:基于遗传算法的港口装箱问题的研究 下一篇:影片剪辑的妙用