2011-03-23 194 views
0


我想在WORD VBA中使用存储过程来检索一些使用存储过程来填充列表字段的地址。从VBA调用Oracle存储过程ADODB

Private Sub txtCpny_AfterUpdate() 
Dim rst As ADODB.Recordset 
Dim cmd As ADODB.Command 
Dim param1 As ADODB.Parameter 
Dim param2 As ADODB.Parameter 
Dim strCpny As String 

strCpny = GetSearchString(Me.txtCpny) 'ie %Name% 

Set cmd = CreateObject("ADODB.Command") 

With cmd 
    .ActiveConnection = mcn 
    .CommandText = "LISTPARTNER_NAME" 
    .CommandType = adCmdStoredProc 
    Set param1 = .CreateParameter("RCT1", adInteger, adParamInputOutput, , Null) 
    Set param2 = .CreateParameter("firmaName", adVarChar, adParamInput, 50, strCpny) 
    .Parameters.Append param1  
    .Parameters.Append param2  
    Set rst = .Execute 
End With 

...Using the recordset here 

rst.Close 
Set param1 = Nothing 
Set param2 = Nothing 
Set cmd = Nothing 
End Sub 

存储过程如下所示:SQL应导致记录集包含匹配的公司。

PROCEDURE LISTPARTNER_NAME ( 
firmaName IN VARCHAR2 DEFAULT NULL, 
RCT1   IN OUT GLOBALPKG.RCT1 
) 

AS 
BEGIN 
    OPEN RCT1 FOR 
    SELECT 
    ... 
    FROM 
    ... 
    WHERE 
    KNAG.NAME_ORG LIKE LISTPARTNER_NAME.firmaName 
    ... 
END LISTPARTNER_NAME 

当执行VB指令引发运行时错误

ORA-06550: Line 1, column 13: 
PLS-00306: wrong number or types of arguments in call to 
'LISTPARTNER_NAME' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

在我看来,我做错了什么机智的参数。我一直在尝试各种版本的设置参数,没有运气
任何线索? 感谢

+0

看看这个主题,它可能是帮助(很糟糕的发布链接,所以我把它在下面的答案) – Harrison 2011-03-23 18:39:27

回答

1

我已经成功地使用此代码中访问:

Function runAdo(sql As String, usr As String, pwd As String) 
'by Patrick Honorez - www.idevlop.com ----- 09-nov-2012 
'Purpose : run Oracle proc using ADO connection 

    Dim cn As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Set cn = New ADODB.Connection 
    cn.Open GetPersonalizedConnectStringADO(usr, pwd) 
    Set rs = New ADODB.Recordset 
    rs.Open sql, cn, adOpenStatic, adLockReadOnly 
    cn.Close 
End Function 

我很少使用ADO从Access,因为我发现d AO更简单易用,但在这种情况下,我必须执行一些需要不同UID的Oracle proc,并创建一个指定不同UID和PWD的新DAO Querydef,这可能是因为Access保留了连接缓存。
所以我决定使用ADO作为第二个“用户”,它的功能就像一个魅力。