9

ADODBとOracleを介してwith句を使用してSQLクエリを実行できません。

つまり、次のスニペットが機能します。

Dim cn As ADODB.connection
Set cn = ....

Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset

rs.Open "select 'foo' x from dual", cn


Do While Not rs.eof
   ...
   rs.MoveNext
Loop

ただし、以下は機能しません。実行時エラー3704が生成されます。オブジェクトが閉じている場合、操作は許可されません。

Dim cn As ADODB.connection
Set cn = ....

Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset

rs.Open "with w as (select 'foo' x from dual) select x from w", cn

Do While Not rs.eof
   ...
   rs.MoveNext
Loop

明らかに、これは、より洗練されたクエリで構成される実際の問題の縮小されたデモンストレーションです。

ADODBは、クエリをOracleインスタンスに渡す前に解析し、 with句を理解しないように思われます。とにかく、これに関するどんな助けも大歓迎です。

4

2 に答える 2

18

わかりました。実際には、ADODBはクエリステートメントが実際にはで始まることを期待しているようですselect。したがって、この問題の回避策は、ステートメントを次のselect * from ( .... )ように囲むことです。

Dim sql As String
sql = "with w as (select 'foo' x from dual) select x from w"

' enclose the statement:
sql = "select * from (" & sql & ")"

rs.Open sql, cn
于 2010-02-23T13:46:15.110 に答える
1

上記の方法は私にはうまくいきませんでした。

「;」を追加する WITHキーワードの前に問題が解決しました。

Dim sql As String sql = "; with w as(select'foo' x from dual)select x from w"

rs.Open sql、cn

于 2013-01-23T16:27:57.327 に答える