实现PowerBuilder数据窗口的多表更新

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. 两表更新成功后,把两表的列属性、主键属性改回到初始状态,以便为下一次的两表更新调用做好准备。

时间: 2024-12-23 02:22:29

实现PowerBuilder数据窗口的多表更新的相关文章

PowerBuilder数据窗口的数据缓冲区

DATAWINDOW的四个缓冲区 在PowerBuilder中,DataWindow是用户前端用来存储.操纵数据的对象.在每一个DataWindow对象中有4个二维表作为数据缓冲区,用来存储查询到的数据.用户在DataWindow中对数据处理系统内部的操作实际上都是将数据在这几个缓冲区中进行的修改和移动,最后在用户提交数据库时,系统根据这四个缓冲区中的信息形成SQL的IN-SERT,UPDATE,DELETE等语句.这四个缓冲区是: 1.Primary Buffer 这个缓冲区是存放填充窗口中D

PB中数据窗口的精确页面打印技术

1.引言 自PowerBuild4.0问世以来,以其简洁高效的集成开发环境.强大的数据窗口技术.(几乎)无所不能的数据库访问能力,越来越受到编程人员的青睐.据Sybase自己的统计,目前全球有60万程序员和系统分析人员在使用他们的Powerbuilder和S-designer,进行各种类型的应用程序开发.最新发布的PowerBuilder6.0族系列开发工具,直接支持ActiveX技术.ServerPush技术,对分布式计算模型的定义更加明确,实现更为简便,并可以利用数据窗口直接生成HTML格式

PB数据窗口多表更新的实现

PowerBuilder的数据窗口对象是其特有的智能对象,其封装性好.功能强大.表现形式丰富多样,为此,许多MIS开发人员对PowerBuilder推崇备至,将其视为首选开发工具. 一般情况下,一个数据窗口只能更新一个数据库表,但在MIS开发过程中,我们经常遇到这种情况:一个数据窗口中由两个或更多个数据库表作为数据源,并需要对其进行录入或修改,如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题.笔者在某管理信息系统的开发过程中,尝试了几种双表更新的解决方法,选出一种比较好的方案,以

深入了解PowerBuilder的数据窗口

PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具,自问世以来深受开发人员的好评.Datawindow是PB中获取专利技术的控件,它对数据的处理方法相当简洁,数据窗口能处理各种显示格式.进行报表打印,对复杂的嵌套报表同样处理自如. 数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好,在运行时将所要的数据从数据库服务器上下载到客户机上处理,然后将更改后的数据进行提交(Commit)或回滚(Roll

pb-PB更新数据窗口的问题

问题描述 PB更新数据窗口的问题 获取当前操作员的科室代码 操作员代码 生成就诊号 取服务器时间赋值给以上字段 其他信息输入完成后 保存进数据库 全局变量是go_user.UserID这个就是操作员工的工号,科室代码的话在gy_ksdm里面有,就诊号的话MS_GHMX这里面有jzxh, dw_1.object.ksdm[1] =go_user.UserID//"select gy_ygdm.ksdm from gy_ygdm where ygdm=go_user.UserID " dw

判断字段是否被更新 新旧数据写入Audit Log表中_MsSql

Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy

c#-C# 更新报表rdlc定义,请使用“报表数据”窗口,VS2012找不到窗口啊???

问题描述 C# 更新报表rdlc定义,请使用"报表数据"窗口,VS2012找不到窗口啊??? 微软CSDN 更新报表定义中的数据集 在 Visual Studio 报表设计器中打开客户端报表定义 (.rdlc) 文件. 从"视图"菜单中选择"报表数据". "报表数据"窗口会随即显示. 您可以使用以下选项....... 没找到视图下的报表数据啊???? 解决方案 请下载ReportBuilder3.msi工具来设计你的模板

判断字段是否被更新 新旧数据写入Audit Log表中

Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy

在PowerScript脚本中访问数据窗口中的数据

访问|脚本|数据 在PowerScript脚本中访问数据窗口中的数据张健姿 01-6-22 下午 03:50:25 在4.0 以 前 的 版 本, 如 果 您 想 在PowerScript 脚 本 中 访 问数 据 窗 口 中 的 数 据, 方 法 只 有 一 种, 那 就 是 使 用SetItem 和GetItem 系 列 的 函 数, 指 定 您 所 要 访 问 的 某 一 行 列 的 值, 这 一 方 法的 局 限 性 在 于 您 一 次 只 能 访 问 到 一 个 数 值. 而 在5.0