社区
PowerBuilder
帖子详情
有兴趣讨论pb多表数据更新问题的,请进。。。。。
keer
2001-07-30 03:19:05
本人不幸遇到多表数据更新的问题,由于小妹阅历尚浅,望众位大哥把曾经遇到的多表数据更新的经历、教训、注意事项道来听听。
不胜感激........
...全文
260
25
打赏
收藏
有兴趣讨论pb多表数据更新问题的,请进。。。。。
本人不幸遇到多表数据更新的问题,由于小妹阅历尚浅,望众位大哥把曾经遇到的多表数据更新的经历、教训、注意事项道来听听。 不胜感激........
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wideken
2002-01-07
打赏
举报
回复
呵呵,我这个地方有段例程,可以看看
原理分析:
数据窗口数据源来自两个或两个以上的表,相当于多个表连接建立的一个视图,对于这种数据窗口,PB默认是不能修改的。当然我们可以通过设置它的Update 属性,数据窗口的Update Properties用来设置数据窗口是否可Update、可Update的表、可Update列等,但不能同时设置两个表可更新;所以当修改它的数据项时,我们不能简单地用dw_1.update()来更新table,我们可以在程序中设置数据窗口可更新的一个表A(及其可更新列),其他表为不可更新,更新完表A后,再设置另一表B为可更新,表A设置为不可更新,依次类推。
解决示例:
我们以PowerBuilder7自带的ASA6数据库为例:
1、新建一个数据窗口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
2、设置数据窗口d_grid_dep_emp的属性,将列的taborder改为非0值;并点击菜单Rows——>Update Properties,设置此数据窗口Allow Updates,Table to Update设为department,Updateable Columns为department.dept_id,department.dept_name。
3、在窗口中更新数据窗口按钮的clicked事件编写脚本:
long ll_rtn
// 修改Department表(Department表在第2步已设置为可更新)
ll_rtn = dw_1.update(true, false)
if ll_rtn = 1 then
//关闭对Department表的修改
dw_1.Modify("department_dept_name.Update = 'No'")
dw_1.Modify("department_dept_id.Update = 'No'")
dw_1.Modify("department_dept_id.Key = 'No'")
//设置Employee表成为新的可修改表
dw_1.Modify("DataWindow.Table.UpdateTable = 'employee'")
dw_1.Modify("employee_emp_id.Update = 'Yes'")
dw_1.Modify("employee_emp_fname.Update = 'Yes'")
dw_1.Modify("employee_emp_lname.Update = 'Yes'")
dw_1.Modify("employee_emp_id.Key = 'Yes'")
//修改Employee表
ll_rtn = dw_1.Update()
IF ll_rtn = 1 THEN
COMMIT USING SQLCA;
dw_1.retrieve()
messagebox('提示信息','更新成功!')
ELSE
ROLLBACK USING SQLCA;
MessageBox('提示信息', '更新失败!')
END IF
//重设修改标志
dw_1.Modify("department_dept_name.Update = 'Yes'")
dw_1.Modify("department_dept_id.Update = 'Yes'")
dw_1.Modify("department_dept_id.Key = 'Yes'")
dw_1.Modify("DataWindow.Table.UpdateTable = 'department'")
dw_1.Modify("employee_emp_id.Update = 'No'")
dw_1.Modify("employee_emp_fname.Update = 'No'")
dw_1.Modify("employee_emp_lname.Update = 'No'")
dw_1.Modify("employee_emp_id.Key = 'No'")
ELSE
ROLLBACK USING SQLCA;
MessageBox('提示信息', '更新失败!')
END IF
这样就完成了对两个表的更新。当然我们可以将上面功能编成一个函数,在需要时调用。
nanjQQ
2002-01-06
打赏
举报
回复
我们要考虑的是效率的问题,所以我建议我们多做服务器端编程,多用一些触发器和存储过程
chenhuijun
2001-08-03
打赏
举报
回复
同意楼上的。
sun_qiqi
2001-08-03
打赏
举报
回复
利用Update Properties,以两个表为例。table1,table2
编程时使用"Table to Update","Updateable Columns","Unique Key Columns"三个属性来指定要更新的表、列和健列。
代码如下:(pb6.5)
string change,err
int li_return
li_return = dw_1.update(true,false)
if li_return = 1 then
//关闭table1的列更新属性,两列
dw_1.modify("table1.book_id.update = no")
dw_1.modify("table1.book_name.update = no")
change = "DataWindow.Table.UpdateTable = 'table2'"
//设定新的更新表和键列
err= dw_1.modify(change)
dw_1.modify("table2.book_id.update = yes")
change = "table2.name.update = yes"
//设定表中可更新的列
err=dw_1.modify(change)
if err<>"" then messagebox("failed",err)
li_return = dw_1.update()
if li_return = 1 then
commit;
if sqlca.sqlcode<>0 then
messagebox("commit error",sqlca.sqlerrtext)
end if
else
messagebox("update err","table2 update failed")
rollback;
end if
else messagebox("update err","table1 update failed")
rollback;
end if
dw_1.modify("table1.book_id.update = yes")
dw_1.modify("table1.book_name.update = Yes")
//恢复原属性
dw_1.mofify("datawindow.table.updatetable = 'table2'")
………………………………
例子可能有错误,不过大概想法是对的,见谅。
eastseaofdragon
2001-08-03
打赏
举报
回复
如果你真是小妹,还可以理解,否则的话我看你还是改行吧......
Methodor
2001-08-02
打赏
举报
回复
1、多表更新不太常用~~
2、多表更新代码实现比较简单,网上相关例子也比较多~~
3、能用DBMS实现的功能最好不要用代码来做(比如:Trigger、sp或其它约束之类)~~
pbdesigner
2001-08-02
打赏
举报
回复
不推荐在前台写程序实现,我通常是在后台通过写触发器来实现。这样不管你是在前台操作还是后台维护都能保证数据的一致性。
luck_boy
2001-08-02
打赏
举报
回复
多表更新是个比较麻烦的问题,代码比较多,仅谈谈思想:以两个表为例:建立DATAWINDOW时,先将一个表设为是可更新的,然后用代码控制这两个表的可更新性,(设定TABLE。UPDAETABLE以及COLUMN.UPDATE的属性),建议你看看PB自带的例子吧!
qinqindodo
2001-08-02
打赏
举报
回复
对不起了,我只用过mssql和sqlanywhere,别的数据库还是请各位高手指教吧!
perfect
2001-07-31
打赏
举报
回复
怎样做触发器啊,我是新手,请各位大哥赐教 ,
在powerdesign中 有例子,很简单
ghostsheng
2001-07-31
打赏
举报
回复
怎样做触发器啊,我是新手,请各位大哥赐教
ExitWindows
2001-07-31
打赏
举报
回复
up
ExitWindows
2001-07-31
打赏
举报
回复
up
qinqindodo
2001-07-31
打赏
举报
回复
打开sql Enterprise manager,(sql的控制台)选中你要控制的表,在右健菜单中选manage
triggers,在那里写!语法的话你找专门的书看一看,就是些sql的语句!
下面是一个删除的例子
CREATE TRIGGER jd_del ON dbo.jd_main
FOR DELETE
AS
BEGIN
delete jd_detail from dbo.jd_detail a, deleted b
where a.cfk=b.cpk
END
wangsw
2001-07-31
打赏
举报
回复
动态改变窗口的更新属性!!
shawnguo
2001-07-30
打赏
举报
回复
可以在数据库中做个trriger啊
caolei1974
2001-07-30
打赏
举报
回复
用trigger呀,方便简洁
keer
2001-07-30
打赏
举报
回复
如:做图书馆管理系统。注销一本书需要删除“主题词表”、“主控书库表”、“辅助题名信息表”等表的相应记录。
glongjun
2001-07-30
打赏
举报
回复
具体问题具体分析,太笼统说不清!
keer
2001-07-30
打赏
举报
回复
为何关心多表更新问题的人那么少???
加载更多回复(5)
ELK/ELFK(7.3 ) 企业
PB
级日志系统实战
包含的组件有Filebeat,Logstash,Elastic,Kibana等 本堂课引入Kafka 让Elastic Stack 能适应企业
PB
级的业务日志量 并弥补传统ELk架构的不足 ★ 学完这门课程会获得什么? 首先从零开始教你部署Elastic...
浅谈估值模型:
PB
指标与剩余收益估值
本文简单介绍
PB
指标,剩余收益的推导及其估值方式
海量
数据
处理-重新思考排序2
如今互联网产生的
数据
量已经达到
PB
级别,如何在
数据
量不断增大的情况下,依然保证快速的检索或者
更新
数据
,是我们面临的
问题
。在之前我们也提到过,然而在大
数据
处理的技术中,排序起到很重要的作用,可能不是直接...
如何应对海量
数据
时代的挑战
IDC在2006年估计全世界产生的
数据
量是0.18ZB(1ZB=100万
PB
),而今年这个数字已经提升了一个数量级,达到1.8ZB,差不多对应全世界每个人一块100多GB的硬盘。这种增长还在加速,预计2015年将达到近8ZB。目前IT系统的...
如何打造自动驾驶的
数据
闭环
最近自动驾驶和
数据
闭环结合在一起,原因是自动驾驶工程已经被认可是一个解决
数据
分布“长尾
问题
”的任务,时而出现的corner case(极端情况)是是对
数据
驱动的算法模型进行升级的来源之一,如图所示。构成这个自动...
PowerBuilder
1,076
社区成员
66,437
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章