messagebox(1,dw_print.rowcount())
ls_presc_no='';ls_presc_no1=''
IF ls_presc_type='0' OR ls_presc_type='1' OR ls_presc_type='3' THEN
FOR i=1 TO dw_print.rowcount()
ls_presc_no1=dw_print.object.sheet_number[i]
IF ls_presc_no1=ls_presc_no THEN
dw_print.object.costs[i]=lde_all_costs
ELSE
lde_all_costs=0
dw_print.setfilter("sheet_number='"+ls_presc_no1+"'")
dw_print.filter()
FOR j=1 TO dw_print.rowcount()
lde_costs=dw_print.object.costs[j]
lde_all_costs=lde_all_costs+lde_costs
NEXT
dw_print.object.costs[i]=lde_all_costs
dw_print.setfilter('')
dw_print.filter()
END IF
ls_presc_no=ls_presc_no1
NEXT
END IF
messagebox(2,dw_print.rowcount())
发现dw_print.rowcount()前后不一致,后面的rowcount大于前面的rowcount,也就是说这个datawindow里凭空多了几行
实际数据只有3行,这样处理后变为了5行,经过测试,是由于filter造成的
求助:多余的行是怎么来的
------解决方案--------------------
查看你的数据窗口绘制的时候是不是有过滤条件,行数前后从现有代码看应该前后一致。
另:在设置过滤条件并调用filter()后应立即将条件还原
dw_print.setfilter("sheet_number='"+ls_presc_no1+"'")
dw_print.filter()
dw_print.setfilter("")
------解决方案--------------------
long ll_count,ll_new_count
ll_count = dw_print.rowcount()
messagebox(1,dw_print.rowcount())
ls_presc_no='';ls_presc_no1=''
IF ls_presc_type='0' OR ls_presc_type='1' OR ls_presc_type='3' THEN
FOR i=1 TO ll_count
ls_presc_no1=dw_print.object.sheet_number[i]
IF ls_presc_no1=ls_presc_no THEN
dw_print.object.costs[i]=lde_all_costs
ELSE
lde_all_costs=0
dw_print.setfilter("sheet_number='"+ls_presc_no1+"'")
dw_print.filter()
ll_new_count = dw_print.rowcount()
FOR j=1 TO ll_new_count
lde_costs=dw_print.object.costs[j]
lde_all_costs=lde_all_costs+lde_costs
NEXT
dw_print.object.costs[i]=lde_all_costs
dw_print.setfilter('')
dw_print.filter()
END IF
ls_presc_no=ls_presc_no1
NEXT
END IF
messagebox(2,dw_print.rowcount())
试试看看对不?
------解决方案--------------------
原因出在object赋值上,而且也是因为在循环里做了filter。
比如原来只有3行,那么i最大是3,而你filter以后,可能没有那么多行了,这时候object方式给一个不存在的行赋值,相当于insert了一条记录。
比如
dw_print.object.costs[i]=lde_all_costs
改成
dw_print.setitem(i,"costs",lde_all_costs)
就不会出现记录多的情况。
当然这只是解释了这个现象,pb8的话还是很有道理的。
------解决方案--------------------
------解决方案--------------------
采用dot notation方式引用时,
cost可以理解为一动态数组,
如果i大于0且小于等于UpperBound(cost)+1
cost[i]=a
是成立的,这样就会自增一个元素~~
如果i值大于UpperBound(cost)+1,则会出错,就是楼上有位朋友说的有时出错有时不会了~~