Tengo la siguiente UDF en excel que usa ADO para conectarme a mi servidor MSSQL. Allí debería ejecutar el escalar udf "D100601RVDATABearingAllow".ADODB open recordset failed/"La operación no está permitida cuando el objeto está cerrado"
Por alguna razón, los parámetros que intento agregar no se envían al servidor sql. Solo en el servidor:
SELECT dbo.D100601RVDATABearingAllow
llega.
MI EXCEL UDF:
Function RVDATA(Fastener) As Long
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Cmd1 As ADODB.Command
Dim stSQL As String
Const stADO As String = "Provider=SQLOLEDB.1;Data ................"
'----------------------------------------------------------
Set cnt = New ADODB.Connection
With cnt
.ConnectionTimeout = 3
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 3
End With
'----------------------------------------------------------
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = cnt
Cmd1.CommandText = "dbo.D100601RVDATABearingAllow"
Cmd1.CommandType = adCmdStoredProc
'----------------------------------------------------------
Set Param1 = Cmd1.CreateParameter("Fastener", adInteger, adParamInput, 5)
Param1.Value = Fastener
Cmd1.Parameters.Append Param1
Set Param1 = Nothing
'----------------------------------------------------------
Set rst = Cmd1.Execute()
RVDATA = rst.Fields(0).Value
'----------------------------------------------------------
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing
'----------------------------------------------------------
End Function
Cuando uso adCmdStoredProc todo esto falla y en el depurador de VBA las propiedades del conjunto de registros tiene una gran cantidad de "operación no está permitida cuando el objeto está cerrado "(puede sonar un poco diferente, el mensaje es traducido)
Cuando no uso adCmdStoredProc me sale el mensaje de que la variable de Sujetador era no proporcionado.
Creo que tal vez algo esté mal en la forma en que abro el conjunto de registros. En otras pistas que leí acerca del uso de la opción "ESTABLECER NOCOUNT ENCENDIDO", pero tampoco funcionó.
¿Alguien tiene una idea? Saludos Lumpi
Quité la instrucción SELECT. ¿Es correcto definir Param2 como adDouble cuando en el servidor el tipo es Float? la misma pregunta para adChar = varchar (20)? – Lumpi
Para todos los interesados: Publiqué la misma pregunta en: http://www.codeproject.com/Questions/265573/ADODB-open-recordset-fails-Operation-is-not-allowe y obtuve algunos consejos interesantes, pero , el problema aún no está resuelto ... – Lumpi