`
Ben.Sin
  • 浏览: 234205 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

合理利用DW完成PB的多表更新

    博客分类:
  • PB
阅读更多
案例:有一个业务需要同时更新两个或以上的表
分析:
同时更新两个表,简单一点的就是用其中一个表做DW更新,同时用SQL更新另外一个表;或者页trigger实现其他表的更新。但这样对于相类似的业务就无疑是大大增加工作量。而且维护不方便。
但我们细细考虑一下,DW作为PB的利器自然有他独到的地方。更新属性就好像是为了这种多表更新而设计的。
PB更新数据库的时候首先看更新的table,然后看需要更新的column。也就是说,只需要在更新的时候设置好更新属性,就可以方便的实现多表更新了。
步骤可以简单理解为:更新的时候将表1作为可更新表,表1的column作为可更新column。更新完后再设置表2作为可更新表,表2的column作为可更新column。

实例:
假设有tabletbl_1(col_1, col_2), tbl_2(col_1, col3)

那么,DW的SQL就是
select  tbl_1.col_1,
             tbl_1.col_2,
             tbl_2.col_3
   from tbl_1, tbl_2
where tbl_1.col_1 = tbl_2.col_1

当DW作了一系列操作后,在更新的时候执行以下script

long ll_cnt = 0
int i = 0
string ls_table[2] = {'tbl_1', 'tbl_2‘}
string ls_col
string ls_col_dbname
string ls_update
string ls_updateable
string ls_error
boolean lb_update

// 循环table列表,实现多表更新
for i = 1 to upperBound(ls_table)
    // 循环dw的column
    for ll_cnt = 1 to long(dw_1.describe("DataWindow.Column.Count"))
        ls_col = dw_1.describe("#" + string(ll_cnt) + ".name")
        ls_col_dbname = dw_1.describe("#" + string(ll_cnt) + ".dbname")
       
        // 如果属于更新表的column或者key,设为可更新column
        // 这里也可以将公共column也列作可更新column
        if pos(ls_col_dbname, ls_table + ".") = 1 or &
                lower(dw_1.describe("#" + string(ll_cnt) + ".key")) = "yes" then
            ls_updateable = ".update=yes"
        else
            ls_updateable = ".update=no"
        end if
       
        ls_update += "~t" + ls_col + ls_updateable
    next
   
    // 设置更新table
    ls_update += "~tDataWindow.Table.UpdateTable='" + ls_table[i] + "'"
   
    // 更新设置无误后update
    ls_error = dw_1.modify(ls_update)
    if trim(ls_error) <> '' or ls_error <> '!' then
        if dw_1.update(true, false) = 1 then
             lb_update = true
        else
             lb_update = false
             // 退出for循环
             exit
        end if
    end if

nex

// 此处根据更新情况提交事务
if lb_update then
    commit;
    // 重设dw状态
    dw_1.resetupdate()
else
    rollback;
end if

//到这里就完成了多表更新了
分享到:
评论

相关推荐

    dw2xlsdemo_pb650_444 超强通用数据导出

    《dw2xlsdemo_pb650_444:PB6.5/444环境下的数据导出利器》 “dw2xlsdemo_pb650_444”是一款专...通过合理利用这个工具,开发者可以更专注于业务逻辑的实现,而非繁琐的数据转换任务,从而提升整体项目的质量和效率。

    PB自动美化grid风格的dw(grid自动转成tabular)

    本文将深入探讨如何利用PB实现自动美化grid风格的数据窗口,并将其转换为tabular风格,以及相关的功能增强。 1. **Grid风格与Tabular风格的区别**: - Grid风格的数据窗口通常以网格形式展示数据,行与列清晰划分...

    利用PB动态创建数据窗口

    ### 利用PB动态创建数据窗口 #### 引言 在使用PowerBuilder(简称PB)进行应用程序开发的过程中,经常会遇到需要动态创建数据窗口的情况。这主要是因为在某些应用场景下,用户可能希望自定义数据窗口的数据来源及...

    PB与Excel通讯

    标题:“PB与Excel通讯” ...通过合理设计DW和ChildDw数组,结合OLE对象的使用,可以在PB中实现高效且功能丰富的Excel数据处理能力。这对于企业级应用中常见的报表生成、数据导入导出等场景具有重要的实用价值。

    利用pb制作计算器,实现加减乘除

    标题中的“pb”指的是PowerBuilder,一款经典的面向对象的编程工具,主要用于开发企业级的应用程序。在这个项目中,我们将利用PowerBuilder来创建一个计算器程序,它具备基础的数学运算功能,包括加法、减法、乘法和...

    pb数据窗口打印pdf

    本文将深入探讨如何利用PB数据窗口来打印PDF,实现批量静默打印以及自动保存功能。 1. **PB数据窗口打印基础** PB数据窗口提供了丰富的打印功能,可以方便地将数据窗口中的内容输出到打印机或者文件。用户可以通过...

    PB调用PB自己制作的COM组件

    注意要点:经过测试可以调用普通函数取得返回值,而当调用函数中有open窗口的语句后,虽然也能打开窗口正常看到窗体中的控件,并且窗口的open事件也能成功执行,哪怕是dw中的数据也能正常显示。但是当鼠标点击任何...

    PB12.5自带框架

    PB12.5自带框架是PowerBuilder(PB)开发环境中的一种基础架构,它为开发者提供了构建应用程序的基础。PowerBuilder是一款由Sybase(现为...通过合理利用这些资源,可以显著提升开发效率,同时保证项目的稳定性和质量。

    PB自动下拉模糊检索

    PB自动下拉模糊检索是PowerBuilder(PB)开发中的一个重要功能,它极大地提升了用户界面的交互性和用户体验。在PowerBuilder中,DataWindow控件是核心数据展示和操作组件,而利用DataWindow实现自动下拉模糊检索,...

    PB条码打印功能

    综上所述,PB条码打印功能的实现涉及多个技术层面,从条码的生成到打印输出,每个环节都需要精细设计和严谨编程。通过合理的代码组织和良好的用户界面设计,PB可以为企业提供高效、灵活的条码打印解决方案。

    PB11[1].5_WEB客户端编程技巧

    4. **缓存优化**:合理利用浏览器缓存,减少对服务器的请求,提高数据加载速度。 通过上述方法,开发者可以有效地优化PB11.5的WEB客户端程序,提供更流畅、高效的用户交互体验。同时,掌握JavaScript和HTML的使用也...

    pb9版三测单

    在PB9实现的三测单系统中,开发者可能利用了PB的窗口、控件和事件处理机制来实现数据输入、存储和展示。例如,可能会有输入框供用户录入数据,按钮触发数据保存操作,而数据显示部分则可能通过DataWindow控件以表格...

    pb12.6数据窗口直接生成Word excel例子(源码).zip

    这个“pb12.6数据窗口直接生成Word excel例子(源码).zip”压缩包提供了关于如何利用PowerBuilder 12.6的数据窗口功能创建Word文档和Excel表格的示例代码。下面我们将详细探讨这个知识点。 1. **数据窗口...

    pb_eventid

    ### PB中自定义事件ID含义详解 #### 一、引言 在PB(PowerBuilder)开发过程中,事件处理是构建动态交互式应用...在实际开发中,合理利用这些事件ID可以帮助我们更好地管理用户界面,提高应用程序的灵活性和可维护性。

    app_systray.rar_pb_systrayapp

    总的来说,这个压缩包中的内容涉及到了PowerBuilder的编程技巧,特别是如何利用PB构建具有系统托盘功能的应用程序。这需要开发者具备一定的PB编程基础,对Windows操作系统的理解,以及良好的编程习惯,以确保程序的...

    teradata基础知识

    为了更好地利用这些数据支持决策,提高企业的竞争力,数据仓库(Data Warehouse, DW)应运而生。数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理层的决策过程。 **1.2 OLTP与...

    移动电源_原理图说明

    - PB0~PB5:通用输入输出端口。 - VSS:接地端。 - **注意事项**: - LED和按键相关的走线应尽量靠近MCU,以减少干扰。 - 与MCU相关的走线应尽可能短且直。 ##### 4. 保护IC(U6:DW01) - **功能**:过充、过...

    雾化器驱动电路

    在文档的内容中还提到了多个引脚的命名,如PA5/PRSTB、PB7/AD7/PWM2等,这些都是单片机引脚的功能命名,它们分别连接到PWM信号输出、复位信号、模拟输入、数字输入、电源、地线等不同功能上。这些引脚的合理配置保证...

Global site tag (gtag.js) - Google Analytics