AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PowerBuilder

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

51自学网 2015-09-27 http://www.51zixue.net

  三、程序清单

  // ColName:数据窗口列名

  // Name1[],Name2[]:两数据库表选中项列名

  // n1,n2:两数据库表选中项数量

  // i:循环计数器

  // Columns:数据窗口总列数

  String ColName,Name1[],Name2[]

  Integer Columns,i,n1=0,n2=0

  //下面程序:找出dw—obj的两表列名赋给Name1[],Name2[]

  Columns=Integer(dw—obj.Describe(″DataWindow.Column.Count″))

  FOR i=1 TO columns

ColName=Upper(dw—obj.Describe(″#″+String(i)+″.Name″))

IF Left(ColName,Len(Table1))=Table1 and ColName〈〉Key1 THEN

n1=n1+1

Name1[n1]=ColName

END IF

IF Left(ColName,Len(Table2))=Table2 and ColName〈〉Key2 THEN

n2=n2+1

Name2[n2]=ColName

END IF

  NEXT

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

  IF dw_obj.Update(True,False)=1 THEN

   FOR i=1 TO n1

   dw—obj.Modify(Name1[i]+″.Update=No″)

   NEXT

dw—obj.Modify(Key1+″.Key=No″)

  dw—obj.Modify(″DataWindow.Table.Update

  Table=′ ″+Table2+″ ′ ″)

FOR i=1 TO n2

  dw—obj.Modify(Name2[i]+″.Update=Yes″)

NEXT

   dw—obj.Modify(Key2+″.Key=Yes″)

IF dw—obj.Update()=1 THEN

Commit;

FOR i=1 TO n1

dw—obj.Modify(Name1[i]+″.Update=Yes″)

NEXT

dw—obj.Modify(Key1+″.Key=Yes″)

dw—obj.Modify(″DataWindow.Table.UpdateTable=′ ″+Table1+″ ′ ″)

FOR i=1 TO n2

dw—obj.Modify(Name2[i]+″.Update=No″)

NEXT

dw—obj.Modify(Key2+″.Key=No″)

return True

ELSE

Rollback;

return False

END IF

  ELSE

Rollback;

return False

  END IF

  四、调用方法

  假设窗口名为w—update,数据窗口为dw—1,数据库表名和主键名分别为t1、t2、k1、k2,放置“存盘”按钮,按钮Clicked事件的Script语句如下:

  dw_1.AcceptText()

  IF dw—1.ModifiedCount()〉0 or dw_1.DeletedCount()〉0 THEN

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

   IF f—update—2table(dw—1,″t1″,″t2″,″k1″,″k2″) THEN

   Commit;

ELSE

Rollback;

   END IF

   END IF

  END IF

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

 
 

上一篇:PB中数据窗口的精确页面打印技术  下一篇:PB实现数据窗口动态排序的方法