谁能优化该程序,加100分!
dw_1,dw_2,其中dw_2是临时表,dw_1 比dw_2多3 个字段
long kk
kk=dw_2.importfile(pathfileselectd)
messgebox("FFF","OK") //该句执行时很快出现 说明importfile很快
kkkk=dw_2.update()
if kkkk=1 then
commit;
end if
num0=dw_2.retrieve()
dw_1.object.data[1,2,num0,12]=dw_2.object.data[1,1,num0,11]
for i=1 to num0
dw_1.object.data[i,1]="AAAA"
dw_1.object.data[i,13]='0'
dw_1.object.data[i,14]='1'
next
kkkk=dw_1.update()
if kkkk=1 then
commit;
end if
for i=1 to num0
dw_1.object.data[i,1]="AAAA"
dw_1.object.data[i,13]='0'
dw_1.object.data[i,14]='1'
next
可以不做,直接使用 update 语句对表操作(假如后三个字段不是重要的字段)
或者干脆使用
insert into dw2的对应表(fieldlist) select (fieldlist)
form dw1的对应表;
直接使用 SQl 语句,要比使用控件快!
我经过查找,就是for i=1 to num0该段循环很慢,怎么改?
long num0
dw_2.importfile(pathfileselectd)
dw_2.update()
if dw_2.update()=1 then
commit;
else
rollback;
end if
num0=dw_2.retrieve()
dw_1.object.data[1,2,num0,12]=dw_2.object.data[1,1,num0,11]
dw_1.Modify(""+dw_1.Object.#1.Name+".Initial='AAAA'")
dw_1.Modify(""+dw_1.Object.#13.Name+".Initial='0'")
dw_1.Modify(""+dw_1.Object.#14.Name+".Initial='1'")
if dw_1.update()=1 then
commit;
else
rollback;
end if
将下列语句
dw_1.object.data[1,2,num0,12]=dw_2.object.data[1,1,num0,11]
for i=1 to num0
dw_1.object.data[i,1]="AAAA"
dw_1.object.data[i,13]='0'
dw_1.object.data[i,14]='1'
next
写到存储过程中处理,而且只需一句语句即可,可以提高较快的速度
dw_1.Modify(""+dw_1.Object.#1.Name+".Initial='AAAA'")
dw_1.Modify(""+dw_1.Object.#13.Name+".Initial='0'")
dw_1.Modify(""+dw_1.Object.#14.Name+".Initial='1'")
上面几句在运行中出现错误,能有正确?
我用了
string err
err=dw_1.modify("month.initial='aaaa'")
messagebox("1",err)
err=dw_1.modify("flag.initial='0'")
messagebox("2",err)
err=dw_1.modify("typeflag.initial='1'")
messagebox("3",err)
每次err都显示空值 ,但是dw_1.update()总不能更新,说是month值 为空值
怎么办?
1.如果你只是导入一次数据你可以用pb的数据管道.
2.如果你在程序中经常用这种操作并在乎时间,你必须写存储过程.这需要你熟悉你所用的数据库的SQL语句.其实插简单,依据数据库而言.
3.或者你改一下得到dw_2数据总行数的语句:
num0=dw_2.rowcount() //已经导入了数据,无须再重新提取数据,除非你的数
//据库中有自己定义的存储过程.
4.如果你的dw_1的1,13,14的值为固定的值,你还可以试一下在创建dw_1对应的数据库的相应字段的默认值.
我觉得可以用sql语句实现,速度应该比较快:
dw_1,dw_2,其中dw_2是临时表,dw_1 比dw_2多3 个字段
long kk
kk=dw_2.importfile(pathfileselectd)
messgebox("FFF","OK") //该句执行时很快出现 说明importfile很快
kkkk=dw_2.update()
if kkkk=1 then
commit;
end if
//以下用sql语句,临时表:mytemp,dw_1对应表:mytable
string ls_sql
ls_sql="insert into mytable(c1,c2,c3,c4,...c14) select 'aaa',t2,t3...,t12,'0',1')"
execute immediate :ls_sql;
if sqlca.cqlcode=o then
commit;
else
rollback;
end if
string ls_sql
ls_sql="insert into mytable(c1,c2,c3,c4,...c14) select 'aaa',t2,t3...,t12,'0',1')"
execute immediate :ls_sql;
if sqlca.cqlcode=o then
commit;
else
rollback;
end if
上面这段能否写的详细一些
从你给出的代码来看,似乎dw1的数据是从dw2写入库中的数据得到的。(如果我没有理解错的话)
因此,可以把dw2去掉,dw1后台数据字段的排列与dw2一样,再在最后增加那三个字段,设好初值。然后对dw1直接importfile,update。
重新作一下dw_1和dw_2的dataobject对象使其该对应的一一对应
然后直接对dw_2.importfile(xx_file)
而三个2-1不存在列放在最后面,却省之设置 ''aa 之类
update;
不用dw2,jghuang(jghuang)说的方法最好!
如果上面jghuang(jghuang)的方法可行的话:
你可以把第一个字2段default设为 “-1”
datawindow update 后可用SQL :
update table_name set Month = "Month" where month = "-1".
如果UPDATE 慢的话对month 建一个索引。
在此循环中改为 用setitem(),可以提高近四倍的速度,你可以试一下
for i=1 to num0
dw_1.object.data[i,1]="AAAA"
dw_1.object.data[i,13]='0'
dw_1.object.data[i,14]='1'
next
如果这三列的植是固定的,直接在DW里社INITIAL就可