?? 從.dbf到.mdb查找更新速度慢.txt
字號(hào):
對(duì)于這個(gè)問(wèn)題,我想應(yīng)該是因?yàn)槟阍诘谝淮蜗騨ew.mdb中添加old1.dbf時(shí),是逐條添加,7000多條記錄用二十多秒是比較正常的,但是在你用old2.dbf更新new.mdb時(shí),因?yàn)槟忝扛乱粭l記錄都要使用select語(yǔ)句查找stu_ID號(hào),這相當(dāng)于你每更新一條記錄,就又對(duì)new.mdb庫(kù)查找了一遍,根據(jù)查找的平均時(shí)間,也是遍歷全記錄的一半左右,8000多條記錄,就是你又對(duì)new.mdb遍歷了8000多遍,所以你第二次用時(shí)六七分鐘也是有可能的。
如果你想提高速度,你可以先對(duì)old2.dbf和new.mdb以stu_ID進(jìn)行相同升序或降序排序,然后從頭開(kāi)始,利用比較插入法:如下
if old2.stu_ID>new.stu_ID then '如果old2.stu_ID大,不用插入,new記錄后移
new.skip
else if old2.stu_ID new.update(old2.stu_ID)
new.skip
old2.skip
end if
end if
end if
利用這個(gè)方法可以所用的平均時(shí)間就是對(duì)old2和new遍歷一遍,一共用兩遍就可以完成估計(jì)大概用時(shí)在50秒以?xún)?nèi)。但是排序可能要花去一定的時(shí)間,你可以比較一下,看這種方法是否可以節(jié)省時(shí)間。
<END>
我想問(wèn)題在于你在循環(huán)體內(nèi)打開(kāi)Recordset的緣故。即:
rs.Open "SELECT * FROM tblNew WHERE stu_ID='" & Trim(tempstuID) & "'"
使用ado打開(kāi)數(shù)據(jù)比較慢(比DAO慢),特別RS的游標(biāo)類(lèi)型是客戶(hù)端游標(biāo)時(shí)。
事實(shí)上你可以在循環(huán)體外打開(kāi)rs,如下:
rs.Open "Select * from tblNew"
然后在循環(huán)體內(nèi)使用Find方法查找是否有滿足條件的記錄:
rs.MoveFirst '在ADO中,這句不可少
rs.Find "stu_ID ='" & tempstuID & "'"
If rs.EOF Then
'添加記錄
Else
'更新記錄
End If
<END>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -