2017-07-03 242 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时,它是正确的。