知识大全 PB中数据窗口的多表更新[1]

Posted

篇首语:守望相助,一缕阳光也将照亮心扉;同心协力,一点火光也能温暖灵魂。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PB中数据窗口的多表更新[1]相关的知识,希望对你有一定的参考价值。

PB中数据窗口的多表更新[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  原理分析

  数据窗口数据源来自两个或两个以上的表 相当于多个表连接建立的一个视图 对于这种数据窗口 PB默认是不能修改的 当然我们可以通过设置它的Update 属性 数据窗口的Update Properties用来设置数据窗口是否可Update 可Update的表 可Update列等 但不能同时设置两个表可更新 所以当修改它的数据项时 我们不能简单地用dw_ update()来更新table 我们可以在程序中设置数据窗口可更新的一个表A(及其可更新列) 其他表为不可更新 更新完表A后 再设置另一表B为可更新 表A设置为不可更新 依次类推

  解决示例

  我们以PowerBuilder 自带的ASA 数据库为例

   新建一个数据窗口d_grid_dep_emp 它的Select语句为

  SELECT department dept_id

  department dept_name

  employee emp_id

  employee emp_fname

  employee emp_lname

  FROM department employee

  where employee dept_id = department dept_id

   设置数据窗口d_grid_dep_emp的属性 将列的taborder改为非 值 并点击菜单Rows――Update Properties 设置此数据窗口Allow

  Updates Table to Update设为department Updateable Columns为department dept_id department dept_name

   在窗口中更新数据窗口按钮的clicked事件编写脚本

  long ll_rtn

  // 修改Department表(Department表在第 步已设置为可更新)

  ll_rtn = dw_ update(true false)

  if ll_rtn = then

  //关闭对Department表的修改

  dw_ Modify( department_dept_name Update =  No  )

  dw_ Modify( department_dept_id Update =  No  )

  dw_ Modify( department_dept_id Key =  No  )

  //设置Employee表成为新的可修改表

  dw_ Modify( DataWindow Table UpdateTable =  employee  )

  dw_ Modify( employee_emp_id Update =  Yes  )

  dw_ Modify( employee_emp_fname Update =  Yes  )

  dw_ Modify( employee_emp_lname Update =  Yes  )

  dw_ Modify( employee_emp_id Key =  Yes  )

  //修改Employee表

  ll_rtn = dw_ Update()

  IF ll_rtn = THEN

  MIT USING SQLCA;

  dw_ retrieve()

  messagebox( 提示信息 更新成功! )

  ELSE

  ROLLBACK USING SQLCA;

  MessageBox( 提示信息   更新失败! )

  END IF

  //重设修改标志

  dw_ Modify( department_dept_name Update =  Yes  )

  dw_ Modify( department_dept_id Update =  Yes  )

  dw_ Modify( department_dept_id Key =  Yes  )

  dw_ Modify( DataWindow Table UpdateTable =  department  )

  dw_ Modify( employee_emp_id Update =  No  )

  dw_ Modify( employee_emp_fname Update =  No  )

  dw_ Modify( employee_emp_lname Update =  No  )

  dw_ Modify( employee_emp_id Key =  No  )

  ELSE

  ROLLBACK USING SQLCA;

  MessageBox( 提示信息   更新失败! )

  END IF

  这样就完成了对两个表的更新 当然我们可以将上面功能编成一个函数 在需要时调用

  PowerBuilder的数据窗口对象是其特有的智能对象 其封装性好 功能强大 表现形式丰富多样 为此 许多MIS开发人员对PowerBuilder推崇备至 将其视为首选开发工具

  一般情况下 一个数据窗口只能更新一个数据库表 但在MIS开发过程中 我们经常遇到这种情况 一个数据窗口中由两个或更多个数据库

  表作为数据源 并需要对其进行录入或修改 如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题 笔者在某管理信息系统的

  开发过程中 尝试了几种双表更新的解决方法 选出一种比较好的方案 以飨读者

  一 具体步骤

   在数据窗口建立时 选择SQL Select 显示风格可以是Tabular Grid或FreeForm中的任一种 选出两表需要录入或修改的列 其中两表的主键和非空列必须选中 确定选择条件 建立连接关系

   在选单 Rows/Update 中选择第一个表的全部数据项为可更新项

   把两表需要修改项的Tab Order数值改为非 值 使其在数据窗口中成为可修改项

  为了使方案具有通用性 建立全局函数f―update― table 有五个参数 dw―obj table table key key 分别代表所要更新的数据窗口 两表表名和两表主键列名 其中dw―obj为DataWindow类型 其余四参数均为String类型 该函数返回值为Boolean型 返回True表示成功 返回False表示失败

cha138/Article/program/PB/201311/24630

相关参考

知识大全 PB中同时“继承”多个用户自定义数据窗口对象[1]

PB中同时“继承”多个用户自定义数据窗口对象[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 PB中同时“继承”多个用户自定义数据窗口对象[3]

PB中同时“继承”多个用户自定义数据窗口对象[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 PB中同时“继承”多个用户自定义数据窗口对象[2]

PB中同时“继承”多个用户自定义数据窗口对象[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 PB中实现数据窗口动态排序的三种方法[1]

PB中实现数据窗口动态排序的三种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Po

知识大全 利用PB动态创建数据窗口

利用PB动态创建数据窗口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用PowerBuild

知识大全 oracle的多表插入

  在业务处理过程中经常会碰到将业务数据按照条件分别插入不同的数据表的问题按照传统的处理方式需要分条件执行多次检索后分别插入不同的表单这样因为执行了重复的检索造成cpu和内存的浪费从oraclei开始

知识大全 PB数据窗口中用Enter键替代Tab键切换栏目

PB数据窗口中用Enter键替代Tab键切换栏目  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 PB在数据窗口中实现某一列的增量查询功能

PB在数据窗口中实现某一列的增量查询功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在PB的

知识大全 PB中实现数据窗口动态排序的三种方法[2]

PB中实现数据窗口动态排序的三种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  str

知识大全 ASP.NET中使用表别名的多表查询

ASP.NET中使用表别名的多表查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一程序功能将