Как начинающий 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 - но я никогда не могу знать, сколько времени займет мой запрос - и это похоже на очень плохой стиль.