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