★在数据窗口中如何同时实现多行操作,如update或delete多行。

skyfeather 2003-05-06 06:44:56
如果直接操作数据库的话可以用update set num=num+1 where num>50
delete where num>50 等等来同时操作多行,在数据窗口中如何实现呢?数据窗口里面setitem()和deleterow()里面好象都没有条件啊?
...全文
129 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengxun78 2003-05-08
  • 打赏
  • 举报
回复
GZ!
skyfeather 2003-05-07
  • 打赏
  • 举报
回复
我的意思是怎样直接对数据窗口操作,比如用dw_1.setitem(),最后再用update(),提交事务,而不在脚本中写update set num=num+1 where num>50语句。(delete也同样)
如果直接写update语句,那么数据窗口的数据不是和数据库的数据不一致了吗?(除非再retrieve()一次,那这样还要数据窗口干吗?)
还有to:joss(季节...春至)
用dwname.object.列名[开始行号,结束行号]来得到成批数组!

怎么得到 “开始行号”,“结束行号”,要修改(或删除)的行不一定在一起,有可能是跳跃的怎么办啊?
GOODSTART 2003-05-07
  • 打赏
  • 举报
回复
先retrieve()这个表,得到所有数据-》数据窗口-》(法2)按钮-》再update数据窗口
-》从新得到数据(结果,循环后)。
skyfeather 2003-05-07
  • 打赏
  • 举报
回复
我讲得好像挺清楚的啊。
举个简单的例子吧:
表tb_1:
id name value //(name为字符型,value为数值型)
=================================================
1 A 22
2 B 25
3 C 19
4 D 27
5 E 28
6 F 30
7 G 32
8 H 3
9 I 40
10 J 42
=================================================
数据窗口dw_1,dw_1的数据窗口对像为select语句为select * from tb_1

dw_1.SetTransObject(sqlca)
dw_1.retrieve()

要求在命令按钮cb_1点击之后实现如下变化:
将数据窗口中value大于25的记录的value值加1,即value=value+1
数据窗口中显示出变化后的值,问如何处理?
方法一:(直接修改数据库,再retrieve)(不推荐)
在cb_1的clicked事件写:
update tb_1 set value=value+1 where value>25
dw_retrieve()

方法二:先修改数据窗口,再update(用dw_1.setitem())
在cb_1的clicked事件写:
for i=1 to dw_1.rowcount()
if dw_1.object.value>25 then
dw_1.setitem(i,"value",dw_1.object.value+1)
end if
next
问题是:如果当前部分记录是在过滤区中,而dw_1.rowcount()只是主缓冲区中的总行数。
请问如何有效地用方法二来实现上述要求?
是不是还听不懂??
幸好没有去做老师!!!!
SilverSands 2003-05-07
  • 打赏
  • 举报
回复
动态修改你做的数据窗口,把构造数据窗口的sql语句取出来,然后把where 条件加到sql语句里面,在修改数据窗口。即可!!
Tigersong 2003-05-07
  • 打赏
  • 举报
回复
我也这么认为
to: 楼主
说说想实现的功能吧
xirumin 2003-05-07
  • 打赏
  • 举报
回复
是否系统分析没做好。实现某一功能的方法很多,你想的可能太不寻常了。
冷箫轻笛 2003-05-07
  • 打赏
  • 举报
回复
不明白
楼主干脆把想实现的功能说出来大家分析,那样比较好办
shahand 2003-05-07
  • 打赏
  • 举报
回复
要求太不合理
zjianabc 2003-05-07
  • 打赏
  • 举报
回复
试试这样:
将最后一次的过滤语法记录下来(is_lastfilter)
cb_1.clicked事件:
dw_1.SetRedraw(False)
dw_1.SetFilter('')
dw_1.Filter()
for i=1 to dw_1.rowcount()
if dw_1.object.value>25 then
dw_1.setitem(i,"value",dw_1.object.value+1)
end if
next
dw_1.SetFilter(is_lastfilter)
dw_1.Filter()
dw_1.SetRedraw(True)

xirumin 2003-05-06
  • 打赏
  • 举报
回复
原来是skyfeather的问题!!!

1. update无所谓多行不多行,因为本来就是要更新多少就更新多少
2. delete也可以多行。用上面的可以,不过一般是由用户来选择(Ctrl+Shift),然后按删除键。实现也不难,关键是要规划好。一般这样的数据窗口的dw_1.object.datawindow.readonly='yes'
多选后,选中的行会变为蓝色。
3. 按删除键后,就好办了。
th820901 2003-05-06
  • 打赏
  • 举报
回复
同意楼上
joss 2003-05-06
  • 打赏
  • 举报
回复
update本来就是成批保存啊!!
delete同一楼说的直接用循环,如果还认为麻烦,则直接用SQL语句操作!!

用dwname.object.列名[开始行号,结束行号]来得到成批数组!

dw_1.RowsCopy(dw_1.GetRow(), dw_1.RowCount(), Primary!, dw_2, 1, Primary!)
来解决行复制问题!

fibbery 2003-05-06
  • 打赏
  • 举报
回复
只是直观感觉不一样而已。
用循环处理符合条件的数据窗口中的数据。

611

社区成员

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

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