我正在设置一个自动化的 excel vba 工作簿,它通过查询提取数据,同时从 Excel 单元格中获取参数。
到目前为止,它已经在简单的查询和 SP 上工作,但我试图传递一个很长的查询,似乎 Excel 函数正在将字符串截断为 1043 个字符。
*该查询有 1426 个字符。
我对这个问题采取了 3 种不同的方法。
执行SQL存储过程(来自vba)而不是查询,问题是输入参数之一是一个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 尝试了相同的方法,并且效果很好。