Я пытаюсь выполнить хранимую процедуру MSSQL из Excel VBA с использованием библиотеки ADODB 2.0 (также существует проблема с аналогичной проблемой 2.8) , которая отправляет результирующий набор, а также возвращаемое значение. Я могу правильно получить результат заданных значений, но не могут получить возвращаемое значениеЯ не могу получить возвращаемое значение хранимой процедуры, которая возвращает результирующий набор, а также возвращаемое значение
Ниже описана процедура VBA используется для этой цели, и это принимает следующие параметры (всегда получает возвращаемое значение как пустые.): db connection, sp name, parameter values string array, db result set, spretval
- последний два из параметров
Private Sub execSQLSP(dbcon, spname, paramStrInArray, ByRef dbrs, ByRef spretval)
Dim cmd As ADODB.Command
Dim dberrflag As Integer
Dim dberrdesc As String
Dim ndx As Long
Dim paramname As String
On Error Resume Next
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = dbcon
cmd.CommandText = spname
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("retVal", adInteger, _
adParamReturnValue)
For ndx = 0 To UBound(paramStrInArray)
paramname = "param" & ndx
cmd.Parameters.Append cmd.CreateParameter(Name:=paramname, _
Type:=adVarChar, Direction:=adParamInput, _
size:=Len(paramStrInArray(ndx)), _
Value:=paramStrInArray(ndx))
Next
Set dbrs = cmd.Execute
Call getDBerror(dbcon.Errors, dberrflag, dberrdesc)
If dberrflag = 1 Then
MsgBox "DB Error while executing following SQL command and hence stopping." & vbCrLf & _
"SQL Cmd:" & spname & vbCrLf & _
"DB Err.:" & dberrdesc, vbCritical, appnameversion
cleanup
End
End If
spretval = cmd.Parameters("retVal").Value
MsgBox cmd.Parameters("retVal")
End Sub
После выполнения этой процедуры VBA, получение результирующего набора с помощью которых я могу правильно получить заданные значения результата, но НЕ возвращать значение. Я получаю только пустое значение (на самом деле SP возвращает 10)
Хранимая процедура содержит некоторую обработку для вставки данных во временные таблицы и, наконец, возвращает все строки из таблицы temp с помощью команды выбора, а затем возвращает стоимость.
В чем может быть проблема с этим кодом?