powerbuilder的数据窗口对象是其特有的智能对象,其封装性好、功能强大、表现形式丰富多样,为此,许多mis开发人员对powerbuilder推崇备至,将其视为首选开发工具。
一般情况下,一个数据窗口只能更新一个数据库表,但在mis开发过程中,我们经常遇到这种情况:一个数据窗口中由两个或更多个数据库表作为数据源,并需要对其进行录入或修改,如何给出多表更新的通用解决方案就成为mis开发人员不容回避的问题。笔者在某管理信息系统的开发过程中,尝试了几种双表更新的解决方法,选出一种比较好的方案,以飨读者。
一、具体步骤
1. 在数据窗口建立时,选择sql select,显示风格可以是tabular、grid或freeform中的任一种。选出两表需要录入或修改的列,其中两表的主键和非空列必须选中,确定选择条件,建立连接关系。
2. 在选单“rows/update”中选择第一个表的全部数据项为可更新项。
3. 把两表需要修改项的tab order数值改为非0值,使其在数据窗口中成为可修改项。
为了使方案具有通用性,建立全局函数f—update—2table,有五个参数:dw—obj、table1、table2、key1、key2,分别代表所要更新的数据窗口、两表表名和两表主键列名,其中dw—obj为datawindow类型,其余四参数均为string类型。该函数返回值为boolean型,返回true表示成功,返回false表示失败。
二、函数思路
1. 先针对第一个数据库表调用update函数更新。注意参数的使用:第一个参数作用是控制数据窗口更新前是否强制性调用accepttext(),在数据窗口更新前通过有效性验证;第二个参数是控制更新标志的复位,为true时更新标志复位,为false时更新标志不复位。
2. 更改数据窗口的updatetable属性,使其指向第二个表,并把第一个表的各数据项update属性和主键列的key属性改为no,接着把第二个表的各数据项update属性和主键列的key属性改为yes。
3. 调用update函数更新第二个表。
4. 两表更新成功后,把两表的列属性、主键属性改回到初始状态,以便为下一次的两表更新调用做好准备。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器