要开始这篇文章,我想说我对Excel 2007 vba宏很新。我试图调用一个将光标作为输出参数的Oracle PL/SQL存储过程。程序规范是这样的:PL/SQL存储过程将光标移出到VBA ADODB.RecordSet?
PROCEDURE get_product
(
out_cur_data OUT SYS_REFCURSOR,
rptid IN NUMBER,
scenario IN VARCHAR2
);
而且我已经写了我的宏为:
Sub GetProduct()
Const StartRow As Integer = 4
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
With conn
.ConnectionString = "<my connection string>"
.Open
End With
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = "{call their_package.get_product({out_cur_data 100},?,?)}"
.NamedParameters = True
.Parameters.Append cmd.CreateParameter("rptid", adNumeric, adParamInput, 0, 98)
.Parameters.Append cmd.CreateParameter("scenario", adVarChar, adParamInput, 4, "decline001")
End With
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
End With
Set rs = cmd.Execute
Cells(StartRow + 1, 1).CopyFromRecordset rs
rs.Close
conn.Close
End Sub
这不明明工作,我得到一个运行时错误“-2147217900(80040E14):一或在处理命令期间发生更多错误。“那么好吧。
我在寻找一些关于如何将光标放回ADODB.RecordSet的指导/建议。我不认为我已经为“out_cur_data”正确设置了输出光标,但是我的在线搜索任何帮助都已经干了。任何人都可以给我一个基本的实例来帮助我理解我做错了什么吗?
顺便说一句...我根本没有对存储过程的控制,它来自外部包。
任何帮助真的很感激。
感谢, 多伦
这是伟大的东西。但是,出于某种原因,我的“ADODB.Command”对象的“属性”表中没有“PLSQLRSet”属性。我调试了我的对象并在“属性”中检查了每个项目,但它不在那里。有一个叫做“服务器光标”,那是什么?另外,我检查了...我有VB6.5,如果这很重要。 – DoranKatt
我想我明白了这一点。连接字符串中指定的错误提供者。我正在使用“Provider = MSDAORA.1;”并看到这个问题。将其更改为“Provider = OraOLEDB.Oracle;”已经修复了。 – DoranKatt
是的,提供商“MSDAORA”是微软的提供商,它已被微软弃用了很长一段时间。改为使用Oracle提供者“OraOLEDB”。 –