Problemas al llamar a un SP que devuelve un Recordset

26/08/2003 - 12:52 por the4man | Informe spam
Hola a todos!

Tengo un procedimiento almacenado que devuelve un par de parametros y un
recordset. EL procedimiento internamente tiene un cursor, y una tabla
temporal.

Para recoger el recordset desconectado uso el siguiente codigo:

Set oADOcnx = New ADODB.Connection
oADOcnx.ConnectionString = ObtenerCadConexion()
oADOcnx.Open

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = oADOcnx
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "miprocedimiento"

cmd.Parameters.Append cmd.CreateParameter("@nEstado", adInteger,
adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("@cMsg", adVarChar,
adParamOutput, 250)

'creamos un recordset desconectado
Set MiRs = New ADODB.Recordset
With MiRs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockBatchOptimistic
Set .Source = cmd
.Open
Set .ActiveConnection = Nothing
End With

Este codigo esta dentro de un objeto COM+, que uso desde una pagina ASP. El
problema es que me devuelve este error:

Cannot change the ActiveConnection property of a Recordset object which has
a Command object as its source

Pero lo mas curioso de todo es que dependiendo de donde llame al objeto
COM+, obtengo el error o no. Ejemplos:

1. Llamo al objeto COM+ desde un programa cliente hecho en VB6 --> Funciona
perfectamente

2. Llamo al objeto COM+ desde un programa cliente hecho en ASP --> Me da el
error que os comento

3. Llamo al objeto COM+ desde un programa cliente hecho en VB6, pero
modifico el procedimiento almacenado de forma que en su interior haya
solamente un simple select (sin cursor ni tabla temporal) --> Funciona
perfectamente

4. Llamo al objeto COM+ desde un programa cliente hecho en ASP, pero
modifico el procedimiento almacenado de forma que en su interior haya
solamente un simple select (sin cursor ni tabla temporal) --> Funciona
perfectamente

LA verdad es que me tiene un poco extrañado. ¿Alguien ha tenido problemas
similares?

Saludos!
 

Leer las respuestas

#1 Claudio E. Ale
27/08/2003 - 03:53 | Informe spam
Al inicio del SP, ponle:

Set Nocount On

Esto proboca que no realice un conteo de los cursores que estás realizando y
solamente retorna un único recordset (como el Select que mencionas).

Salu2

Claudio Emilio Ale
Analista de Sistemas - MCP
NDSoft Consultoría y Desarrollo
Buenos Aires - Argentina


"the4man" escribió en el mensaje
news:3f4b3c36$
Hola a todos!

Tengo un procedimiento almacenado que devuelve un par de parametros y un
recordset. EL procedimiento internamente tiene un cursor, y una tabla
temporal.

Para recoger el recordset desconectado uso el siguiente codigo:

Set oADOcnx = New ADODB.Connection
oADOcnx.ConnectionString = ObtenerCadConexion()
oADOcnx.Open

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = oADOcnx
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "miprocedimiento"

cmd.Parameters.Append cmd.CreateParameter("@nEstado", adInteger,
adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("@cMsg", adVarChar,
adParamOutput, 250)

'creamos un recordset desconectado
Set MiRs = New ADODB.Recordset
With MiRs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockBatchOptimistic
Set .Source = cmd
.Open
Set .ActiveConnection = Nothing
End With

Este codigo esta dentro de un objeto COM+, que uso desde una pagina ASP.


El
problema es que me devuelve este error:

Cannot change the ActiveConnection property of a Recordset object which


has
a Command object as its source

Pero lo mas curioso de todo es que dependiendo de donde llame al objeto
COM+, obtengo el error o no. Ejemplos:

1. Llamo al objeto COM+ desde un programa cliente hecho en VB6 -->


Funciona
perfectamente

2. Llamo al objeto COM+ desde un programa cliente hecho en ASP --> Me da


el
error que os comento

3. Llamo al objeto COM+ desde un programa cliente hecho en VB6, pero
modifico el procedimiento almacenado de forma que en su interior haya
solamente un simple select (sin cursor ni tabla temporal) --> Funciona
perfectamente

4. Llamo al objeto COM+ desde un programa cliente hecho en ASP, pero
modifico el procedimiento almacenado de forma que en su interior haya
solamente un simple select (sin cursor ni tabla temporal) --> Funciona
perfectamente

LA verdad es que me tiene un poco extrañado. ¿Alguien ha tenido problemas
similares?

Saludos!


Preguntas similares