2017-09-05 40 views
0

您好:我已經成功將一個長SQL(Oracle)作爲手動輸入的OLEDB數據連接中的命令文本。然後我通過VBA成功進入SQL(因爲我需要它根據不斷變化的Item List進行更新),並且只運行聯合查詢的第一部分作爲測試。Excel VBA:OLEDB Connection.CommandText錯誤

但是,當我做了最後一項更改時,向聯合查詢添加了第二塊,並且使strQuery命令包含三個單獨的查詢字符串,現在它在此行代碼中引發錯誤:.CommandText = StrQueryAll

StrQueryAll = StrQueryBegin & StrQueryAZ & StrQueryCO & StrQueryEnd 

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

以下是刪除了實際sql的完整代碼。 sql的代碼是否有問題太久?或者也許是另一個問題,但它間接地說有錯誤?也許它不喜歡strQueryAll命令?我可以做一個大的sql字符串,並在延續限制的基礎上添加字符串,但認爲它可能更清晰地分解sqls。

感謝您的幫助!

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 
+0

什麼是錯誤?沒有看到SQL代碼就可能發現問題。 – user1274820

+0

對不起,我沒有忘記補充說...它是運行時錯誤1004:應用程序定義或對象定義的錯誤。我知道這並沒有幫助。我已經發布了整個代碼沒有查詢的詳細信息。該查詢起作用,並且我已經在vba中對此進行了測試。我會繼續測試,看看我能否回溯。 – RARascon

+0

我也忘了補充說的是我之前沒有得到那個錯誤,直到我加入到sql中。 – RARascon

回答

0

經過多次搜索和測試後,問題是總的CommandText字符已經超過了允許的32,767個字符。

user1274820:從某種意義上說,您是對的,您需要查看整個代碼。 SQL很長,因爲我們的表設置方式和sql長度是一個必要的罪惡。我會研究其他選項來運行這個。

+0

只是想說 - 你可能會考慮運行一些查詢,使用VBA在Excel中組合數據,然後運行其他查詢。我知道我遇到了一些問題,我的SQL變得非常複雜 - 我最終只是使用SQL來處理數據,並使用VBA處理它。 – user1274820