这是一个产生相同错误的示例查询,但我有很多复杂的查询。
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
用于命令,例如INSERT
或UPDATE
.对于查询,您必须使用Open
您使用哪个供应?最有可能是Oracle 的 Microsoft OLE DB 提供程序(MSDAORA
(。我认为此提供程序已弃用 20 年,不应使用。当然,它不支持子查询分解,即WITH
-条款。