Procedimientos almacenados desde VB !

1. ¿Cómo puedo llamar a un procedimiento almacenado de SQL (sp_server_info, por ejemplo) y que me devuelva el resultado en un recordset que pueda yo manipular?.
2. ¿Cómo puedo llamar un procedimiento almacenado que use parámetros desde
visual basic 6.? Por ejemplo un procedimiento almacenado hecho por el usuario que inserte registros en una tabla, edite y borre.

4 Respuestas

Respuesta
3
Edmundo,
Lo primero que debe hacer es colocar en las referencias de tu proyecto, los objetos del MDAC (Microsoft Data Access Components). Con esto, podemos ir directamente al código :
Voy a basar la explicación en un ejemplo mío, cubriendo tus dos preguntas a la vez.
Para ejecutarlo necesitamos un objeto command y un recordset
Dim objComm As ADODB.Command, objRs As ADODB.Recordset
Dim LIGDAT as String
LIGDAT = string de conexion al sqlserver
Para ejecutar un store procedure necesitas un objeto command. Además puedes incluir un objeto de tipo connection, pero este te lo puedes evitar colocando el string de conexión (LIGDAT) en la conexión activa (velo más abajo).
Set objComm = New ADODB.Command
objComm.ActiveConnection = LIGDAT (* aqui nos saltamos el objeto de conexion)
Un punto importante en la conexión es la ubicación de los recordsets en memoria. Si no sabes bien que es, puedes borrar esta linea
objComm. ActiveConnection. CursorLocation = adUseClient
Debemos decirle a nuestro objeto command que vamos a ejecutar un store procedure, por ende, es de tipo adCmdStoredProc (constante de valor 4)
objComm.CommandType = adCmdStoredProc
Debemos decirle ahora como se llama el stored procedure
objComm.CommandText = "nl2_datosEstadio" (sp_server_info)
Si este utiliza parámetros, los llenamos cada uno, recorriendo desde el 1 hasta el N, asignándole el valor que corresponda.
objComm.Parameters(1).Value = "alguna variable"
objComm.Parameters(2).Value = "otra variable"
Cuando ya llenanos los parámetros, lo ejecutamos.
Si retorna un recordset, ejecutamos
Set objRs = objComm.Execute
si no,
call objComm.Execute o simplemente objComm.Execute
si tenemos que procesar el recordset, hacemos lo necesario
while not objRs.EOF
... bla bla
wend
Lo cerramos para liberar recursos
objRs.Close
Desinstanciamos todos los objetos pedidos.
Set objRs = Nothing
Set objComm = Nothing
Si tu procedimiento no retorna un recordset, sino que algún procesamiento en un parámetro de salida, después de ejecutar el stored procedure (objComm. Execute), puedes llamar al valor con la instrucción objComm. Parameters(X). Value, donde X es la posisión del (o los) parámetro(s) que son de tipo output.
Si tienes alguna duda y te puedo ser útil, pregúntame nomas...
Patrick
Respuesta
2
dim rs as recordset
set rs = connection.execute "exec sp_server_info param1, param2, param3"
Esta es la forma más sencilla, aunque desde ado puedes preparar la ejecución definiendo objetos Parameter..., pero vamos que es algo que no le veo la gracia pudiendo hacelo así.
Voy a hacer la prueba con los procedimientos que ya tengo definidos y luego te aviso. Lo haré mañana porque los tengo en la máquina de mi oficina. Saludos y muchas gracias.
Respuesta
Perdona por el retraso. Cuando dices llamar a un procedimiento desde visual basic supongo que te referías a una consulta grabada en la base de datos, en ese caso se llama exactamente igual que si fuera una tabla:
Ej:
'tengo una consulta (sql) guardada en la base llamada "Consulta sql"
dim rs as dao.recordset
set rs=baseDeDatos.openrecordset("Consulta sql")
- Para llamar a una función contenida en una variable ay que llamar a la función callByName
Pt.
En el caso de que tengas alguna duda no dudes en volver a consultarme.
No me refiero a una consulta grabada. Creo que me expliqué mal o no comprendiste bien mi pregunta. De todos modos gracias por tus comentarios.
Edmundo
Respuesta

Me estaba dando de topes por no poder ejecutar el sp en mi sistema, la mejor respuesta que pude encontrar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas