Вызов хранимой процедуры Oracle из VBA ADODB - PullRequest
0 голосов
/ 23 марта 2011

Привет
Я пытаюсь использовать хранимую процедуру в WORD VBA для получения некоторых адресов, используя хранимую процедуру для заполнения поля списка.

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 выдает ошибку RunTime

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

По моему мнению, я делаю что-то не так с параметрами,Я безуспешно пробовал разные варианты установки параметров
Есть какие-нибудь подсказки?Спасибо

Ответы [ 2 ]

1 голос
/ 09 ноября 2012

Я успешно использую этот код в Access:

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, поскольку считаю, что DAO проще в использовании, но в этом случае мне пришлось выполнить некоторые процессы Oracle, требующиедругой UID и создание нового DAO Querydef с указанием различных UID и PWD не работали, возможно, из-за того, что Access хранит кэш соединений.
Поэтому я решил использовать ADO для второго «пользователя», и он работаеткак шарм.

1 голос
/ 23 марта 2011

посмотрите на эту ветку, это может быть полезным http://forums.oracle.com/forums/thread.jspa?threadID=360922

Единственное, что я мог бы предложить, это переключить порядок параметров (чтобы они были в том же порядке - язнаю ODP по умолчанию, но я не уверен в ADODB)

...