現在ExcelのブックにあるセルにSQLクエリを格納し、セル値を変数に渡すフレームワークをテストしています。この変数は、その後rs.Open query, cn
を通じて実行されます:ADODBに渡されるクエリの長さには制限がありますか?
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()
に渡すことができるものには特定の制限がありますか?
NB:私は、この特定のクエリのために使用しています接続文字列は次のとおりです。 のConnectionString = "ユーザーID =ユーザー、パスワード= PW;データソース= DB;プロバイダ= 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:予想どこキーワードは見つかりません」クエリが切断取得しているため。
query = SQLTable.Cells(i, 3).Text
を考えてみましょう:
あなたの実際のコードと、使用しているデータベースを追加してください。 –
なぜVBAコードに8K +文字のインラインSQLクエリがありますか?ストアドプロシージャについて聞いたことがありますか?彼らは不思議に思う! –
8Kの文字が意味をなさないと言うと、それは 'nvarchar(max)'です(SQL Serverを仮定して質問を明確にしてください)。おそらくADODBではなくサーバーによって駆動されるでしょう。 –