2017-07-03 68 views
0

我在單元格中有一個SQL SELECT查詢 (image)。我嘗試使用VBA將我的單元格中的字符串用作SQL查詢的字符串,但它只讀取部分字符串。在單元格中,查詢(不含引號)的長度爲685個字符。在變量中(運行時),查詢是(帶引號)185個字符長。下面是在單元格中查詢:excel vba讀取單元格中的SQL SELECT語句

SELECT Contacts.[Last Name], 
     Contacts.[First Name], 
     Contacts.[Maricom E-Mail], 
     Contacts.[Project, Org, Team] 
FROM Contacts 
WHERE (((Contacts.[Project, Org, Team])=""Proj - MDM"") 
     AND ((Contacts.[Active?])=Yes)) 
    OR (((Contacts.[Project, Org, Team])=""Team%"") 
     AND ((Contacts.[Active?])=Yes)) 
    OR (((Contacts.[Project, Org, Team])=""Orgs - CM"") 
     AND ((Contacts.[Active?])=Yes)) 
    OR (((Contacts.[Project, Org, Team])=""Orgs - Document Team"") 
     AND ((Contacts.[Active?])=Yes)) 
    OR (((Contacts.[Project, Org, Team])=""Orgs - Process Engineering"") 
     AND ((Contacts.[Active?])=Yes)) 
    OR (((Contacts.[Project, Org, Team])=""Orgs - QA"") 
     AND ((Contacts.[Active?])=Yes)) 
ORDER BY Contacts.[Last Name]; 

下面是我用它來讀取小區(我用的代號爲「暗淡更改爲MyQuery成串」早了,該單元被設置爲文本格式)代碼:

myQuery = Range("Project1Query").Value 

下面是已被宣佈爲一個字符串變量中的查詢:

"SELECT Contacts.[Last Name], 
     Contacts.[First Name], 
     Contacts.[Maricom E-Mail], 
     Contacts.[Project, Org, Team] 
FROM Contacts 
WHERE (((Contacts.[Project, Org, Team])=""Proj - MDM"") AND " 

可變然後在用於數據以下請求中使用:

ReviewersData.Open myQuery, ReviewersConn, adOpenStatic, adLockOptimistic 

有關500個字符被切斷的想法嗎?

+0

*請*格式化您的查詢。不要讓人滾動來閱讀你的查詢。 「 – Siyual

+0

」「Proj-MDM」「它似乎使用單引號。 'Proj - MDM' –

+0

固定長度字符串的最大字符串長度爲2^16 = 65535個字符。可變長度字符串的最大長度約爲20億個字符(2^31)。 當我將字符串複製到單元格中時,將它分配給一個字符串變量並執行'Debug.Print sqlStr',它給了我整個字符串。 'Debug.Print Len(sqlStr)'確實輸出了685。 –

回答

0

在獲取Range()。Value之前,嘗試將工作表中的雙引號替換爲Chr(34)。

+0

我也試過這個,謝謝。讀入變量時字符串仍然被切斷。 –

0

我發現我試圖訪問變量值的方式導致它出現截斷。我右鍵單擊VB IDE「本地」框中的變量值,選擇複製,然後將剪貼板中的內容粘貼到記事本中。它在那裏,字符串被截斷。當我做了文本的msgbox時,它是正確的。