我的意思是怎样直接对数据窗口操作,比如用dw_1.setitem(),最后再用update(),提交事务,而不在脚本中写update set num=num+1 where num>50语句。(delete也同样)
如果直接写update语句,那么数据窗口的数据不是和数据库的数据不一致了吗?(除非再retrieve()一次,那这样还要数据窗口干吗?)
还有to:joss(季节...春至)
用dwname.object.列名[开始行号,结束行号]来得到成批数组!
我讲得好像挺清楚的啊。
举个简单的例子吧:
表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()只是主缓冲区中的总行数。
请问如何有效地用方法二来实现上述要求?
是不是还听不懂??
幸好没有去做老师!!!!
试试这样:
将最后一次的过滤语法记录下来(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)