Situación:
- Un procedimiento que funciona en el SQL Server Management, con parámetros de entrada y recordset de salida. El SP hacia un insert y retornaba un recordset (hacia más cosas, esto es para resumir :P)
- Código Vb6, cuando ejecutaba el código y quería ver el contenido del recordset, el VB6 me daba un error de “La operación no está permitida si el objeto está cerrado.”
- El SP se había ejecutado porque tenía un registro más.
Di por supuesto que el problema estaba en como hacia la llamada al SP desde Vb6 (el SP funcionaba bien, se había ejecutado). Después de hacer un poco de I (sin +D porque desarrollo cero) pregunte a expertos en VB6 mayores que yo y nada.
La solución fue:
Añadiren el SP SET NOCOUNT ON al comienzo del código y SET NOCOUNT OFF justo antes de devolver los resultados finales
Si el procedimiento envía varios mensajes al cliente, el resulset no los procesa adecuadamente y suele dar ese mensaje de error.
Si el procedimiento envía varios mensajes al cliente, el resulset no los procesa adecuadamente y suele dar ese mensaje de error.
La solución gracias a:
http://microsoft.public.es.sqlserver.narkive.com/fNVcXJuO/modo-correcto-de-ejecutar-sp
Por si alguno le interesa:
Llamar con command
A mí me valía con
Dim cSql as String
Dim cSql = " execute miProceimiento ‘parametro1’, ‘parametro2’ "
Set rst = New ADODB.Recordset
rst.Open cSql, gConexion, adOpenForwardOnly, adLockReadOnly
If Not rst.EOF Then
End if
Dim cSql = " execute miProceimiento ‘parametro1’, ‘parametro2’ "
Set rst = New ADODB.Recordset
rst.Open cSql, gConexion, adOpenForwardOnly, adLockReadOnly
If Not rst.EOF Then
End if
Estimado,
ResponderEliminarMuchas gracias por compartir este post, ya tenia un par de horas dándole vuelta al tema.
Saludos,
ON
Muchas gracias hermano me has sacado de este error
ResponderEliminarMuchas Gracias
ResponderEliminarMil Gracias, pase dos días sin saber q le pasa al sp y con esto ya esta resuelto.
ResponderEliminar¡Éxitos!
Eres el mejor!. =D
ResponderEliminar5 Horas después y era eso, me salvaste el día. Te envió un abrazo de gol
ResponderEliminary saben por que el SET NOCOUNT ON y SET NOCOUNT OFF afecta?
ResponderEliminarexcelente, gracias estimados. Saludos desde Ecuador
ResponderEliminarMuy buena la solución.
ResponderEliminarEn mi caso particular, tuve que poner el SET NOCOUNT ON solamente (con ambos no funcionaba) y ahí anduvo todo bien (uso ADO 2.8 + SQL 2017)