APP下载

在数据库应用系统中实现动态查询的研究

2009-05-24杨明远金喜波刁树民张晓勇

关键词:汽配字段数据表

杨明远 金喜波 刁树民 张晓勇

摘要:本文研究了数据库PowerBuilder如何实现动态查询,并以汽配管理系统为例,探讨动态查询在汽配管理系统中的制作和实现。详细介绍了数据表及字段的选择、两个字符型变量和WHERE 子句的生成、数据表间的关联和关系二维表的设计及创建、Datawindow的生成并引入两个重要函数。

关键词:实现 动态查询 PowerBuilder

中图分类号:TP311.132 文献标识码:A

0 引言

PowerBuilder是现今最为流行的数据库前端开发工具。掌握PowerBuilder开发工具固然重要,但运用开发工具开发一个有效的、易维护的、易升级的、功能强大的管理系统尤为重要。本文利用PowerBuilder开发工具应用在汽配管理系统为例,探讨了汽配管理系统的制作方法,着重研究了动态查询在汽配管理系统中的实现方式,延伸了Powerbuilder开发工具实用性。

1 汽配管理系统的系统分析

本系统是面向汽车配件销售管理的管理信息系统。该系统能对汽车配件行业进行进货、销售、存储的有效管理,且能集中管理汽车配件的应收应付帐,并能实现查询分析统计等功能,及时响应企业汽车配件进销的快速查询和分析,使企业经营运作物流清晰,经营状况一目了然。汽配管理系统数据表结构及表间关系详见图1。

2 动态查询的实现

在PowerBuilder中,动态查询的实现归根结底就是在应用程序中完成一个Datawindow的制作,而可通过SQL语句的转换得来[1]。因此,如何生成SQL语句就成了问题的关键。

分析SQL的SELECT语句:

Select数据表.字段名from数据表

……………第一部分

Where表间关联条件and查询条件

………………第二部分

从上述分析可以看出:SQL语句是有数据表及其字段、Where子句与表间关联等几部分组成的。寻找和利用其特点,就有可能实现动态查询。

2.1 数据表及字段的选择 数据表及字段的选择是指选择数据库中具体的数据表及所需查询的表字段,完成SQL语句的第一部分制作。在汽配管理系统中,供用户查询的数据表有8个,其中每个数据表拥有多个字段。为方便用户的选择,采用列表选择的方法,分别用两个列表显示数据表及其字段。当用户通过第一个列表选择数据表时,在第二个列表中显示出第一个列表所选择的数据表的所有字段。在第二个列表中,双击所需的字段名。这样的操作就选定了数据表及字段。实现上述选择的关键是:在汽配管理系统中的动态查询模块里,定义了两个字符型实例变量:LS-database[ ]及LS-field,分别容纳所选定的数据表名及字段名字符串[2]。在字段列表框双击事件中,又定义了两个字符型局部变量:Se-database及Se-field分别容纳双击后选定的数据表名和字段名。其实现流程图详见图2。

从图2可知,数组LS-database[ ]及LS-field中存储的内容,便是选定的数据表和字段名。

2.2 WHERE子句的生成 SQL语句的第二部分是Where子句。该子句是SQL语句的一个关键部分,用户正是通过它来满足检索的要求。Where子句是有逻辑关系符、检索字段名、检索操作符及检索值组成。其中逻辑关系符是指在Where子句间的“或者”和“并且”的关系。检索字段名是指用户提出检索要求的字段名。检索值是指对检索字段提出的要求。检索操作符是指检索字段与检索值之间的关系。Where子句的四个组成部分分别由三个下拉列表和一个单行编辑构成,其中检索字段下拉列表项由数据表及字段选择中选择出来的字段名组成。Where子句实现思路:通过循环算法,把多个Where子句的四个组成部分组合起来,形成条件查询子句。

2.3 数据表间的关联 在前两节的基础上即可顺利地选择出与字段,并生成Where子句及SQL语句。这时,制作并未完成。因为数据表间关联这个关键部分还没有解决。在Datawindow的人机交互制作过程中,表间关联可自动生成。但在应用程序里,生成Datawindow的过程必须通过应用程序设计编制才能实现[3]。表间关联的基本思路是:在PowerBuilder的数据库中,表间的关联是固定的,表与表之间的关联情况可以看成为一个二维表的关系。因此,在系统中设计了关系表查询方案,以解决数据表间的关联问题。所谓关系表,是指一个能反映任意两个表相联关系的二维表格。若两个表相关联,则在二维表格交叉栏内填入关联字段。若两个表不关联,则在二维表格交叉栏内填入空格。建立好关系表后,根据在数据表与表字段选择中所选择的数据表名(存储在数组LS-database[ ]中),在关系表中,两两查询关系。若两表关联,根据交叉项中所得的关系在Where子句中填入相应的语句即可完成。

2.4 Datawindow的生成 在表间关联子句生成后,SQL语句的制作便完成了。但如何将SQL语句转换成Datawindow呢?这里需要引进两个函数:SyntaxfromSQL()和Create():

函数SyntaxfromSQL()用于产生一个Datawindow,它拥有三个参数:第一个参数是用于传递SQL语句(即在2.2中所生成的SQL语句);第二个参数用来表示Datawindow的风格;第三个参数是在Datawindow生成过程中出错时保存错误信息。

函数Create(),使用从函数SyntaxfromSQL()中返回的属性信息,在运行状态下建立一个Datawindow。它有两个参数:第一个参数即是从SyntaxfromSQL()函数中返回的字符串变量。第二个参数用在出错时存储出错信息。

在系统中的具体实现代码如下:

String sq1-statement,present,error,answer

SQL-statement=……

//SQL-statement中存储着SQL描述语句

Present =”Style(type=grid)”

// Present 中存储着Datawindow风格等属性

answer=sqlca. SyntaxfromSQL()(SQL- statement, present,error)//产生Datawindow

Dw-1. Create(answer, error)//建立Datawindow

至此完成了动态查询的全部制作,实现了在PowerBuilder中动态查询。

3 结束语

通过以上建立的对数据表及字段的选择,把多个Where子句的四个组成部分组合起来表与表之间的关联看成了一个二维表的关系,运用函数SyntaxfromSQL()和函数Create()生成Datawindow,实现了在PowerBuilder中动态查询。

参考文献:

[1]崔巍.PowerBuilder8.0数据库应用系统开发教程[M].北京:清华大学出版社.2003.1:105-109.

[2]何军.PowerScript语言·事件·函数[M].北京:电子工业出版社.2003.6:255-258.

[3]赵君等.利用重用查询计划实现数据库性能的优化[J].长春:吉林大学学报.003.4:81-83.

猜你喜欢

汽配字段数据表
带钩或不带钩选择方框批量自动换
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
湖北省新冠肺炎疫情数据表
柳州汽车后市场汽配业发展研究
探讨CNMARC格式中200字段题名的规范著录
无正题名文献著录方法评述
汽配会是参展商可持续发展的“高速路”