I'm executing a stored procedure using ADO in VBA. I'm trying to populate the recordset with the results from a stored procedure in SQL Server 2008. Example of the VBA below:
Public Function DoSomething() As Variant()
Dim oDB As ADODB.Connection: Set oDB = New ADODB.Connection
Dim oCM As ADODB.Command: Set oCM = New ADODB.Command
Dim oRS As ADODB.Recordset
oDB.Open gcConn
With oCM
.ActiveConnection = oDB
.CommandType = adCmdStoredProc
.CommandText = "spTestSomething"
.NamedParameters = True
.Parameters.Append .CreateParameter("@Param1", adInteger, adParamInput, , 1)
Set oRS = .Execute
End With
If Not oRS.BOF And Not oRS.EOF Then 'Error thrown here'
DoSomething = oRS.GetRows()
Else
Erase DoSomething
End If
oRS.Close
Set oRS = Nothing
oDB.Close
Set oDB = Nothing
End Function
I am receiving the error Operation is not allowed when the object is closed
on the line If Not oRS.BOF...
which indicates to me that the stored procedure is not returning a result.
However if I execute the stored procedure in SSMS, it returns a single row. The SP goes along the lines of:
CREATE PROC spTestSomething
@Param1 int
AS
BEGIN
DECLARE @TempStore table(id int, col1 int);
INSERT INTO table1
(param1)
OUTPUT inserted.id, inserted.col1
INTO @TempStore
VALUES
(@Param1);
EXEC spOtherSP;
SELECT
id,
col1
FROM
@TempStore;
END
GO
The result of executing the procedure in SSMS is:
id col1
__ ____
1 1
Could anyone help with why the recordset is being closed / not filled?
Exceute
method together with params: msdn.microsoft.com/en-us/library/windows/desktop/… instead of BOF and EOF – Tremble1
. Which is confusing... – WhipstitchSET NOCOUNT ON;
and you're working on variable of type table. What's your connection string? Check it. In my case both BOF and EOF return false. – TrembleSET NOCOUNT ON
thanks. Stick it in an answer and I'll accept. Thanks again – Whipstitch