利用工具进行数据库数据的复杂查询
面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。?
4. 动态查询的实现?
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。?
动态地创建一个数据窗口,应用程序需要执行下列任务:?
·动态地构造SQL语句。?
·用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:?
1)动态地生成SQL语句,根据SQL的语法:SELECT stringa?
FROM stringb
WHERE stringc?
也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即可构造。?
注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。?
在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:?
str="select"+stringa+"f
2)在现在的事物对象里利用相关的SyntaxFromSQL()函数生成符合数据窗口语法的字符串:
? exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码?
其中:strsty为数据窗口的显示风格,例:?
strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')"?
3) 创建数据窗口对象?
dw_que.create(exp)?
这样就实现了用户要求的随机查询。?
在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。?
根据数据窗口的动态特性,对于那些运行时才能确定的数据窗口采用动态方式创建,使应用程序能更灵活地满足用户的需求。?
5. 小结?
使用SQL语句是查询操作的基础,但如何根据查询的要求自动的构造最贴切的SQL语句是问题的关键。利用PowerBuilder中的数据窗口使问题简化,如何通过嵌入动态生成的SQL语句动态地生成数据窗口是解决问题的根本。将查询条件的输入实现多级菜单选择将查询结果文字化,使复杂查询问题解决得更完善。动态查询的方法,不仅能应用于人事管理信息系统,同时也是解决其他需要复杂查询的数据库应用系统的途径。这种动态查询方法的在数据库应用系统的使用,避免了应用系统开发中开发者冥思苦想所有可能的查询条件,而系统运行中用户总遇到有些查询要求无法满足的矛盾。动态查询的实现,缩短了开发周期,减少了产品维护的工作。
本文链接地址:http://www.oyaya.net/fanwen/view/176138.html
4. 动态查询的实现?
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。?
动态地创建一个数据窗口,应用程序需要执行下列任务:?
·动态地构造SQL语句。?
·用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:?
1)动态地生成SQL语句,根据SQL的语法:SELECT stringa?
FROM stringb
WHERE stringc?
也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即可构造。?
注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。?
在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:?
str="select"+stringa+"f
rom"+stringb+"where"+stringcl+stringc2?
2)在现在的事物对象里利用相关的SyntaxFromSQL()函数生成符合数据窗口语法的字符串:
? exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码?
其中:strsty为数据窗口的显示风格,例:?
strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')"?
3) 创建数据窗口对象?
dw_que.create(exp)?
这样就实现了用户要求的随机查询。?
在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。?
根据数据窗口的动态特性,对于那些运行时才能确定的数据窗口采用动态方式创建,使应用程序能更灵活地满足用户的需求。?
5. 小结?
使用SQL语句是查询操作的基础,但如何根据查询的要求自动的构造最贴切的SQL语句是问题的关键。利用PowerBuilder中的数据窗口使问题简化,如何通过嵌入动态生成的SQL语句动态地生成数据窗口是解决问题的根本。将查询条件的输入实现多级菜单选择将查询结果文字化,使复杂查询问题解决得更完善。动态查询的方法,不仅能应用于人事管理信息系统,同时也是解决其他需要复杂查询的数据库应用系统的途径。这种动态查询方法的在数据库应用系统的使用,避免了应用系统开发中开发者冥思苦想所有可能的查询条件,而系统运行中用户总遇到有些查询要求无法满足的矛盾。动态查询的实现,缩短了开发周期,减少了产品维护的工作。
《利用工具进行数据库数据的复杂查询(第3页)》