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. Пожалуйста, отправьте описание ошибки, в противном случае мы можем просто догадаться...

Другие вопросы по тегам