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

避免在VBA代码中的mySQL查询中使用新行分隔符,mysql,sql,vba,optimization,Mysql,Sql,Vba,Optimization,我使用以下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

我使用以下
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
VBA
基于
SQL
提取数据,没有任何问题


但是,在我的原始文件中,
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工作簿附带的文本文件中并从中加载。

将查询文本存储在单独的位置(例如,外部TXT文件)并在执行过程中加载。allen browne的这段精彩代码可能会帮助您从感兴趣的链接“将SQL语句从查询复制到VBA”。我只是想知道它是否只适用于access数据库或mySQL。您可以将其用于任何sql db字符串,它只是一个用户表单,您可以在其中复制粘贴sql查询,并将其拆分为VBA格式。我也喜欢使用文本框的想法,因此我为它提出了另一个问题: