Se puede hacer esto?

16/07/2003 - 21:32 por Diego Arnejo | Informe spam
Que tal gente?
Estoy rompiendome la cabeza tratando de hacer una funcion en asp que se
conecte con un Stored Procedure en SQL. Esto no seria tan dificil si mis
SP no recibieran parametros, pero estos si, y lo peor es que no siempre
son la misma cantidad. Hay alguna forma o instruccion que te permita
pasar a la funcion X cantidad de parametros (por array o xml) y que
segun la cantidad que le paso se arme por medio de un for...next o algo
similar?
No se, para peor no vi ningun tutorial que expliquen como hacerlo.
Yo arme una DLL que hace esto, pero cuando la intente pasar a ASP muchas
instrucciones no servian, asi que me di por vencido.
Gente buena de este foro, espero una mano solidaria, que me ayude a
resolver este problema
Muchas gracias

Preguntas similare

Leer las respuestas

#1 Nicolás Ghezzi
16/07/2003 - 22:38 | Informe spam
No se si me cuadro en la definición de "Gente Buena", pero esto es lo que
necesitas creo...

Public Function ExecuteSP(StoreName, ArrParam) 'as Long
Dim objConn
Dim objCommand
Dim i

set objConn = server.createobject("ADODB.Connection")
set objCommand = server.createobject("ADODB.Command")

objConn.ConnectionString = "Tu cadena de conexion"
objConn.Open

objCommand.CommandText = cstr(StoreName)
objCommand.CommandType = 4
Set objCommand.ActiveConnection = objConn
objCommand.Parameters.Refresh

if not(IsArray(ArrParam)) then
'Error, el parametro no es un array
else
If UBound(ArrParam) >= 0 Then
For i = 0 To UBound(ArrParam)
objCommand.Parameters(i + 1) = ArrParam(i)
Next
End If
end if

objCommand.Execute
ExecuteSP = objCommand.Parameters(0)
Set objConn = Nothing
Set objCommand = Nothing
End Function

'

ArrParam es del tipo array y recibe los parametros cualquiera sea su tipo
ordenados como los recibe el SP.
Entonces podrias llamar a la funcion como esta lina:

lngValorDevuelto = ExecuteSP("sp_GetClientByIDCity", Array(99))

Dentro del array(1, 2, n...) podes poner los parametros que tu SP necesita.

Saludos, Nico.



"Diego Arnejo" wrote in message
news:
Que tal gente?
Estoy rompiendome la cabeza tratando de hacer una funcion en asp que se
conecte con un Stored Procedure en SQL. Esto no seria tan dificil si mis
SP no recibieran parametros, pero estos si, y lo peor es que no siempre
son la misma cantidad. Hay alguna forma o instruccion que te permita
pasar a la funcion X cantidad de parametros (por array o xml) y que
segun la cantidad que le paso se arme por medio de un for...next o algo
similar?
No se, para peor no vi ningun tutorial que expliquen como hacerlo.
Yo arme una DLL que hace esto, pero cuando la intente pasar a ASP muchas
instrucciones no servian, asi que me di por vencido.
Gente buena de este foro, espero una mano solidaria, que me ayude a
resolver este problema
Muchas gracias

Respuesta Responder a este mensaje
#2 Nicolás Ghezzi
17/07/2003 - 14:40 | Informe spam
Ok, esta función lo que devuelve es el valor que te retornaria un insert en
un SP que te retorna el @@IDENTITY.

Si de esta función no te interesa el resultado simplemente la llamas de esta
manera.

Call ExecuteSP("NombreStored", Array(1, 2))

o bien

ExecuteSP "NombreStored", Array(1, 2))


Para hacer una función que te retorne un recordset, es decir un SP con un
select dentro, lo que tenes que hacer es modificar las lineas donde ejecuta
el SP y sacar la linea donde te retorna el valor.

Estas son las lineas originales.

> objCommand.Execute
> ExecuteSP = objCommand.Parameters(0)



y las tenes que modificar por, llamandose tu funcion GetRecordsetBySP por
ejemplo

Set GetRecordsetBySP = objCommand.Execute

Si no te quedo algo claro solo me avisas.
Saludos, Nico.

"Diego Arnejo" wrote in message
news:
Hola Nicolas, otra vez yo
Probe el codigo, pero tengo un solo problema, cuando ejecuto la funcion,
que valor me devuelve lngValorDevuelto ?
En este momento la variable lngValorDevuelto me devuelve un valor "0"
Esta funcion me puede devolver un recordset?
Desde ya muchas gracias.


Nicolás Ghezzi wrote:

> No se si me cuadro en la definición de "Gente Buena", pero esto es lo


que
> necesitas creo...
>
> Public Function ExecuteSP(StoreName, ArrParam) 'as Long
> Dim objConn
> Dim objCommand
> Dim i
>
> set objConn = server.createobject("ADODB.Connection")
> set objCommand = server.createobject("ADODB.Command")
>
> objConn.ConnectionString = "Tu cadena de conexion"
> objConn.Open
>
> objCommand.CommandText = cstr(StoreName)
> objCommand.CommandType = 4
> Set objCommand.ActiveConnection = objConn
> objCommand.Parameters.Refresh
>
> if not(IsArray(ArrParam)) then
> 'Error, el parametro no es un array
> else
> If UBound(ArrParam) >= 0 Then
> For i = 0 To UBound(ArrParam)
> objCommand.Parameters(i + 1) = ArrParam(i)
> Next
> End If
> end if
>
> objCommand.Execute
> ExecuteSP = objCommand.Parameters(0)
> Set objConn = Nothing
> Set objCommand = Nothing
> End Function
>
>


'
>
> ArrParam es del tipo array y recibe los parametros cualquiera sea su


tipo
> ordenados como los recibe el SP.
> Entonces podrias llamar a la funcion como esta lina:
>
> lngValorDevuelto = ExecuteSP("sp_GetClientByIDCity", Array(99))
>
> Dentro del array(1, 2, n...) podes poner los parametros que tu SP


necesita.
>

Respuesta Responder a este mensaje
#3 Nicolás Ghezzi
18/07/2003 - 14:48 | Informe spam
Por supuesto, podes pasarle valores o variables que los contengan, de hecho,
yo paso siempre en variables los datos a no ser en casos muy particulares.

Por ejemplo.

Dim strUsuario, strPassword
Dim bValido
Dim intID

strUsuario = "Nico"
strPassword = "123"
bValido = True
intID = 3

set rs = GetRecordsetBySP("NombreDelSP", array(strUsuario, strPassword,
bValido, intID))

Como podes ver, hasta son todas variables de dintintos "tipos", en realidad
son variant, e igual pasan bien al stored procedure.

Saludos, Nico.



"Diego Arnejo" wrote in message
news:
Nicolas, desde ya mil gracias por tu ayuda, realmente este tema me
tenia bastante preocupado, ya que yo utilizaba una funcion similar en VB
y cuando la intente pasar a ASP realmente no la pude hace funcionar.
La unica duda que me quedo es esta. (Y te vuelvo a pedir disculpas por
seguir molestandote)
Cuando llamo a la funcion en el ARRAY yo pongo los valores a pasar al
Stored Procedure
set rs = ExecuteSP("spNewsView", Array(1,1))
Yo podria poner variables en el ARRAY?
Porque en el pagina los valores a pasar dependen de las selecciones que
hago.
Bueno, te agradezco por tanta ayuda
Saludos

Nicolás Ghezzi wrote:

> Ok, esta función lo que devuelve es el valor que te retornaria un insert


en
> un SP que te retorna el @@IDENTITY.
>
> Si de esta función no te interesa el resultado simplemente la llamas de


esta
> manera.
>
> Call ExecuteSP("NombreStored", Array(1, 2))
>
> o bien
>
> ExecuteSP "NombreStored", Array(1, 2))
>
>
> Para hacer una función que te retorne un recordset, es decir un SP con


un
> select dentro, lo que tenes que hacer es modificar las lineas donde


ejecuta
> el SP y sacar la linea donde te retorna el valor.
>
> Estas son las lineas originales.
>
>
>>> objCommand.Execute
>>> ExecuteSP = objCommand.Parameters(0)
>
>
> y las tenes que modificar por, llamandose tu funcion GetRecordsetBySP


por
> ejemplo
>
> Set GetRecordsetBySP = objCommand.Execute
>
> Si no te quedo algo claro solo me avisas.

Respuesta Responder a este mensaje
#4 Nicolás Ghezzi
18/07/2003 - 16:33 | Informe spam
Por nada.

Saludos, Nico.

"Diego Arnejo" wrote in message
news:
Muchas Gracias Nicolás, tu ayuda me vino como anillo al dedo.
Te estoy totalmente agradecido.
Y para cualquier cosa estoy a tus ordenes
Saludos


Nicolás Ghezzi wrote:
> Por supuesto, podes pasarle valores o variables que los contengan, de


hecho,
> yo paso siempre en variables los datos a no ser en casos muy


particulares.
>
> Por ejemplo.
>
> Dim strUsuario, strPassword
> Dim bValido
> Dim intID
>
> strUsuario = "Nico"
> strPassword = "123"
> bValido = True
> intID = 3
>
> set rs = GetRecordsetBySP("NombreDelSP", array(strUsuario, strPassword,
> bValido, intID))
>
> Como podes ver, hasta son todas variables de dintintos "tipos", en


realidad
> son variant, e igual pasan bien al stored procedure.
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida