为什么VBA中的任务在前一个任务完成之前执行?

时间:2010-02-12 11:02:19

标签: vba scripting vbscript

作为VBA新手,我无法理解一些VBA行为。

我得到了以下代码,它将数据库中的行读入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放在那里 - 但我永远不知道我的查询需要多长时间 - 这看起来真的很糟糕。

1 个答案:

答案 0 :(得分:0)

不确定,但这里有几件事需要检查:

  • ActiveX组件是.exe还是.dll?我似乎记得在VB6中dll运行'进程内'和exe运行'进程外',即异步运行。我不确定这如何适用于VBA。
  • 您是否知道您的ActiveX组件是否引发事件以表明它已完成查询?你可以在进入循环之前监听该事件。