利用工具进行数据库数据的复杂查询
13 安 静 2 1935/05/04 1954/11/13 457.30
2 付石龙 1 1928/03/21 1935/05/06 947.00
5 魏 芳 2 1917/05/21 1933/05/21 937.00
8 李 四 1 1939/05/31 1960/07/13 1,128.80
9 王丽立 1 1917/05/21 1933/05/21 745.00
但这种方法要求操作者对数据库的结构有充分的了解,例此数据库有多少个表,有多少个数据项,这些数据项分别属于哪一个表等。显然,这是数据库管理员的工作范畴。对用户,即使了解SQL语法,也只能完成简单的查询,对复杂的查询工作简直是望尘莫及了。也就是说单单是SQL语句,并不能很好地完成数据库的复杂查询,必须要与其他技术配合使用。另外,使用SQL语句进行查询,只能直接反映每一列的信息,而我们的43张基本表是尽可能地保存代码以保证数据的规范且节约存储空间。也就是说,我们能得到准确的查询结果,但得到地却是整篇的代码(例上表中的sex列),这对开发者和使用者都难以接受。如果能够将整篇的代码自动转换成所表达的文字,那当然是再好不过了。
3. 借助PowerBuilder实现综合信息的查询
目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。
PowerBuider是美国著名的数据库应用开发工具生产厂家Powersoft公司于1991年6月推出的功能强大、性能优异的开发工具,它是一种面向对象的、具有可视图形界面的、快速的交互开发工具。智能化的数据窗口对象是其精华所在。利用此对象可以操作关系数据库的数据而无需写入SQL语句,即可以直接检索、更新和用多种形式表现数据源中的数据。但要注意,必须使数据窗口成为窗口(Window)下数据窗口控制的一个连接对象,数据窗口才能使用户在应用执行期间访问数据库中的数据。
利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。例如:在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录……)将其用两个数据窗口控制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同,如图2所示。(略)
用这种方法实现查询优点突出,例:通过设置数据窗口中对应列的编辑风格(
Edit Styles)为相应的下拉式数据窗口(DropDownDataWindow),使显示的元组文字化。注意,这要事先建好下拉式数据窗口。设置数据窗口中对应列的编辑风格同样可满足其它显示需要。利用数据窗口的风格特点:查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。
综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。但是如我们问题的描述,如果我们需要的查询项随机地来自这43张表中的数据项,显示项也是随机地。这种任意条件的组合,可选输出项的显示称为动态查询(Dynamic Query)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这43张表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。
4. 动态查询的实现
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。
动态地创建一个数据窗口,应用程序需要执行下列任务:
·动态地构造SQL语句。
·用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:
1)动态地生成SQL语句,根据SQL的语法:SELECT stringa
FROM stringb
WHERE stringc
也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论