`
Ben.Sin
  • 浏览: 234189 次
  • 性别: 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

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

相关推荐

    基于net的超市管理系统源代码(完整前后端+sqlserver+说明文档+LW).zip

    功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。

    LABVIEW程序实例-公式节点.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    大米商城开源版damishop(适合外贸)

    大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插

    LABVIEW程序实例-通过全局变量接收数据.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    LABVIEW程序实例-日历控件.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频.zip

    毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频

Global site tag (gtag.js) - Google Analytics