ODBC в VBA медленно ломается
Я использую Windows 7 Professional в 64-битной операционной системе. Я использую VBA в Excel и соединение MySQL ODBC 5.2ANSI Driver в SysWOW64 для подключения и выполнения запросов в базе данных MySQL Workbench 6.3. Мой макрос выполняет серию запросов. Он работал нормально до того дня, когда некоторые запросы перестали работать. Я печатаю каждый запрос, и когда я вручную копирую и вставляю запрос в базу данных MySQL Workbench, запрос выполняется нормально; данные определенно есть. Все больше и больше запросов перестали работать с течением времени.
IE Первый день с проблемами, пара запросов не дал результатов. Макрос выполняет около 30 запросов. Сейчас около 7 запросов не работают.
Я не понимаю, почему одни запросы дают результаты, а другие нет. Когда я отлаживаю, я вижу, что ADODB.Connection подключается, но при попытке выполнить запрос происходит сбой набора записей.
Вот как выглядит код:
Sub Test()
Dim myODBC As String
Dim ConnectionString As String
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String, SQL_ML As String
Dim Var as Double
ConnectionString = “Connection String”
SQL = “SQL String”
Var = MyFunction(SQL, ConnectionString)
‘ Different variable names are used within the function for the connection
'and record set
‘There are 4 functions in this fashion. Only 1 is erroring out at the
'moment!
Dim rng_ML As Range
Set rng_ML = Application.Range("rng_ML")
Dim ML_Matrix() As Double
ReDim ML_Matrix(1, rng_ML.Columns.count)
For i = 1 To UBound(ML_Matrix, 2)
SQL_ML = SQL & rng_ML(1, i)
Set rs = conn.Execute(SQL_ML) ‘This is where it is SOMETIMES erroring out.
rs.MoveFirst
ws.Cells(Row, 1 + i).CopyFromRecordset rs
Next i
End Sub`
Опять же, этот код работал в течение нескольких месяцев и теперь медленно ломается. Кто-нибудь слышал об этом раньше?
1 ответ
Добавьте следующую проверку:
If rs.RecordCount > 0 Then
rs.MoveFirst
ws.Cells(Row, 1 + i).CopyFromRecordset rs
End If
Я не могу видеть, где вы открываете соединение, но я предполагаю, что вы делаете это до выполнения операторов SQL. Пожалуйста, отправьте описание ошибки, в противном случае мы можем просто догадаться...