刘金燕
(河北秦皇岛广播电视大学,河北 秦皇岛 066001)
目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口倍受欢迎。
利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。例如:在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录……)将其用两个数据窗口控制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同。
在以PB开发工具编写的应用程序中,可使用数据窗口对象的列校验属性来检查输入数据的正确性;在窗口输入界面中还可以采用下拉列表、复选框、单选按钮等控件,实现固定值选取输入来确保数据的正确;另外,应用程序本身也可以对输入数据进行有效检查来确保数据的完整性。
因PB的每一操作都是基于控件中的事件,所以一个完整的事务处理要集中在一个事件或一个操作单元中。例如,门诊划价收费中的付款处理;同一个收费序号下的数据,经过处理后要记入明细帐、一级明细帐、总帐,同时还要更新收费序号登记表等;所有这些处理算是一个完整的任务,必须等所有的语句都执行成功后,才能对数据库进行提交;如果有一条语句未执行成功,就要撤消该事务的一切操作,回退到事务开始的状态,这样才能保证数据的一致。利用客户端应用程序实现数据完整性的方法,其主要特点是:交互性好、功能强,但编程偏大、维护困难、可靠性差。
由上述可见,在数据库应用系统中,实现数据完整性的方法各有其特点。对具体应用系统,可根据需要采用其中一种或多种方法来建立数据完整性的机制,其策略为:
(1)对于通过窗口操作输入的数据,一般采用客户端应用程序来确保数据的完整性。这样,一方面可把非法数据在提交到数据库之前就拒之门外,另一方面可使用户及时得到操作反馈信息,做出正确的选择。
(2)对于通过其他途径转入的数据,一般需要服务器端数据库管理系统来实现数据的完整性。
(3)对于数据一致性的维护,宜于由服务器端数据库的触发器或表定义的约束来实现。这样可降低客户端应用程序的开发量,提高应用系统的运行效率、可维护性及可靠性。
(4)对于数据完整性和安全性要求较高的系统,则需要采用多层保护屏障来确保数据的完整性和安全性。如:既在客户端应用系统程序检查输入数据的有效性,同时又在服务器端数据库中建立表的约束、规则、缺省和触发器等进行数据完整性约束。这样可以提高系统数据的可靠性和安全性。
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。
动态地创建一个数据窗口,应用程序需要执行下列任务:
动态地构造SQL语句。
用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:
4.1 动态地生成SQL语句,根据SQL的语法:SELECTstringa FROMstringb
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+"from"+stringb+"where"+stringcl+stringc2
4.2 在现在的事物对象里利用相关的SyntaxFromSQL()函数生成符合数据窗口语法的字符串:
exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码
其中:strsty为数据窗口的显示风格,例:strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')"
4.3 创建数据窗口对象
dw_que.create(exp)
这样就实现了用户要求的随机查询。
在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。
根据数据窗口的动态特性,对于那些运行时才能确定的数据窗口采用动态方式创建,使应用程序能更灵活地满足用户的需求。
将查询条件的输入实现多级菜单选择将查询结果文字化,使复杂查询问题解决得更完善。动态查询的方法,不仅能应用于人事管理信息系统,同时也是解决其他需要复杂查询的数据库应用系统的途径。这种动态查询方法的在数据库应用系统的使用,避免了应用系统开发中开发者冥思苦想所有可能的查询条件,而系统运行中用户总遇到有些查询要求无法满足的矛盾。
[1]胡晓彦,桂炳东.实施计算机信息管理,提高检验质量和工作效率.江西医学检验,2007-10-15期刊.
[2]孟岩.计算机信息管理系统安全的对策探讨.信息与电脑(理论版),2010-06-15期刊.