谁能优化该程序,加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
[541 byte] By [ywfhj-ywfhj] at [2007-12-16]
# 1

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 语句对表操作(假如后三个字段不是重要的字段)
hzhxxx-程序方程 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 2
或者干脆使用

insert into dw2的对应表(fieldlist) select (fieldlist)
form dw1的对应表;

直接使用 SQl 语句,要比使用控件快!
hzhxxx-程序方程 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 3
我经过查找,就是for i=1 to num0该段循环很慢,怎么改?
ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 4
并且该三个字段不能为空
ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 5
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
warchild-大成若缺 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 6
将下列语句
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
写到存储过程中处理,而且只需一句语句即可,可以提高较快的速度
wangsj_zj-藤 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 7
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'")
上面几句在运行中出现错误,能有正确?
ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 8
我用了
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值 为空值
怎么办?

ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 9
1.如果你只是导入一次数据你可以用pb的数据管道.
2.如果你在程序中经常用这种操作并在乎时间,你必须写存储过程.这需要你熟悉你所用的数据库的SQL语句.其实插简单,依据数据库而言.

3.或者你改一下得到dw_2数据总行数的语句:

num0=dw_2.rowcount() //已经导入了数据,无须再重新提取数据,除非你的数
//据库中有自己定义的存储过程.
4.如果你的dw_1的1,13,14的值为固定的值,你还可以试一下在创建dw_1对应的数据库的相应字段的默认值.

sunboy_hb-无花果 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 10
我觉得可以用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
zhangshunshi-宇轩 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 11
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

上面这段能否写的详细一些

ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 12
从你给出的代码来看,似乎dw1的数据是从dw2写入库中的数据得到的。(如果我没有理解错的话)
因此,可以把dw2去掉,dw1后台数据字段的排列与dw2一样,再在最后增加那三个字段,设好初值。然后对dw1直接importfile,update。
jghuang-jghuang at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 13
重新作一下dw_1和dw_2的dataobject对象使其该对应的一一对应

然后直接对dw_2.importfile(xx_file)
而三个2-1不存在列放在最后面,却省之设置 ''aa 之类

update;
joachern-程序人生 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 14
不用dw2,jghuang(jghuang)说的方法最好!
xiong058-xiong058 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 15
问题是第一个字段的值并不是固定的,是当前的月份
ywfhj-ywfhj at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 16
如果上面jghuang(jghuang)的方法可行的话:

你可以把第一个字2段default设为 “-1”
datawindow update 后可用SQL :

update table_name set Month = "Month" where month = "-1".

SunnyKang-杰 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 17
如果UPDATE 慢的话对month 建一个索引。
SunnyKang-杰 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 18
怎么还不揭贴??
hzhxxx-程序方程 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 19
ok
msf-飞黄腾达 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 20
在此循环中改为 用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
callingda-林丁 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...
# 21
如果这三列的植是固定的,直接在DW里社INITIAL就可
suxkqd-速度 at 2007-10-26 > top of Msdn China Tech,PowerBuilder,基础类...