Excel VBA:OLEDB Connection.CommandText错误

Excel VBA:OLEDB Connection.CommandText错误,excel,vba,oledbconnection,data-connections,Excel,Vba,Oledbconnection,Data Connections,您好:我已经成功地将长SQL(Oracle)作为我手动输入的OLEDB数据连接中的命令文本。然后,我通过VBA成功地输入了SQL(因为我需要它根据不断变化的项目列表进行更新),并且只运行union查询的第一部分作为测试 但是,当我在联合查询中添加第二个片段并使strQuery命令包含三个单独的查询字符串时,它现在在下面的这行代码中抛出了一个错误:.CommandText=StrQueryAll StrQueryAll = StrQueryBegin & StrQueryAZ &

您好:我已经成功地将长SQL(Oracle)作为我手动输入的OLEDB数据连接中的命令文本。然后,我通过VBA成功地输入了SQL(因为我需要它根据不断变化的项目列表进行更新),并且只运行union查询的第一部分作为测试

但是,当我在联合查询中添加第二个片段并使strQuery命令包含三个单独的查询字符串时,它现在在下面的这行代码中抛出了一个错误:.CommandText=StrQueryAll

StrQueryAll = StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd

    With ActiveWorkbook.Connections("connection_name").OLEDBConnection
        .CommandText = StrQueryAll
        .Refresh
    End With
下面是删除实际sql的完整代码。sql代码太长是否有问题?或者是另一个问题,但它间接地说有错误?也许它不喜欢strQueryAll命令?我可以通过添加带有连续性限制的字符串来实现一个大的sql字符串,但我认为分解sql可能更干净

谢谢你的帮助

Private Sub Refresh_Data()

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQueryAll As String
Dim StrQueryBegin As String
Dim StrQueryAZ As String
Dim StrQueryCO As String
Dim StrQueryCA As String
Dim StrQueryEnd As String
Dim Item_List As String
Dim wksItemList As Worksheet
Dim wksDataTable As Worksheet
Dim rngItems As Range
Dim rngDatatbl As Range

Dim myMSG As String
'Dim pt As PivotTable

myString = "Refreshing Tables - Please Wait"
Application.StatusBar = myString

'With Application
    '.EnableEvents = False
    '.ScreenUpdating = False
'End With

    Set wksItemList = Worksheets("Items")
    Set rngItems = wksItemList.Range("E4")
    Set wksDataTable = Worksheets("data")
    Set rngDatatbl = wksDataTable.Range("A3")

Item_List = rngItems.Value

StrQueryBegin = "SELECT " & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
            StrQueryAZ = "    -- ****  AZ  ****" & Chr(13) & "" & Chr(10) & _
            "  select" & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
StrQueryCO = Chr(13) & "" & Chr(10) & " UNION " & Chr(13) & "" & Chr(10) & _
            "    -- ****  CO SYS  ****" & Chr(13) & "" & Chr(10) & _
            "  select " & Chr(13) & "" & Chr(10) & _
   ..... more sql....

   .... next sql string ....
StrQueryEnd = "            ) " & Chr(13) & "" & Chr(10) & _
            " ORDER BY  " & Chr(13) & "" & Chr(10) & _
            "   ITEM_NBR, WHS  " & Chr(13) & "" & Chr(10)

Debug.Print StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd
StrQueryAll = StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd


    With ActiveWorkbook.Connections("connection_name").OLEDBConnection
        .CommandText = StrQueryAll
        .Refresh
    End With

在执行更多搜索和测试后,问题是CommandText字符总数超过了允许的32767个字符


user1274820:在某种程度上,您正处于需要查看整个代码的位置。sql如此之长是因为我们的表的设置方式,而sql长度是一个必要的缺点。我将研究其他选项来运行此操作。

错误是什么?如果没有看到SQL代码,很可能无法找到问题。对不起,我确实忘记了添加这一点。。。运行时错误1004:应用程序定义或对象定义错误。但我知道这没用。我已经发布了完整的代码,没有查询的详细信息。到目前为止,我已经在vba中对查询进行了测试。不过我会继续测试,看看是否可以回溯。我还忘了添加的是,我之前在添加到sql之后才得到该错误。正在运行一些测试。。。现在,我取出了union查询的一部分。所以,我认为StrQueryCO中的SQL存在语法问题。我会纠正这一点,看看是否还有其他错误。只想说,您可能会考虑运行一些查询,将Excel中的数据与VBA相结合,然后运行其他查询。我知道我遇到了一些问题,我的SQL变得异常复杂-我最终只是使用SQL将数据带过来,并使用VBA处理它。