传递SQL参数时连接循环中断

时间:2015-08-03 20:52:42

标签: sql-server excel excel-vba vba

背景:我需要允许人们在A1中粘贴任意数量的贷款号码。因此,A1:A10可以填充,或A1:A19587等,具有各种贷款号码。然后,用户将运行我的宏。

此宏将准备SQL格式等的贷款编号,然后将SQL CommandText设置为:"选择... from ...其中loannumber in("& MasterConcat(范围)&")"。 MasterConcat是一个连接函数(如下)。

问题:一切都适用于10笔贷款,或1000笔贷款,或1500笔贷款,但大约1700笔贷款和更多贷款,它打破了,说:"应用程序定义或对象定义的错误"。

然后我可以检查Data中的SQL CommandText - > Connections,并且CommandText是完美格式化的(减去许多贷款并没有连接在一起)。

其他注意事项:我可以在宏断开后手动向SQL CommandText添加更多贷款号码,然后再刷新数据,它就可以了!所以我知道它不是SQL CommandText字符限制。

就像函数只是停止工作在1700左右的贷款,打破宏,并打破.CommandText行(调试器显示这是有问题的行)。

VBA主宏:< - 这是来自检索数据的主宏。它调用的函数如下。

    'Mechanics I
    Sheets("Mechanics").Activate
    ActiveSheet.Range("A:A").ClearContents
    Range(ActiveSheet.Range("B3"), ActiveSheet.Range("B3").End(xlDown)).ClearContents

    'Inputs I
    Sheets("Input").Activate
    Range(ActiveSheet.Range("A1"), ActiveSheet.Range("A1").End(xlDown)).Copy

    'Mechanics I
    Sheets("Mechanics").Activate
    ActiveSheet.Range("A1").PasteSpecial xlPasteValues

    ActiveSheet.Range("B2").Copy
    ActiveSheet.Range("A2").End(xlDown).Select

    ActiveCell.Offset(0, 1).Select
    Range(ActiveCell, ActiveSheet.Range("B2")).PasteSpecial xlPasteFormulas

    'Data Connection I
    With ActiveWorkbook.Connections("server database table").OLEDBConnection
        .CommandType = xlCmdSql
        .CommandText = "select table.* from server.dbo.table table where table.m1loan in (" & MasterConcat(Range(ActiveSheet.Range("B1"), ActiveSheet.Range("B1").End(xlDown))) & ")"
    End With
    ActiveWorkbook.RefreshAll
    DoEvents

VBA功能脚本:< - 这是将A:A连接在一起的功能(贷款号码)

    Function MasterConcat(sourceRange As Excel.Range) As String

    Dim finalvalue As String
    Dim cell As Excel.Range

    For Each cell In sourceRange.Cells
        finalvalue = finalvalue + CStr(cell.Value)
    Next cell

    MasterConcat = finalvalue

    End Function

0 个答案:

没有答案