我正在设置一个自动化的excel vba工作簿,该工作簿通过查询提取数据,同时从excel单元格中获取参数。
到目前为止,它已经处理了简单的查询和SP,但我试图传递一个很长的查询,Excel函数似乎正在将字符串截断为1043个字符。
*查询有1426个字符。
我对这个问题采取了三种不同的方法。
-
执行SQL存储过程(来自vba)而不是查询时,问题是其中一个输入参数是ID列表,ID的长度可变,作为SP参数传递非常长,因此即使将
Varchar(Max)
指定为类型,它也不起作用。 -
将查询执行到一个新表中,并将整个表提取到excel中。虽然这确实有效,但它需要手动更新id列表,因此它的功能还不够。
-
将SQL字符串作为字符串的串联直接传递给Excel函数,但它会引发错误,我认为这与字符串截断有关。
我的代码如下:
Private Sub CommandButton1_Click()
Dim organization As Integer 'Business Unit
Dim material As String 'List of IDs
organization = Sheets("Hoja1").Range("B3").Value 'Extract B3
material = Sheets("Hoja1").Range("B4").Value 'Extract B4
'Parsing the query into statements to be concatenated
Connection
With ActiveWorkbook.Connections("NZSQL Test").ODBCConnection
sql1 = 'statement1
sql2 = 'statement2
sql3 = 'statement3
sql4 = 'statement4
sql5 = 'statement5
sql6 = 'statement6
Query = sql1 & sql2 & sql3 & sql4 & sql5 & sql6
Sheets("Hoja1").Range("B2") = Query 'This is to beused as revision directly
in ODBC platform
.CommandText = Query
ActiveWorkbook.Connections("NZSQL Test").Refresh
End With
End Sub
在SQL中粘贴B2查询时得到的结果集:/*
ERROR [42000] ERROR: '...' 'Returns a part of the SQL string */
此处的字符串被截断为1043个字符。然而,我使用pyodbc尝试了Python中的相同方法,它非常有效。
您是否尝试将Query变量显式声明为字符串,并在sub中使用其他声明?
Dim Query As String
根据这里,字符串可以:
- 可变长度字符串最多可包含约20亿(2^31)个字符
- 固定长度的字符串可以包含1到大约64 K(2^16)个字符
希望这能有所帮助。