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

时间:2018-08-28 23:45:12

标签: oracle excel-vba adodb

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

hasht.hashnode[key] = node;

如果我使用不带“ with”的查询,则不会出现任何错误,例如

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

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

2 个答案:

答案 0 :(得分:0)

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

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

希望有帮助!

答案 1 :(得分:0)

您的代码应如下所示:

Cmd.CommandText = sqlText
Set rs.Source = cmd
rs.Open

Do Until rs.EOF

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

您使用哪个提供? Oracle的 Microsoft OLE DB提供程序MSDAORA)。我认为此提供者为deprecated,已有20年的历史,不应使用。当然,它不支持子查询分解,即WITH-Clause。