避免在VBA代码中的mySQL查询中使用新行分隔符



我有以下VBA从数据库中提取数据:

Sub Get_Data_from_DWH ()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim dateVar As Date

Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=XX.XXX.XXX.XX; DATABASE=bi; UID=testuser; PWD=test; OPTION=3"
conn.Open

strSQL = " SELECT" & _
" product, brand, sales_channel," & _
" country, sales_manager, sales_date, return_date, " & _
" process_type, sale_quantity, return_quantity " & _
" FROM bi.sales" & _
" WHERE sales_date BETWEEN '2020-01-01' AND '2020-06-30' " & _
" AND country IN ('DE', 'US', 'NL') " & _
" ORDER BY FIELD (brand, 'brand_A', 'brand_B', 'brand_C');"
Set rs = New ADODB.Recordset
rs.Open strSQL, conn, adOpenStatic

Sheet1.Range("A1").CopyFromRecordset rs
rs.Close
conn.Close

End Sub

该CCD_ 2在没有任何问题的情况下基于CCD_ 3提取数据。


然而,在我的原始文件中,VBA要大得多,因此我必须使用许多换行符"" & _
这使得在VBA中处理SQL非常困难,因为结构非常混乱

因此,我想知道是否有一种替代方案可以让您在不使用新的行分隔符的情况下输入SQL
类似这样的东西:

strSQL = " SELECT
product, brand, sales_channel,
country, sales_manager, sales_date, return_date,
process_type, sale_quantity, return_quantity
FROM bi.sales
WHERE sales_date BETWEEN '2020-01-01' AND '2020-06-30'
AND country IN ('DE', 'US', 'NL') 
ORDER BY FIELD (brand, 'brand_A', 'brand_B', 'brand_C'); "

你知道这是否可能吗?

最终答案-这在VBA中是不可能的,IDE不允许在字符串中换行。

但这里有一些建议:

如果您不能在数据库上创建视图并仅使用这些视图,也许您可以直接链接到数据源并以这种方式进行查询?所以你不必使用VBA来编写查询-Excel有很好的内置连接,你可以得到一个MySQL库,只需谷歌";在excel中连接到mysql数据库";

如果您真的想在其他地方将查询定义为文本,那么有一件事可能有助于整理代码,那就是从另一个地方加载字符串,在那里您可以将sql查询保持为您喜欢的格式。

您可以从VBA模块加载它们,该模块仍然有拆分的字符串,但您可以像StringSQL = Module1.GetQueryOne一样调用它们,这有助于将执行代码和SQL字符串分开

您可以创建一种方法从工作表单元格中提取查询,或者将它们保存在工作表的文本框中,然后可以使用

SqlString = ThisWorkbook.Sheets("Sheet1").Shapes("SqlQuery1").OLEFormat.Object.Text

甚至可以将它们保存在Excel工作簿附带的文本文件中,然后从那里加载。

最新更新