Data window does not have update capability

twc1982 2011-02-24 09:32:28
要更新的数据窗口的SQL语句是否关联到多个表,前面有用SETSQLSELECT()函数),我进行ll_rtn = dw_1.update(true,false)提示Data window does not have update capability,我如何进行,请各位神仙帮助解决下
...全文
381 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a954105626 2012-08-30
  • 打赏
  • 举报
回复
row->update properties->选择更新的表
a954105626 2012-08-30
  • 打赏
  • 举报
回复
row->update properties->选择更新的表
jason_tang84 2012-08-29
  • 打赏
  • 举报
回复
新手请教
老师们,在SQL 2008 R2中提示Data window does not have update capability这个问题怎么解决??
请给予指导
风_雨_晴 2011-02-25
  • 打赏
  • 举报
回复
dw_1.Modify("DataWindow.Table.Select='" + SQL语句 + "'")
永生天地 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 twc1982 的回复:]
要更新的数据窗口的SQL语句是否关联到多个表,前面有用SETSQLSELECT()函数),我进行ll_rtn = dw_1.update(true,false)提示Data window does not have update capability,我如何进行,请各位神仙帮助解决下
[/Quote]
这个我测过很多次,多表的情况使用setsqlselect,datawindow就会丢失updateable属性,没什么办法,
用object.datawindow.select="select .... from ....."
好像是可以,都是两年前测过的。记不清楚了
liubocy 2011-02-24
  • 打赏
  • 举报
回复

数据窗口的多表更新
原理分析:
数据窗口数据源来自两个或两个以上的表,相当于多个表连接建立的一个视图,对于这种数据窗口,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
这样就完成了对两个表的更新。当然我们可以将上面功能编成一个函数,在需要时调用。

754

社区成员

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

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