ODBC查询中的.CommandText(EXCEL VBA)

时间:2018-04-18 21:38:19

标签: excel vba odbc

我已成功使用此功能访问数据库已有几年了。 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个字符,我觉得很奇怪。任何人都可以确认吗?

更好的是,任何人都可以通过该功能看到任何错误吗?

感谢您的帮助!

0 个答案:

没有答案