ADODB 记录集:关闭对象时不允许的操作



这是一个产生相同错误的示例查询,但我有很多复杂的查询。

sqlText = "with t as (select * from dual) select * from t"
Cmd.CommandText = sqlText
Set rs = Cmd.Execute
Do While Not rs.EOF
For col = 0 To rs.Fields.Count - 1
Str = Str & " - " & rs.Fields(col).Value
Next col
rs.MoveNext
Str = Str & vbNewLine
Loop

如果我使用不带"with"的查询,我不会收到任何错误,例如

sqlText = "select * from dual"

这就是为什么我想知道它与上述两个sql查询在excel VBA中有什么区别,并想知道是否有解决方法。我仍然可以以不同的方式编写 sql 查询以产生相同的输出,而无需使用"with",但这不会让我的疑虑消失,所以喜欢听专家的解释。

在 select 语句之前,附加如下声明:

Dim sqlText As String
sqlText = "with t as (select * from dual) select * from t"

希望对您有所帮助!

你的代码应该是这样的:

Cmd.CommandText = sqlText
Set rs.Source = cmd
rs.Open
Do Until rs.EOF

Cmd.Execute用于命令,例如INSERTUPDATE.对于查询,您必须使用Open

您使用哪个供应?最有可能是Oracle 的 Microsoft OLE DB 提供程序(MSDAORA(。我认为此提供程序已弃用 20 年,不应使用。当然,它不支持子查询分解,即WITH-条款。

最新更新