作爲VBA新手,我無法理解一些VBA行爲。爲什麼VBA中的任務在更早的任務完成之前得到執行?
我得到下面的代碼,它從db讀取行到activex控件中,然後嘗試將這些值放入數組中。 vxdata1 activex是專有的,沒有洞察力 - 但基本上它關心ADO連接,執行SQL命令並將結果集放入控制元素中。
//put all records from the db into the vxData1 datagrid
vxData1.SQLCommand = "SELECT x,y,z FROM t ORDER BY z"
//put the datagrid values into an array
Dim Array_Werte(500) As String
vxData1.MoveFirst
For i = 0 To 500 Step 1
Array_Werte(i) = vxData1.Column1 & ";" & vxData1.Column2 & ";" & vxData1.Column3
vxData1.MoveNext
Next i
出現下列問題:數組並不總是包含所有它應該有(非常難以預測)的數據。
當我調試代碼並通過循環時,一切都像一個魅力。所以我得出結論:當我進入循環時,耗時的數據庫查詢(大型數據集)還沒有完成。
現在我想知道:這是代碼問題,還是它一般是vba或腳本語言的「特性」? 我已經看到了網絡中的東西,就像把User.wait放在那裏 - 但我永遠不知道我的查詢需要多長時間 - 這看起來很糟糕。
只是猜測,你有沒有嘗試vxData1.MoveLast之前vxData1.MoveFirst填充vxData1? – Fionnuala 2010-02-12 13:03:16
嗨。是的,我試過 - 相同的結果。 - 我經常看到這種做法 - 但實際上我也缺乏理解:當我執行MoveFirst時,我的recorset沒有完成 - 那麼MoveLast根本不應該工作! – 2010-02-12 13:27:26