当前位置: 代码迷 >> PB >> 关于将DropDownDatawindow的data value替换成display value的有关问题(高分)
  详细解决方案

关于将DropDownDatawindow的data value替换成display value的有关问题(高分)

热度:120   发布时间:2016-04-29 09:57:34.0
关于将DropDownDatawindow的data value替换成display value的问题(高分)
这个问题和数据窗口导出到Excel有关。

原来一直使用DW2xls做导出成EXCEL,但对于数据量大的数据窗口该方法无法忍受其性能,导出10000行数据通常需要30分钟以上,因此退而求其次,直接将需要导出的数据窗口的数据COPY到一个DATASTORE中,然后对DATASTORE   SAVEAS成EXCLE,原来的方法是逐行循环使用Describe( "Evaluate( 'LookupDisplay.....去替换那些DDW中的data   value成display   value,这样可以将10000行数据的导出速度提高到8分钟左右,但是这样的速度还是不尽如人意的。

因此我现在有个想法,就是能否不用行循环去实现这样的功能,直接对列进行操作,将整列全部替换,而不使用逐行循环,不知道能否实现这样的想法。

如果能实现这样的想法的话,估计2分钟内应该能导出万行级的数据。

请高手指教。。。。。

------解决方案--------------------
可以这样:
for ll_cnt = 1 to Long(dw_1.Object.DataWindow.Column.Count)
ls_style = dw_1.Describe( "# " + string(ll_cnt) + ".Edit.Style ")
if Lower(trim(ls_style)) = "dddw " then
dw_1.GetChild(dw_1.Describe( "# " + string(ll_cnt) + ".name "),ldwc_dic)
ldwc_dic.SetTransObject(sqlca)
ldwc_dic.Retrieve()
end if
next

------解决方案--------------------
已经测试过了,10000条记录速度0.4秒,不过建议还是不要在原数据窗口上直接修改,可以rowscopy到其它地方再处理.
------解决方案--------------------
稍微有点麻烦,可以这样解决
string ls_colname = 'a '
choose case long(dw_1.describe(ls_colname+ '.id '))
case 1
dw_1.object.#1.current = dw_1.object.b[1,dw_1.rowcount()]
case 2
dw_1.object.#2.current = dw_1.object.b[1,dw_1.rowcount()]
case 3
dw_1.object.#3.current = dw_1.object.b[1,dw_1.rowcount()]
end choose
  相关解决方案