这是一个产生相同错误的示例查询,但是我有很多复杂的查询。
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查询以产生相同的输出,但是这不会使我的疑问消失,因此想听听专家的解释。
答案 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
用于命令,例如INSERT
或UPDATE
。对于查询,您必须使用Open
您使用哪个提供? Oracle的 Microsoft OLE DB提供程序(MSDAORA
)。我认为此提供者为deprecated,已有20年的历史,不应使用。当然,它不支持子查询分解,即WITH
-Clause。