2015-11-09 9 views
0

У меня проблема с вызовом моих функций на сервере Oracle через VBA. Когда я пытаюсь вызвать функцию без параметров. Все нормально. Но, когда я вызываю функции с параметром. Я получаю ошибку ([Microsoft] [драйвер ODBC для Oracle] Недопустимый тип параметра) Есть идеи? Это код VBA и PLSQL (я делаю элементарную функцию для теста)Функция вызова VBA через VBA и ADO

Vba

Private Sub test() 
Dim Oracon As ADODB.Connection 
Dim cmd As New ADODB.Command 
Dim param1 As New ADODB.Parameter 
Dim objErr As ADODB.Error 


Set Oracon = CreateObject("ADODB.Connection") 
mujuser = "xxxx" 
mujPWD = "xxxxx" 

    strConn = "UID=" & mujuser & ";PWD=" & mujPWD & ";driver={Microsoft ODBC for Oracle};" & _ 
       "SERVER=xx.xxx;" 
Oracon.ConnectionString = strConn 
Oracon.Open 
cmd.ActiveConnection = Oracon 
cmd.CommandText = "el_test" 
    cmd.CommandType = adCmdStoredProc 

Set param1 = cmd.CreateParameter("P1", adLongVarChar, adParamInput, 256) 
cmd.Parameters.Append param1 
cmd.Parameters(0).Value = "ahoj1" 

cmd.Execute 

End Sub 

И функция

CREATE OR REPLACE FUNCTION EL_TEST 
(
    P1 IN VARCHAR2 
) RETURN VARCHAR2 AS 
BEGIN 
    RETURN 'Ahoj'; 
END EL_TEST; 

Thanky вас.

ответ

0

Я признаю, что я никогда не пытался выполнять такую ​​функцию с помощью кода, но я удивляюсь, что это работало без параметра, потому что у вас установлена ​​ваша функция. Я думаю, что так, как вы хотели бы, чтобы получить значение будет:

select el_test('ahoj1') from dual; 

Если вы сделали это изменение от функции к процедуре, я думаю, что он будет работать так, как вы ожидаете:

CREATE OR REPLACE procedure EL_TEST 
(P1 IN VARCHAR2, 
    p2 out varchar2) is 
BEGIN 
    p2 := 'Ahoj'; 
END EL_TEST; 

И тогда ваш VBA будет выглядеть следующим образом:

Private Sub test() 
    Dim Oracon As ADODB.Connection 
    Dim cmd As New ADODB.Command 
    Dim param1 As New ADODB.Parameter 
    Dim objErr As ADODB.Error 

    Set Oracon = CreateObject("ADODB.Connection") 
    mujuser = "xxxx" 
    mujPWD = "xxxxxx" 

    strConn = "UID=" & mujuser & ";PWD=" & mujPWD & _ 
     ";driver={Microsoft ODBC for Oracle};SERVER=xxxx-xx" 

    Oracon.ConnectionString = strConn 
    Oracon.Open 

    cmd.ActiveConnection = Oracon 
    cmd.CommandText = "el_test" 
    cmd.CommandType = adCmdStoredProc 
    cmd.NamedParameters = True 

    cmd.Parameters.Append cmd.CreateParameter("P1", adVarChar, adParamInput, 256, "ahoj1") 
    cmd.Parameters.Append cmd.CreateParameter("P2", adVarChar, adParamOutput, 256) 

    cmd.Execute 

    Dim result As String 
    result = cmd.Parameters(1).Value 

End Sub 
Смежные вопросы