我正在使用以下功能从EXCEL 2007执行Teradata查询:
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 可以包含什么。
如何克服这些限制?