数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

PB中数据窗口的多表更新[2]


发布日期:2022年05月09日
 
PB中数据窗口的多表更新[2]

函数思路

先针对第一个数据库表调用Update函数更新注意参数的使用第一个参数作用是控制数据窗口更新前是否强制性调用AcceptText()在数据窗口更新前通过有效性验证第二个参数是控制更新标志的复位为True时更新标志复位为False时更新标志不复位

更改数据窗口的UpdateTable属性使其指向第二个表并把第一个表的各数据项Update属性和主键列的Key属性改为No接着把第二个表的各数据项Update属性和主键列的Key属性改为Yes

调用Update函数更新第二个表

两表更新成功后把两表的列属性主键属性改回到初始状态以便为下一次的两表更新调用做好准备

程序清单

// ColName:数据窗口列名

// Name[]Name[]:两数据库表选中项列名

// nn:两数据库表选中项数量

// i:循环计数器

// Columns:数据窗口总列数

String ColNameName[]Name[]

Integer Columnsin=n=

//下面程序找出dw―obj的两表列名赋给Name[]Name[]

Columns=Integer(dw―objDescribe(″DataWindowColumnCount″))

FOR i= TO columns

ColName=Upper(dw―objDescribe(″#″+String(i)+″Name″))

IF Left(ColNameLen(Table))=Table and ColName〈〉Key THEN

n=n+

Name[n]=ColName

END IF

IF Left(ColNameLen(Table))=Table and ColName〈〉Key THEN

n=n+

Name[n]=ColName

END IF

NEXT

// 下面程序存储dw―obj确定返回值(True:成功False:失败)

IF dw_objUpdate(TrueFalse)= THEN

FOR i= TO n

dw―objModify(Name[i ]+″Update=No″)

NEXT

dw―objModify(Key+″Key=No″)

dw―objModify(″DataWindowTableUpdate

Table=′ ″+Table+″ ′ ″)

FOR i= TO n

dw―objModify(Name[i ]+″Update=Yes″)

NEXT

dw―objModify(Key+″Key=Yes″)

IF dw―objUpdate()= THEN

Commit;

FOR i= TO n

dw―objModify(Name[i ]+″Update=Yes″)

NEXT

dw―objModify(Key+″Key=Yes″)

dw―objModify(″DataWindowTableUpdateTable=′ ″+Table+″ ′ ″)

FOR i= TO n

dw―objModify(Name[i ]+″Update=No″)

NEXT

dw―objModify(Key+″Key=No″)

return True

ELSE

Rollback;

return False

END IF

ELSE

Rollback;

return False

END IF

调用方法

假设窗口名为w―update数据窗口为dw―数据库表名和主键名分别为ttkk放置存盘按钮按钮Clicked事件的Script

语句如下

dw_AcceptText()

IF dw―ModifiedCount()〉 or dw_DeletedCount()〉 THEN

IF MessageBox(″提示信息″″是否存盘?″Question!YesNo!)= THEN

IF f―update―table(dw―″t″t″k″k″) THEN

Commit;

ELSE

Rollback;

END IF

END IF

END IF

综上所述可以看出该方案具有很好的可扩展性稍加修改即可解决多表作为数据源的数据窗口的同步更新问题

编辑推荐

JEE高级框架实战培训视频教程

数据仓库与数据挖掘培训视频教程

[] []

               

上一篇:在PB中如何对ASA进行数据备份[1]

下一篇:PB中数据窗口的多表更新[1]