我已成功使用此功能访问数据库已有几年了。 Var字符串始终包含一个有效的SQL,它根据当天的数据动态构建。
Function Get_Query_Results(Rng As Range, Location As String, var As String, UID As String, PWD As String) As Long
Rng.Select
On Error GoTo TroubleWithDatabase
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=XDR223;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
TroubleWithDatabase:
Get_Query_Results = 0
End Function
LastInCol函数将函数的值设置为检索的记录数。如果出现错误,则将该函数的值设置为0.
今天我跟踪了
行的问题 .CommandText = var
当它尝试执行该行时,会捕获错误,然后跳转到TroubleWithDatabase并退出。
正如我所说,直到今天,这一直没有让我失望。今天,var的长度超过了32767个字符。它的长度为33582个字符。我怀疑.CommandText不能超过32767个字符,我觉得很奇怪。任何人都可以确认吗?
更好的是,任何人都可以通过该功能看到任何错误吗?
感谢您的帮助!