基于子数据窗口技术的开发技巧
2014-11-07易同贸
易同贸
提要:该文介绍子数据窗口对象(DataWindowChild )的概念及使用方法和技巧,以财务管理系统设计为例,研究动态字段查询的实现方法,利用开发工具PB特有的数据窗口技术,实现了按照所选字段的动态查询,满足系统查询的需要。
关键词:PowerBuilder;子数据窗口对象;(DataWindowChild )动态查询
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)29-6871-05
PowerBuilder(简称PB)是一个功能超群、使用方便、易于开发复杂应用系统的前端数据库开发工具。PB一直深受国内外广大用户喜爱,拥有广泛的用户群。作为跨平台的面向对象的第四代的数据库开发工具,PB有着许多优势和其独到之处, 其中一个很大的特点就是提出了数据窗口对象(DataWindow)的概念。数据窗口对象也PB的一种对象类型,与其它对象不同的是,数据窗口对象是专门为了访问后台的数据库服务的,在数据窗口对象中可以定义数据的来源和数据的显示风格,这样在开发应用程序过程中,我们就可以把主要精力放在对数据的处理上,而不用关心具体数据的来源,因为在数据窗口对象中已经定义好了数据的来源。可以说,数据窗口是PowerBuilder的核心,在对数据库的开发过程中,无论是录入、查询、统计还是报表,都离不开数据窗口。在实际编程过程中,如何用好用活数据窗口对象是开发出的产品好坏的重要标志。为了使数据窗口更灵活、更方便,我们经常要使用到子数据窗口对象(DataWindowChild )。什么是子数据窗口对象?何时用到子数据窗口对象?如何操纵子数据窗口对象?使用过程中有什么技巧?等等这些问题是PB软件开发者必须重视的和必然要面临的,在此,该文将给以介绍:
1 数据窗口对象的概念
子数据窗口对象也是一种数据窗口对象,只是它嵌入在其它的数据窗口对象(父对象)中,于是形象地称之为子数据窗口对象。
2 子数据窗口对象的类型
子数据窗口对象通常有三种形式:
1) 合成数据窗口对象(Composite)内的子数据窗口对象
为了达到不同的设计风格和效果,PB系统中预先设定数据窗口对象的数据表现风格有11种,合成数据窗口对象是其中一种。它是在合成数据窗口对象内又包含其他数据窗口对象,将多种数据报表组合在一起,达到真实报表的效果。合成数据窗口对象实际上只是一个框架或容器,事先要设置好子数据窗口,通过PB向导将子数据窗口嵌入到框架中,保存合成数据窗口后还可以通过插入方式往框架内添加新的子数据窗口,同时也可以删除不要的子数据窗口。合成数据窗口对象内包含两个子数据窗口,这两个子数据窗口分别显示不同的内容。
2) 报表形式(Report)的子数据窗口对象
这种数据窗口与上种形式上很相似,通过插入方式往框架内添加新的子数据窗口控件(Report)。具体操作为:在一个数据窗口画板中先点击菜单insert→control→report,选择已经存在的某个数据窗口,再点击数据窗口所在地方就可以产生一个报表形式(Report)的子数据窗口对象。与上种不同的是,这种数据窗口内自身就存在数据源,可以根据要求选择相应的字段(列),并且还可以对它们进行各种修改和控制,而上种数据窗口没有这样的特点。父数据窗口为有一个子数据窗口,其中父数据窗口和子数据窗口的数据源是不一样,在程序中可以分别加以控制,使程序更灵活多样。
3) 下 拉 式 数 据 窗 口 (DropDown DataWindow)
这种类型的数据窗口与前面的类型是完全不同的。在一个数据窗口对象(父对象)中将其某列挂接到另一个数据窗口(子对象),当点击该列时,就弹出一个下拉框,用户可以从下拉框中选择所需数据,大大提高录入效率,这样的子数据窗口就称之为下 拉 式 数 据 窗 口。如图所示,父数据窗口对象中的列“总帐科目”挂接到另一个数据窗口(用于显示总帐科目的编码和名称),程序运行时,每当点击“总帐科目”列,就会弹出一个下 拉 式 数 据 窗 口,显示所有的总帐科目的编码和名称,用户只须点击即可,这样既方便用户又提高效率。
子数据窗口总共有三种形式,它们有相似之处,也有许多差异,那么它们分别用于什么情况呢?
数据窗口的主要目的就是对数据的处理,大致可分为三个方面:1) 数据的录入和修改,其中包含有插入、删除和保存等功能;2) 数据的统计分析,如学生成绩的总分和平均分数以及排名次,有时候用到统计表,有时候用到统计图,而且有时候用到统计表和统计图混用,并且还需要将所得结果打印出来,达到所见即所得;3) 数据的查询和打印,有简单的固定式的查询方式,有高级的自定义的查询方式,如全字段查询和选字段查询,还用到模糊查询技术。数据的处理是非常复杂的,在数据库管理系统软件开发过程中占有重要的地位,通过单一的数据窗口是难以完成如此复杂的数据处理的,因此编程中要注视多数据窗口的协同作用,也就是在一个数据窗口中嵌入其它的数据窗口(子数据窗口)。
众所周知,为了节省储存空间,我们通常将一些字段设置成数值型的,而在用户录入或修改这些字段内容时我们要给用户以字符型的交互界面,怎么样达到这种设计呢?这时,第三种子数据窗口就有了用武之地,它可以很轻松地将数值型和字符型的数据加以转换,不仅如此,还可以保证数据的有效性和完整性。既给用户提供了良好的交互界面,同时又大大提高用户的工作效率。因此下拉式数据窗口在数据的录入和修改过程中的使用的非常普通和常见的。
现实生活中图表和报表种类繁多形式多样,编制出的软件一定要符合用户的习惯,要设计出与实际表样相符合的用户界面,程序设计中要充分分析各种报表的结构,设计出相应的数据窗口。对于复杂的报表和图表,我们就要利用合成数据窗口对象加以实现,或者在已设计好的数据窗口中再根据需要插入新的报表(Report)。endprint
在PB数据库管理系统编程中子数据窗口技术运用非常广泛,它们可以说是无所不能的,如何正确使用它们呢?
3 子数据窗口对象的使用
可以分成静态的和动态的使用:前者是在设计阶段将各数据窗口对象按要求设计好,并将其与一个数据窗口控件连接起来,执行程序过程中打开相应窗口即实现其功能;后者是在程序运行阶段动态地生成各数据窗口对象,并将其与一个数据窗控件连接起来,同样也可达到相应的效果。在实际编程过程中,由于程序的复杂性不同,可以选择不同的方式来使用。前者设计简单方便,不需要进行编码,但实现的功能比较简单,相反后者设计比较复杂,必需进行一定的编码,但是,它可以在用户的执行过程中动态的实现所需的数据窗口,具有非常强的灵活性。在此,该文要针对后者加以论述。主要有两种方式来加以实现:
方式一、先使用函数GetChild(()获取子数据窗口的句柄,再利用数据窗口的有关属性或函数来达到各种操纵数据的目的。
方式二、通过编码改变数据窗口控件的DataObject属性,通过编码动态创建一个新的数据窗口对象,并将其与一个数据窗口控件连接起来。
根据子数据窗口的不同类型,要选择不同的方式来实现。对于合成数据窗口内的子数据窗口和下拉式数据窗口,两种方式都可以使用,但对于报表形式的子数据窗口却只能用方式二来加以实现。
4 子数据窗口对象的使用及技巧
笔者曾在编制某单位的财务管理系统中大量使用子数据窗口技术,下面结合实例介绍子数据窗口的使用方法及一些技巧。熟悉财务管理工作的人都很清楚,会计凭证是会计工作的重要环节,同样会计凭证管理模块也是财务管理系统的一个重要组成部分。会计凭证的处理包括录入、修改、审核以及查询等等。财务制度对会计凭证的录入(修改)有很高的要求,其中对会计科目的要求是这样的:会计科目采用二级管理,总账科目和明细科目,每笔记录中总账科目和明细科目不能为空,并且总账科目和明细科目要配套。例如总账科目为现金101,相应的明细科目(系统管理员预设)有人民币10101或美元10102,则明细科目只能从人民币或美元选择,不能选择其它内容。又例如总账科目没有相应的明细科目(系统管理员预设),则明细科目必须和总帐科目相同,不能选择其它内容。会计科目(总账科目和明细科目)的名称和代码的设置由系统管理员(或财务主管)负责,会计在录入(修改)凭证时只能从中选择内容,不能自己进行修改。如何保证录入(修改)凭证时会计科目的正确性呢?
下面先将后端数据库的设计介绍一下。共有三个表:分别为凭证表、科目表和人员表。
1) 静态设计下拉式数据窗口
首先对凭证表和科目表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id,摘要、总帐科目、明细科目、借方金额和贷方金额;dw_code包括字段科目级次、科目编码和科目名称。打开dw_main数据窗口画板,用鼠标右键点击字段总帐科目(或明细科目),在下拉菜单中选择Properties...(属性),则系统会弹出该列的属性对话框,在其中选择Edit(编辑)项,并在Style(风格)下拉列表框中选择DropDownDW 项, 然后在下面的Options(选项)框中作具体的选项配置:在DataWindow 下拉框中选择已设计好的代码数据窗口dw_code 作为下拉式数据窗口;在DisplayColumn(显示列)下拉框中选择科目名称字段;在Data Column(数据列)下拉框中选择科目编码字段,这表示显示的是科目名称字段的内容,而实际存于凭证表中的是科目编码字段的内容。 至此,数据窗口设计完毕。
值得强调的是,在设计数据窗口时一定要将需挂接下拉式数据窗口的字段的属性Edit→AutoRetrieve设置为NO,即去掉前面的勾,否则上述代码不起作用。
通过上述两个事件可有效地控制总帐科目和明细科目的弹出内容。当点击总帐科目时就弹出所有的总帐科目供用户选择,当点击明细科目时就弹出与当前行的总帐科目相应的明细科目供用户选择,不会出现其它内容。如此这样,不仅给用户良好的录入界面,快捷的输入方式,而且还保证了录入数据的准确性和完整性,从而圆满的完成了设计任务。
上面介绍了下拉式数据窗口的典型应用之一,在整个程序设计中还用到了其它形式的子数据窗口,在此就不详细介绍了。总而言之,子数据窗口是对一般简单的数据窗口的补充和完善,它可以完成更复杂的设计要求,是PB程序设计人员的一个重要手段和法宝。
参考文献:
[1] PB技术精粹四CHM-PB书籍教程[EB/OL].[2009-12-03]. http://www.hur.cn/soft/2009/3748.html.
[2] 下拉数据窗口(DropDown DataWindow)的使用范例_点点滴滴[EB/OL].http://blog.sina.com.cn/s/blog_54497f4d0100ldmf.html.
[3] 王建华.PowerBuilder中下拉数据窗口应用探讨[J].平顶山师专学报,2003(5).
[4] 张志远.PowerBuilder应用技巧讲座(三)——之数据窗口及打印程序的实现[J].电脑编程技巧与维护,2003(8).endprint
在PB数据库管理系统编程中子数据窗口技术运用非常广泛,它们可以说是无所不能的,如何正确使用它们呢?
3 子数据窗口对象的使用
可以分成静态的和动态的使用:前者是在设计阶段将各数据窗口对象按要求设计好,并将其与一个数据窗口控件连接起来,执行程序过程中打开相应窗口即实现其功能;后者是在程序运行阶段动态地生成各数据窗口对象,并将其与一个数据窗控件连接起来,同样也可达到相应的效果。在实际编程过程中,由于程序的复杂性不同,可以选择不同的方式来使用。前者设计简单方便,不需要进行编码,但实现的功能比较简单,相反后者设计比较复杂,必需进行一定的编码,但是,它可以在用户的执行过程中动态的实现所需的数据窗口,具有非常强的灵活性。在此,该文要针对后者加以论述。主要有两种方式来加以实现:
方式一、先使用函数GetChild(()获取子数据窗口的句柄,再利用数据窗口的有关属性或函数来达到各种操纵数据的目的。
方式二、通过编码改变数据窗口控件的DataObject属性,通过编码动态创建一个新的数据窗口对象,并将其与一个数据窗口控件连接起来。
根据子数据窗口的不同类型,要选择不同的方式来实现。对于合成数据窗口内的子数据窗口和下拉式数据窗口,两种方式都可以使用,但对于报表形式的子数据窗口却只能用方式二来加以实现。
4 子数据窗口对象的使用及技巧
笔者曾在编制某单位的财务管理系统中大量使用子数据窗口技术,下面结合实例介绍子数据窗口的使用方法及一些技巧。熟悉财务管理工作的人都很清楚,会计凭证是会计工作的重要环节,同样会计凭证管理模块也是财务管理系统的一个重要组成部分。会计凭证的处理包括录入、修改、审核以及查询等等。财务制度对会计凭证的录入(修改)有很高的要求,其中对会计科目的要求是这样的:会计科目采用二级管理,总账科目和明细科目,每笔记录中总账科目和明细科目不能为空,并且总账科目和明细科目要配套。例如总账科目为现金101,相应的明细科目(系统管理员预设)有人民币10101或美元10102,则明细科目只能从人民币或美元选择,不能选择其它内容。又例如总账科目没有相应的明细科目(系统管理员预设),则明细科目必须和总帐科目相同,不能选择其它内容。会计科目(总账科目和明细科目)的名称和代码的设置由系统管理员(或财务主管)负责,会计在录入(修改)凭证时只能从中选择内容,不能自己进行修改。如何保证录入(修改)凭证时会计科目的正确性呢?
下面先将后端数据库的设计介绍一下。共有三个表:分别为凭证表、科目表和人员表。
1) 静态设计下拉式数据窗口
首先对凭证表和科目表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id,摘要、总帐科目、明细科目、借方金额和贷方金额;dw_code包括字段科目级次、科目编码和科目名称。打开dw_main数据窗口画板,用鼠标右键点击字段总帐科目(或明细科目),在下拉菜单中选择Properties...(属性),则系统会弹出该列的属性对话框,在其中选择Edit(编辑)项,并在Style(风格)下拉列表框中选择DropDownDW 项, 然后在下面的Options(选项)框中作具体的选项配置:在DataWindow 下拉框中选择已设计好的代码数据窗口dw_code 作为下拉式数据窗口;在DisplayColumn(显示列)下拉框中选择科目名称字段;在Data Column(数据列)下拉框中选择科目编码字段,这表示显示的是科目名称字段的内容,而实际存于凭证表中的是科目编码字段的内容。 至此,数据窗口设计完毕。
值得强调的是,在设计数据窗口时一定要将需挂接下拉式数据窗口的字段的属性Edit→AutoRetrieve设置为NO,即去掉前面的勾,否则上述代码不起作用。
通过上述两个事件可有效地控制总帐科目和明细科目的弹出内容。当点击总帐科目时就弹出所有的总帐科目供用户选择,当点击明细科目时就弹出与当前行的总帐科目相应的明细科目供用户选择,不会出现其它内容。如此这样,不仅给用户良好的录入界面,快捷的输入方式,而且还保证了录入数据的准确性和完整性,从而圆满的完成了设计任务。
上面介绍了下拉式数据窗口的典型应用之一,在整个程序设计中还用到了其它形式的子数据窗口,在此就不详细介绍了。总而言之,子数据窗口是对一般简单的数据窗口的补充和完善,它可以完成更复杂的设计要求,是PB程序设计人员的一个重要手段和法宝。
参考文献:
[1] PB技术精粹四CHM-PB书籍教程[EB/OL].[2009-12-03]. http://www.hur.cn/soft/2009/3748.html.
[2] 下拉数据窗口(DropDown DataWindow)的使用范例_点点滴滴[EB/OL].http://blog.sina.com.cn/s/blog_54497f4d0100ldmf.html.
[3] 王建华.PowerBuilder中下拉数据窗口应用探讨[J].平顶山师专学报,2003(5).
[4] 张志远.PowerBuilder应用技巧讲座(三)——之数据窗口及打印程序的实现[J].电脑编程技巧与维护,2003(8).endprint
在PB数据库管理系统编程中子数据窗口技术运用非常广泛,它们可以说是无所不能的,如何正确使用它们呢?
3 子数据窗口对象的使用
可以分成静态的和动态的使用:前者是在设计阶段将各数据窗口对象按要求设计好,并将其与一个数据窗口控件连接起来,执行程序过程中打开相应窗口即实现其功能;后者是在程序运行阶段动态地生成各数据窗口对象,并将其与一个数据窗控件连接起来,同样也可达到相应的效果。在实际编程过程中,由于程序的复杂性不同,可以选择不同的方式来使用。前者设计简单方便,不需要进行编码,但实现的功能比较简单,相反后者设计比较复杂,必需进行一定的编码,但是,它可以在用户的执行过程中动态的实现所需的数据窗口,具有非常强的灵活性。在此,该文要针对后者加以论述。主要有两种方式来加以实现:
方式一、先使用函数GetChild(()获取子数据窗口的句柄,再利用数据窗口的有关属性或函数来达到各种操纵数据的目的。
方式二、通过编码改变数据窗口控件的DataObject属性,通过编码动态创建一个新的数据窗口对象,并将其与一个数据窗口控件连接起来。
根据子数据窗口的不同类型,要选择不同的方式来实现。对于合成数据窗口内的子数据窗口和下拉式数据窗口,两种方式都可以使用,但对于报表形式的子数据窗口却只能用方式二来加以实现。
4 子数据窗口对象的使用及技巧
笔者曾在编制某单位的财务管理系统中大量使用子数据窗口技术,下面结合实例介绍子数据窗口的使用方法及一些技巧。熟悉财务管理工作的人都很清楚,会计凭证是会计工作的重要环节,同样会计凭证管理模块也是财务管理系统的一个重要组成部分。会计凭证的处理包括录入、修改、审核以及查询等等。财务制度对会计凭证的录入(修改)有很高的要求,其中对会计科目的要求是这样的:会计科目采用二级管理,总账科目和明细科目,每笔记录中总账科目和明细科目不能为空,并且总账科目和明细科目要配套。例如总账科目为现金101,相应的明细科目(系统管理员预设)有人民币10101或美元10102,则明细科目只能从人民币或美元选择,不能选择其它内容。又例如总账科目没有相应的明细科目(系统管理员预设),则明细科目必须和总帐科目相同,不能选择其它内容。会计科目(总账科目和明细科目)的名称和代码的设置由系统管理员(或财务主管)负责,会计在录入(修改)凭证时只能从中选择内容,不能自己进行修改。如何保证录入(修改)凭证时会计科目的正确性呢?
下面先将后端数据库的设计介绍一下。共有三个表:分别为凭证表、科目表和人员表。
1) 静态设计下拉式数据窗口
首先对凭证表和科目表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id,摘要、总帐科目、明细科目、借方金额和贷方金额;dw_code包括字段科目级次、科目编码和科目名称。打开dw_main数据窗口画板,用鼠标右键点击字段总帐科目(或明细科目),在下拉菜单中选择Properties...(属性),则系统会弹出该列的属性对话框,在其中选择Edit(编辑)项,并在Style(风格)下拉列表框中选择DropDownDW 项, 然后在下面的Options(选项)框中作具体的选项配置:在DataWindow 下拉框中选择已设计好的代码数据窗口dw_code 作为下拉式数据窗口;在DisplayColumn(显示列)下拉框中选择科目名称字段;在Data Column(数据列)下拉框中选择科目编码字段,这表示显示的是科目名称字段的内容,而实际存于凭证表中的是科目编码字段的内容。 至此,数据窗口设计完毕。
值得强调的是,在设计数据窗口时一定要将需挂接下拉式数据窗口的字段的属性Edit→AutoRetrieve设置为NO,即去掉前面的勾,否则上述代码不起作用。
通过上述两个事件可有效地控制总帐科目和明细科目的弹出内容。当点击总帐科目时就弹出所有的总帐科目供用户选择,当点击明细科目时就弹出与当前行的总帐科目相应的明细科目供用户选择,不会出现其它内容。如此这样,不仅给用户良好的录入界面,快捷的输入方式,而且还保证了录入数据的准确性和完整性,从而圆满的完成了设计任务。
上面介绍了下拉式数据窗口的典型应用之一,在整个程序设计中还用到了其它形式的子数据窗口,在此就不详细介绍了。总而言之,子数据窗口是对一般简单的数据窗口的补充和完善,它可以完成更复杂的设计要求,是PB程序设计人员的一个重要手段和法宝。
参考文献:
[1] PB技术精粹四CHM-PB书籍教程[EB/OL].[2009-12-03]. http://www.hur.cn/soft/2009/3748.html.
[2] 下拉数据窗口(DropDown DataWindow)的使用范例_点点滴滴[EB/OL].http://blog.sina.com.cn/s/blog_54497f4d0100ldmf.html.
[3] 王建华.PowerBuilder中下拉数据窗口应用探讨[J].平顶山师专学报,2003(5).
[4] 张志远.PowerBuilder应用技巧讲座(三)——之数据窗口及打印程序的实现[J].电脑编程技巧与维护,2003(8).endprint