多表更新

liu800118 2003-10-16 11:13:05
请教,如何在一个数据窗口同时实现两个表的更新啊?
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjhyn 2003-10-17
  • 打赏
  • 举报
回复
说明,上帖转自csdn。
yjhyn 2003-10-17
  • 打赏
  • 举报
回复



/*================================================================================

==========================================功能====================================

在一个数据窗口中实现两表更新

================================================================================== 函数思路

1. 先针对第一个数据库表调用Update函数更新。注意参数的使用:第一个参数作用是控制数据窗口更新前是否强制性调用AcceptText(),在数据窗口更新前通过有效性验证;第二个参数是控制更新标志的复位,为True时更新标志复位,为False时更新标志不复位。
  2. 更改数据窗口的UpdateTable属性,使其指向第二个表,并把第一个表的各数据项Update属性和主键列的Key属性改为No,接着把第二个表的各数据项Update属性和主键列的Key属性改为Yes。
  3. 调用Update函数更新第二个表。
  4. 两表更新成功后,把两表的列属性、主键属性改回到初始状态,以便为下一次的两表更新调用做好准备。
================================================================================*/



String ColName // ColName:数据窗口列名
String Name1[] // Name1[]:两数据库表选中项列名
String Name2[] // Name2[]:两数据库表选中项列名
Integer Columns // Columns:数据窗口总列数
Integer i // i:循环计数器
Integer n1=0 // n1,n2:两数据库表选中项数量
Integer n2=0 // n1,n2:两数据库表选中项数量


//下面程序:找出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
======================================================================*/
double22822 2003-10-16
  • 打赏
  • 举报
回复
同意楼上
cckk426 2003-10-16
  • 打赏
  • 举报
回复
要设置update属性,并在程序中使用modify()修改主建及属性的update为yes或no值,一张表一张表的更新
ropriest 2003-10-16
  • 打赏
  • 举报
回复
在一个数据窗口中嵌套另一个数据窗口,不用create report格式,更新时,更新当前窗口。
longdrang 2003-10-16
  • 打赏
  • 举报
回复
同意cckk426(眼镜番茄)
jimly 2003-10-16
  • 打赏
  • 举报
回复
pfc有多表更新

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧