sql - 传递给 ADODB 的查询长度是否有限制?

标签 sql vba excel adodb

我目前正在测试一个框架,该框架将 SQL 查询存储在 Excel 工作簿的单元格中,然后将单元格值传递给变量。然后通过 rs.Open query, cn 执行该变量,其中:

Dim rs As ADODB.Recordset 
Dim cn As ADODB.Connection 

我已经尝试过这些“查询”:

Dim query as String
Dim query as Variant

甚至使用固定长度查询:

Dim query as String * 9999

在处理查询字符串的输出时,它在 8000 左右的某个地方被切断。Google 无法满足我的需求,所以我来这里寻求答案。变量可以传递给 recordset.Open() 的内容是否有具体限制?

注意:我用于此特定查询的连接字符串是: ConnectionString =“用户ID=User;密码=PW;数据源=DB;Provider=OraOLEDB.Oracle”

但如果您知道 Oracle、NetezzaSQL 或 MS SQL Server (SQLOLEDB.1) 是否存在系统特定限制,请告诉我。我需要指定每个查询的限制,以便定义哪些新查询需要转换为存储过程。

以下是代码的要点:

Sub RunQueryTable()

Dim cn As ADODB.Connection
Dim RS As ADODB.Recordset
Dim iCols As Integer
Dim DB As String, User As String, PW As String
Dim SQLTable As Worksheet
Dim ConnectionString as String
Dim query As String 'Or Dim query As Variant 'Or Dim query As String * 9999
Dim i As Long
etc, etc.

Set SQLTable = Sheet32
Set cn = New ADODB.Connection
Set RS = New ADODB.Recordset

DB = _____
User = ______
PW = ____

ConnectionString = "User ID=" & User & _
                   ";Password=" & PW & _
                   ";Data Source=" & DB & _
                   ";Provider=OraOLEDB.Oracle"

query = SQLTable.Cells(i, 3).Text

cn.Open (ConnectionString)
RS.CursorType = adOpenForwardOnly
RS.Open (query), cn

For iCols = 0 To RS.Fields.count - 1
    Worksheets("Output").Cells(1, iCols + 1).Value = RS.Fields(iCols).Name
Next
Worksheets("Output").Cells(2, "A").CopyFromRecordset RS

RS.Close
cn.Close

End Sub

我从 VBA 收到的具体错误是:“ORA-00923:在预期位置未找到 FROM 关键字”,因为查询被切断。

最佳答案

这是你的问题:

query = SQLTable.Cells(i, 3).Text

考虑:

Range("A1").Value=string(12000,"*")
? len(range("a1").value) '>> 12000
? len(range("a1").text) '>> 8221

关于sql - 传递给 ADODB 的查询长度是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833809/

相关文章:

sql - 无法删除并重新创建 Oracle 文本索引

SQL Server连接Hadoop——实现的思考与挑战

excel vba - 有效循环二维数组

excel - 如何仅获取 Apache POI 中未隐藏的工作表数量

sql - 维护客户数据

sql - POSTGRESQL: 'utf8' 编解码器无法解码位置 31 中的字节 0x82:无效的起始字节

mysql在同一语句中插入选择

vba - 继续执行不起作用

excel - 循环遍历工作表以删除某些单元格

vba - 打开工作簿时自动运行宏?