Excel VBA: OLEDB Connection.CommandText Ошибка

Привет: я успешно использовал длинный SQL (Oracle) в качестве текста команды в соединении данных OLEDB, которое я ввел вручную. Затем мне удалось ввести SQL через VBA (потому что мне нужно, чтобы он обновлялся на основе меняющегося списка элементов) и выполнить только первую часть запроса на объединение в качестве теста.

Однако, когда я сделал это последнее изменение, добавив 2-ю часть в запрос на объединение и заставив команду strQuery включать три отдельные строки запроса, теперь это выдает мне ошибку в этой строке кода ниже: .CommandText = StrQueryAll

StrQueryAll = StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd

    With ActiveWorkbook.Connections("connection_name").OLEDBConnection
        .CommandText = StrQueryAll
        .Refresh
    End With

Ниже приведен весь код с фактически удаленным sql. Есть ли проблема с кодом для sql слишком долго? Или, может быть, другая проблема, но это косвенно говорит об ошибке? Может быть, ему не нравится команда strQueryAll? Я могу сделать одну большую строку sql с добавлением строк с ограничением продолжения, но подумал, что было бы чище разбить sql.

Спасибо за вашу помощь!

Private Sub Refresh_Data()

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQueryAll As String
Dim StrQueryBegin As String
Dim StrQueryAZ As String
Dim StrQueryCO As String
Dim StrQueryCA As String
Dim StrQueryEnd As String
Dim Item_List As String
Dim wksItemList As Worksheet
Dim wksDataTable As Worksheet
Dim rngItems As Range
Dim rngDatatbl As Range

Dim myMSG As String
'Dim pt As PivotTable

myString = "Refreshing Tables - Please Wait"
Application.StatusBar = myString

'With Application
    '.EnableEvents = False
    '.ScreenUpdating = False
'End With

    Set wksItemList = Worksheets("Items")
    Set rngItems = wksItemList.Range("E4")
    Set wksDataTable = Worksheets("data")
    Set rngDatatbl = wksDataTable.Range("A3")

Item_List = rngItems.Value

StrQueryBegin = "SELECT " & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
            StrQueryAZ = "    -- ****  AZ  ****" & Chr(13) & "" & Chr(10) & _
            "  select" & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
StrQueryCO = Chr(13) & "" & Chr(10) & " UNION " & Chr(13) & "" & Chr(10) & _
            "    -- ****  CO SYS  ****" & Chr(13) & "" & Chr(10) & _
            "  select " & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
StrQueryEnd = "            ) " & Chr(13) & "" & Chr(10) & _
            " ORDER BY  " & Chr(13) & "" & Chr(10) & _
            "   ITEM_NBR, WHS  " & Chr(13) & "" & Chr(10)

Debug.Print StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd
StrQueryAll = StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd


    With ActiveWorkbook.Connections("connection_name").OLEDBConnection
        .CommandText = StrQueryAll
        .Refresh
    End With

person RARascon    schedule 05.09.2017    source источник
comment
В чем ошибка? Вероятно, будет невозможно найти проблему, не видя кода SQL.   -  person user1274820    schedule 05.09.2017
comment
Извините, я забыл добавить это... Это ошибка времени выполнения 1004: ошибка, определяемая приложением или объектом. Я знаю, что это не помогает. Я разместил весь код без деталей запроса. Запрос работает, и до этого момента я тестировал его в vba. Тем не менее, я продолжу тестирование и посмотрю, смогу ли я вернуться.   -  person RARascon    schedule 05.09.2017
comment
Что я также забыл добавить, так это то, что я не получал эту ошибку раньше, пока не добавил в sql.   -  person RARascon    schedule 06.09.2017
comment
Выполнение некоторых тестов... теперь работает, потому что я удалил часть запроса на объединение. Итак, я думаю, что есть проблема с синтаксисом SQL в StrQueryCO. Я исправлю это и посмотрю, появятся ли другие ошибки.   -  person RARascon    schedule 06.09.2017


Ответы (1)


После дополнительных поисков и тестов проблема заключается в том, что общее количество символов CommandText превысило допустимые 32 767 символов.

user1274820: В каком-то смысле вы оказались именно там, где вам нужно было увидеть весь код. SQL такой длинный из-за того, как настроены наши таблицы, а длина sql является необходимым злом. Я буду искать другие варианты, чтобы запустить это.

person RARascon    schedule 05.09.2017
comment
Просто хотел сказать - вы можете рассмотреть возможность выполнения некоторых запросов, объединения данных в Excel с использованием VBA, а затем выполнения дополнительных запросов. Я знаю, что сталкивался с некоторыми проблемами, когда мой SQL становился невероятно сложным — в итоге я просто переносил данные с помощью SQL и обрабатывал их с помощью VBA. - person user1274820; 06.09.2017