asp:执行搜索、更改access数据库问题
我先搜索数据库,然后判断条件是否符合,符合条件的更新记录,但是执行很慢,等半天也没结果(2W多条记录),程序如下:
<%Server.ScriptTimeOut=999999
set rs1=server.CreateObject ("ADODB.RECORDSET")
sql1="select tb_sell.sell_id,tb_stock.stock_table from tb_sell,tb_stock where tb_stock.stock_name=tb_sell.sell_stock"
rs1.open sql1,conn,3,1
if not rs1.eof then
for i=0 to rs1.recordcount-1
set rs3=server.CreateObject ("ADODB.RECORDSET")
sql3="select "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id from "&rs1("stock_table")&",tb_sell_list where "&rs1("stock_table")&".material_no=tb_sell_list.material_no and tb_sell_list.sell_id="&rs1("sell_id")&" and cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"
rs3.open sql3,conn,3,1
if not rs3.eof then
for j=0 to rs3.recordcount-1
conn.execute "update tb_sell_list set sell_price="&rs3(0)&" where sell_list_id="&rs3(2)
response.write "update tb_sell_list set sell_price="&rs3(0)&" where sell_list_id="&rs3(2)
rs3.movenext
next
end if
rs3.close
set rs3=nothing
rs1.movenext
next
end if
set rs1=nothing
set conn=nothing
%>
但用在一个5000条记录是,成功执行 请大家给点意见
问题点数:100、回复次数:9Top
1 楼tigerwen01(小虎)回复于 2003-09-01 09:04:57 得分 10
那是ACCESS数据库的一个局限吧。Top
2 楼ganq(小case,再烂的我都玩过~)回复于 2003-09-01 09:06:53 得分 10
关注~~Top
3 楼xiaobaowu(很想和你吹吹风(抵制日货))回复于 2003-09-01 09:25:34 得分 10
把第二个for中的rs3(0),rs3(2)改成他们的字段名rs3("sell_price"),rs3("sell_list_id")应该可以提高速度,但效果不一定理想,你试试吧。Top
4 楼wauo(泪尽北枝花)回复于 2003-09-01 09:36:37 得分 10
to :xiaobaowu(很想和你吹吹风)
我试了,现在还在执行中,~~~~~~~~~~~~~~慢~~~~~~~~~~~~Top
5 楼61(儿童节快乐)回复于 2003-09-01 09:44:23 得分 10
语句改为
<%Server.ScriptTimeOut=999999
set rs1=server.CreateObject ("ADODB.RECORDSET")
sql1="select tb_sell.sell_id,tb_stock.stock_table from tb_sell,tb_stock where tb_stock.stock_name=tb_sell.sell_stock"
rs1.open sql1,conn,3,1
while not rs1.EOF
set rs3=server.CreateObject ("ADODB.RECORDSET")
sql3="select "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id from "&rs1("stock_table")&",tb_sell_list where "&rs1("stock_table")&".material_no=tb_sell_list.material_no and tb_sell_list.sell_id="&rs1("sell_id")&" and cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"
rs3.open sql3,conn,3,1
while not rs3.EOF
conn.execute "update tb_sell_list set sell_price="&rs3(0)&" where sell_list_id="&rs3(2)
response.write "update tb_sell_list set sell_price="&rs3(0)&" where sell_list_id="&rs3(2)
rs3.movenext
wend
rs3.close
set rs3=nothing
rs1.movenext
wend
set rs1=nothing
set conn=nothing
%>
请讲明实现的目的,可以优化一下sql语句,你的循环嵌套太多,影响查询速度。Top
6 楼xiaobaowu(很想和你吹吹风(抵制日货))回复于 2003-09-01 09:44:23 得分 10
其实速度慢的主要原因不在数据库方面,而是字符串拼接。就是这种
sql3="select "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id from "&rs1("stock_table")&",tb_sell_list where "&rs1("stock_table")&".material_no=tb_sell_list.material_no and tb_sell_list.sell_id="&rs1("sell_id")&" and cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"
你可以做实验,如果改成很短的,速度就可以提高很多。
所以你要想方法使你的字符串拼接尽可能的减少,比如原来有10个&改成5个。Top
7 楼rangwoxiao(让我笑)回复于 2003-09-01 10:11:42 得分 10
我认为速度慢的原因是由于内存里的记录数目太多,我估计你的有数万条记录同时在内存里。你可以把rst1的当前记录赋予几个变量,然后把rst1先close,然后在执行rst3,不然的话内存里由于是使用了两个循环,在记录少时问题不大,当记录多了,象你的有两完条记录,两个循环就是4万条,呵呵,不是个小数目呀,多少内存都不够呀。Top
8 楼wauo(泪尽北枝花)回复于 2003-09-01 10:55:30 得分 20
请问有没有办法分匹执行Top
9 楼wauo(泪尽北枝花)回复于 2003-09-01 11:17:08 得分 10
还有cint(tab1.sell_price)<>cint(tab2.sell_price)有没有用???
cint在access中能不能运行??Top



