作为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