Я использую следующую функцию для выполнения запроса Teradata из EXCEL 2007:
Function Get_Query_Results(Rng As Range, Location As String, var As String, UID As String, PWD As String) As Long
On Error GoTo TroubleWithTeradata
Rng.Select
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=Server12;UID=" & UID & ";PWD=" & PWD & ";", Destination:=Rng).QueryTable
.CommandText = var
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Get_Query_Results = LastInCol(Columns(Location)) - 1
Exit Function
TroubleWithTeradata:
Get_Query_Results = -1
End Function
Этот запрос помещает свои результаты в регион, угол «Северо-Запад» которого представляет собой некоторую ячейку, указанную Rng и определяет, сколько записей было возвращено, получая номер строки последней записи в номере столбца Местоположение , что и возвращает функция LastInCol (не указана здесь).Если запрос не дает сбоя, но не возвращает записей (т. Е. Только строку заголовка), количество возвращаемых записей равно 0. Если функция действительно завершается с ошибкой, количество возвращаемых записей равно -1.
Текст самого запроса Teradata содержится в строке var .И в этом заключается проблема.Я успешно использую эту функцию в течение многих лет.Но теперь мне нужно создать новый запрос, который заставит переменную var превысить ограничение EXCEL VBA в 32767 символов.
Я действительно не уверен, какие пределы здесь превышаются.Конечно, это длина переменной var , но есть также то, что может содержать параметр QueryTable .CommandText .
Как мне обойти эти ограничения?