【发布时间】:2011-01-16 02:45:41
【问题描述】:
作为 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.MoveFirst 之前使用 vxData1.MoveLast 来填充 vxData1?
-
嗨。是的,我已经试过了——同样的结果。 - 我经常看到这种做法 - 但实际上我也缺乏理解:当我执行 MoveFirst 时我的 recorset 没有完成 - 那么 MoveLast 根本不应该工作!