2011-10-28 16 views
1

Visual Basic 6を使用してOracle 11gに接続しています。 はい、正常にデータベースに接続できます。 問題は、データベースからレコードセットを受け取ることです。 私は以下のようなOracleパッケージを作成しました:Visual Basic with Oracle 11g REF CURSOR NOT working

パッケージ:

CREATE OR REPLACE PACKAGE PKG_BASECODE AS 

TYPE T_CURSOR IS REF CURSOR; 

--// customer 
PROCEDURE CustomerCode (
    I_CUST_CODE   IN VARCHAR2 
    , I_CUST_NAME  IN VARCHAR2 
    , customer_cursor OUT T_CURSOR 
); 

END PKG_BASECODE; 
/

ボディ:

CREATE OR REPLACE PACKAGE BODY PKG_BASECODE AS 

--// customer 
PROCEDURE CustomerCode (
    I_CUST_CODE   IN VARCHAR2 
    , I_CUST_NAME  IN VARCHAR2 
    , customer_cursor OUT T_CURSOR 
) 
IS 
    BEGIN 
    OPEN customer_cursor FOR 
    SELECT CUST_CODE  AS KEYVALUE 
      , CUST_NAME AS DATAVALUE 
    FROM CUSTOMER_MASTER 
    WHERE CUST_CODE  LIKE I_CUST_CODE || '%' 
    AND  CUST_NAME  LIKE I_CUST_NAME || '%' 
    ORDER BY CUST_NAME ASC 
    ; 
    END CustomerCode; 


END PKG_BASECODE; 
/

それは、C#で素晴らしい作品。 私はすでにテスト済みです。

今、私は以下の私のVisual Basic 6のソースコードがあります。

Dim rst As ADODB.Recordset 
Dim cmd As ADODB.Command 
Dim input1 As ADODB.Parameter 
Dim input2 As ADODB.Parameter 
Dim output1 As ADODB.Parameter 
Set cmd = CreateObject("ADODB.Command") 
With cmd 
    .ActiveConnection = tmpDB_Total 

    .CommandText = "PKG_BASECODE.CustomerCode" 
    .CommandType = adCmdStoredProc 

    .Parameters.Append .CreateParameter("I_CUST_CODE", adVarChar, adParamInput, 10, "") 
    .Parameters.Append .CreateParameter("I_CUST_NAME", adVarChar, adParamInput, 50, "") 
    .Parameters.Append .CreateParameter("CustomerCode", adVarChar, adParamReturnValue) 
    Set rst = .Execute 
End With 

If Not rst.BOF And Not rst.EOF Then 
    Do Until rst.EOF 
     Debug.Print rst.Fields(1).Value & "," & rst.Fields(0).Value 
     rst.MoveNext 
    Loop 
End If 

を、接続元は以下の通りです:

tmpDB_Total.Open "Provider=OraOLEDB.Oracle;" _ 
       & "Password=mes123;" _ 
       & "User ID=mes;" _ 
       & "Persist Security Info=True;" _ 
       & "Data Source=stmdev;" 

そして、私はパラメータに関するエラーの何かを受け取ります。 エラーメッセージは韓国語で書かれているため、すぐに書き込むことはできません。 ご理解ください。 誰でもこの問題を助けてくれますか?

答えて

2

追加パラメータがあります。その3番目のパラメータには何も追加しないでください。うまくいくはずです。あなたが設定する必要があることに注意してくださいCmd.Properties("PLSQLRSet") = TRUE

+0

多くのありがとう、ダン〜あなたは私の救世主です。それは完璧に働いた。 –

+0

私はあなたの答えを受け入れる方法を知らなかった。今私は方法を見つけた。とにかく、ありがとう。 –