0

我正在设置一个自动化的 excel vba 工作簿,它通过查询提取数据,同时从 Excel 单元格中获取参数。

到目前为止,它已经在简单的查询和 SP 上工作,但我试图传递一个很长的查询,似乎 Excel 函数正在将字符串截断为 1043 个字符。

*该查询有 1426 个字符。

我对这个问题采取了 3 种不同的方法。

  1. 执行SQL存储过程(来自vba)而不是查询,问题是输入参数之一是一个id列表,它的长度是可变的,并且作为SP参数传递很长,所以它没有工作即使分配Varchar(Max)为类型。

  2. 将查询执行到新表中,并将完整表提取到 excel 中。虽然这确实有效,但需要手动更新 id 列表,因此它的功能不够。

  3. 将 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 尝试了相同的方法,并且效果很好。

4

1 回答 1

1

您是否尝试过将Query变量与子中的其他声明显式声明为字符串?

Dim Query As String

根据这里,字符串可以:

  • 可变长度字符串最多可包含大约 20 亿 (2^31) 个字符。
  • 一个固定长度的字符串可以包含 1 到大约 64 K (2^16) 个字符。

希望这会有所帮助。

于 2019-01-31T15:51:27.493 回答