******一个但愿不是无解的问题. ******
我想把一个 DW 的第一列全部设为同一个值 。
datawindow.object.data[1,1,dw_1.rowcount(),1]='ss'
以上语法没用 。
用 FOR NEXT 一把又太慢(我的数据量很大)
我想要的是, 的DW 的某一列设为同一个值 , 请问有什么好办法(速度比循环快就行了)。
问题点数:100、回复次数:22Top
1 楼kanghl()回复于 2001-11-28 16:40:37 得分 0
update 不就行了Top
2 楼keani(基恩)回复于 2001-11-28 16:43:49 得分 0
kao,真是个让人郁闷的问题Top
3 楼angelideng(百合)回复于 2001-11-28 17:18:22 得分 0
第一列的值确不确定?Top
4 楼daizhihui_1()回复于 2001-11-28 18:25:27 得分 0
datawindow.object.data[1,1,dw_1.rowcount(),1]取出的是一个数组,肯定不能这样赋值。还是用循环简单!Top
5 楼trouble()回复于 2001-11-28 18:31:27 得分 0
to angelideng(PB幼儿)
第一列的值确定 , 只有(是、否) 分别用1、2来表示.
Top
6 楼trouble()回复于 2001-11-28 18:32:46 得分 0
世风日下啊!!!!!!!!!Top
7 楼dingxiaojun(免费回答)回复于 2001-11-28 18:40:06 得分 0
dw_1.object.col.current='ss'Top
8 楼PBVC(圆砣)回复于 2001-11-28 18:54:29 得分 0
TO dingxiaojun(免费回答) 你说的可以将 COL 列全部设为 ‘SS’ 吗?
就如以下语句所做的一样吗?
FOR LL_ROW = 1 TO DW_1.ROWCOUNT()
dw_1.object.col[LL_ROW]='ss'
NEXT
我试了不行.
Top
9 楼fjfzyufan(羽帆)回复于 2001-11-28 19:23:20 得分 100
这个问题应该是无解的。
因为要赋的值是一个数组。
除非你用数组去赋值。
但你得先给数组赋值,
还是要用到循环。Top
10 楼killerdanny(堕落的瓦拉斯塔兹)回复于 2001-11-28 19:32:07 得分 0
fjfzyufan(羽帆)
如是所说!Top
11 楼trouble()回复于 2001-11-28 21:28:12 得分 0
我要设的字段 . 是一个 CHECKBOX 用来表示已选或是未选。( 1 / 0 )
为了让用户可以实现全选及全不选. 所以要用到该功能 . 没想到5000行数据却要近3 分钟.
这样看来我只能这样做了. 先循环出一个数组.再一次性对DW赋值 . 这样应该比直接
赋值会快 . 快多少我也不知道. 我去试一下.
抱 1/100000000 的希望再等一等。 神啊!!!!! 你帮帮我吧.
Top
12 楼fjfzyufan(羽帆)回复于 2001-11-28 21:49:41 得分 0
用数组吧。
我试了一下,5000行1秒搞定。Top
13 楼purpleflame(紫焰)回复于 2001-11-28 22:01:47 得分 0
我有个思路,不过没有试过,你可以去试试看,如果可以的话就告诉我:
是这样,对于datawindow, 其应该有四个缓冲区,你看看能不能用 Select 语句
直接更改缓冲区的内容。
Top
14 楼Dagan(小新)回复于 2001-11-29 13:59:10 得分 0
你在datawindow中设置就可以了,
在datawindow的菜单的rows中的column specifications..
将第一列的initial value 设为'ss'即可.
Top
15 楼pbdesigner(MIS/ERP开发)回复于 2001-11-29 14:06:45 得分 0
我想出了四种不用循环的方法和两种用循环的方法,一共12种形式,代码全部写好,并且全部测试OK,也已进行了性能比较,晚上贴出来.
实现这个功能很简单,每种方法不超过30行,全部使用PB内置函数,不管你是对哪列赋值,使用于字符、数字、日期时间、日期、时间各种形态。Top
16 楼kinglaw(wang)回复于 2001-11-29 14:28:35 得分 0
关键在setredraw吧。
dw_1.setredraw(false)
FOR LL_ROW = 1 TO DW_1.ROWCOUNT()
dw_1.object.col[LL_ROW]='ss'
NEXT
dw_1.setredraw(True)
Top
17 楼pbdesigner(MIS/ERP开发)回复于 2001-11-29 20:23:27 得分 0
下面给出我的解决方法,望各位兄弟指教。
方法一:importstring法
string ls_columnname='bank_id',ls_data
any la_data='adfsfds'
integer li_column
dw_1.setredraw(false)
datastore ds_1
ds_1= create datastore
ds_1.dataobject = dw_1.dataobject
ds_1.settransobject(sqlca)
li_column = integer(dw_1.describe(ls_columnname+'.id'))
ls_data = string(la_data)+'~r~n'
ls_data = fill(ls_data,len(ls_data) * dw_1.rowcount())
ls_data = left(ls_data,len(ls_data) - 2)
ds_1.importstring(ls_data,1,dw_1.rowcount(),1,1,li_column)
dw_1.object.data[1,li_column,dw_1.rowcount(),li_column]= ds_1.object.data[1,li_column,ds_1.rowcount(),li_column]
destroy ds_1
方法二:ImportClipboard法
string ls_columnname='bank_id',ls_data
any la_data='adfsfds'
integer li_column
dw_1.setredraw(false)
datastore ds_1
ds_1= create datastore
ds_1.dataobject = dw_1.dataobject
ds_1.settransobject(sqlca)
li_column = integer(dw_1.describe(ls_columnname+'.id'))
ls_data = string(la_data)+'~r~n'
ls_data = fill(ls_data,len(ls_data) * dw_1.rowcount())
ls_data = left(ls_data,len(ls_data) - 2)
Clipboard(ls_data)
ds_1.ImportClipboard(1,dw_1.rowcount(),1,1,li_column)
dw_1.object.data[1,li_column,dw_1.rowcount(),li_column]= ds_1.object.data[1,li_column,ds_1.rowcount(),li_column]
destroy ds_1
dw_1.setredraw(true)
方法三:ImportFile法
string ls_columnname='bank_id',ls_data,ls_filename = "C:\temp\kangjianmin_setitem.txt"
any la_data='adfsfds'
integer li_column,li_FileNum
dw_1.setredraw(false)
datastore ds_1
ds_1= create datastore
ds_1.dataobject = dw_1.dataobject
ds_1.settransobject(sqlca)
li_column = integer(dw_1.describe(ls_columnname+'.id'))
ls_data = string(la_data)+'~r~n'
ls_data = fill(ls_data,len(ls_data) * dw_1.rowcount())
ls_data = left(ls_data,len(ls_data) - 2)
if fileexists(ls_filename) then filedelete(ls_filename)
li_FileNum = FileOpen(ls_filename, StreamMode!, Write!, LockWrite!, Replace!)
FileWrite ( li_FileNum, ls_data )
Fileclose(li_filenum)
ds_1.ImportFile(ls_filename,1,dw_1.rowcount(),1,1,li_column)
dw_1.object.data[1,li_column,dw_1.rowcount(),li_column]= ds_1.object.data[1,li_column,ds_1.rowcount(),li_column]
destroy ds_1
if fileexists(ls_filename) then filedelete(ls_filename)
dw_1.setredraw(true)
方法四:Modify法
string ls_columnname='bank_id',ls_data,ls_coltype
any la_data='adfsfds'
integer li_column
string ls_modify
dw_1.setredraw(false)
li_column = integer(dw_1.describe(ls_columnname+'.id'))
ls_data = string(la_data)
ls_coltype = dw_1.describe(ls_columnname+'.coltype')
ls_modify = "create compute(band=Detail x='0' y='0' height='0' width='0' visible = '0' name=kangjianmin_setitem expression="
choose case trim(left(ls_coltype,5))
case 'char(','varch'
ls_modify = ls_modify + "~"'"+ls_data+"'~")"
case 'numer','long','integ','decim'
ls_modify = ls_modify +"~""+ls_data+"~")"
case 'datet'
ls_modify = ls_modify +"~"datetime('"+ls_data+"')~")"
case 'date'
ls_modify = ls_modify +"~"date('"+ls_data+"')~")"
case 'time'
ls_modify = ls_modify +"~"time('"+ls_data+"')~")"
end choose
dw_1.Modify(ls_modify)
dwobject dwo_dw,dwo_obj
dwo_dw = dw_1.object
dwo_obj = dwo_dw.__get_attribute ( ls_columnname, false )
dwo_obj.primary[1,dw_1.rowcount()]= dw_1.object.kangjianmin_setitem[1,dw_1.rowcount()]
dw_1.Modify("destroy kangjianmin_setitem")
dw_1.setredraw(true)
方法五:循环数组法
string ls_columnname='bank_id',ls_data,ls_coltype
any la_data='adfsfds',la_data_list[]
integer li_column
string ls_modify
long ll_rowcount,i
dw_1.setredraw(false)
li_column = integer(dw_1.describe(ls_columnname+'.id'))
ll_rowcount= dw_1.rowcount()
for i = 1 to ll_rowcount
la_data_list[i] = la_data
next
dwobject dwo_dw,dwo_obj
dwo_dw = dw_1.object
dwo_obj = dwo_dw.__get_attribute ( ls_columnname, false )
dwo_obj.primary[1,dw_1.rowcount()]= la_data_list[]
dw_1.setredraw(true)
方法六:循环setitem法
string ls_columnname='bank_id'
any la_data='adfsfds'
long ll_rowcount,i
dw_1.setredraw(false)
ll_rowcount= dw_1.rowcount()
for i = 1 to ll_rowcount
dw_1.setitem(i,ls_columnname,la_data)
next
dw_1.setredraw(true)
Top
18 楼pbdesigner(MIS/ERP开发)回复于 2001-11-29 20:49:45 得分 0
测试的结果太长,这里又不能划表格,不公布了。我分别用了10、100、500、10000笔资料对每种方法(每种方法又分为加setredraw(false)和不加两种情况)做测试,得出的结论是:资料不多时,循环数组法最快;资料稍多时,循环数组法最快;资料很多时,Modify法最快。要详细的测试的报告和方法,请发信到kangjianmin1@chinaren.com。
Top
19 楼killerdanny(堕落的瓦拉斯塔兹)回复于 2001-11-29 20:53:11 得分 0
pbdesigner(MIS/ERP开发) 回来了!呵呵
欢迎!欢迎!我的CB的底色问题,有没有方法解决呀!呵呵!Top
20 楼trouble()回复于 2001-11-29 22:28:38 得分 0
pbdesigner(MIS/ERP开发) 不愧为我心目中三大高手. 在下对您的仰慕之情 ...
以下有一把问题(都是我一个人的). 大部份都还没有最终答案. 麻烦你进去看看.
合计有 1000 多分. (你要可用分 , 还是专家分 )我一次性全部给你. 刚好我也在深圳.
并外加请您吃餐饭 .. 如能有有幸相见.此生无憾啊 !
其中有一题请一定看看. 或是在这里回答. PB 调存储过程的最佳方法是???
列表如下:
http://www.csdn.net/expert/topic/390/390091.shtm
http://www.csdn.net/expert/topic/363/363375.shtm
http://www.csdn.net/expert/topic/382/382066.shtm
http://www.csdn.net/expert/topic/381/381124.shtm
http://www.csdn.net/expert/topic/370/370593.shtm
http://www.csdn.net/expert/topic/388/388787.shtm
http://www.csdn.net/expert/topic/384/384996.shtm
http://www.csdn.net/expert/topic/387/387545.shtm
http://www.csdn.net/expert/topic/386/386207.shtm
不过 , 这题的分我会给 fjfzyufan(羽帆),
谢谢 (羽帆) , 我现用的就是数据赋值. 速度上可以接受了9000行 2 秒左右.
Top
21 楼pbdesigner(MIS/ERP开发)回复于 2001-11-30 10:23:39 得分 0
很抱歉,我的工作仍然很紧,至少还有500页的文档要在近期内完成,所以我没有时间在网上,CSDN有很多高手的,只要互相帮助应该可以解决的.有时间我一定会跟大家一起学习的.Top
22 楼PBVC(圆砣)回复于 2001-11-30 10:31:50 得分 0
其中有一题请一定看看. 或是在这里回答.
问题是 : PB 调存储过程的最佳方法是什么 ,要求得到返回值 ???
我已经在这转了, 三个星期了 .Top
相关问题
- 大家快来看看呀!一个不是问题的问题?无解呀!!!
- syx0001(无解の毒药),我错了,下次不敢了!
- @@@@servlet问题!!(但愿我这最后5分不要又是泥牛入海a!!!!!!)@@@@
- 一个简单的问题,可能无解,但还是问问看,权当散分
- 是30天还是31天,但愿不是29天,哪位日期玩的好,帮一把
- 100分的问题:相信这是很菜的问题,困扰了我1个小时但无解。是专家就进来看看
- 查遍MSDN,CSDN无解:派生一个CEdit,预先设置几个字符,允许用户插入其他字符但不能修改这几个。
- 关于ASp的FileSystemObject的看似简单的问题!!;已问过两遍,无解,请大家帮帮我阿!!!!分不够再加
- jmail 接收稍大的邮件时会超时,请教是何缘故?有无解决方法?急急急,UP给分
- 很水的问题,看有无解?




