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

时间:2017-06-29 19:50:33

标签: sql vba excel-vba adodb excel

我目前正在测试一个框架,该框架在Excel工作簿的单元格中存储SQL查询,然后将单元格值传递给变量。然后,此变量通过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左右切断。谷歌对我来说很短暂,所以我来这里寻求答案。变量可以传递给recordset.Open()的具体限制是什么?

注意:我用于此特定查询的连接字符串是:     ConnectionString =“User ID = User; Password = PW; Data Source = 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关键字”,因为查询被切断了。

1 个答案:

答案 0 :(得分:2)

这是你的问题:

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

考虑:

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