Tendencias:
Imagen genérica del Canal Informática y TICS

Ejecutar Procedimientos Almacenados de SQL Server desde Microsoft Access

20/02/2013
Número de visualizaciones

Para ejecutar procedimientos almacenados escritos en SQL Server desde Microsoft Access, solo tenemos que recurrir a ADODB.

A través de esta librería, disponemos de varios objetos que nos ofrecerán a su vez varios modos de ejecutar:

  • Directamente a través del objeto Connection. Este es el método más sencillo y es adecuado para procedimientos que no devuelvan información, aunque si se le puede enviar información en la llamada al procedimiento.
  • A través de un objeto Command. Por este método sí podemos asociar parámetros al procedimiento que nos permiten tanto enviar como recibir informacion (input, output, input/output).

Veamos unos ejemplos:

A través del objeto Connetion:

Dim cs As String

cs = "Provider=SQLOLEDB.1;Password=1234;Persist Security Info=True;User ID=pepe;Initial Catalog=basededatos;Data Source=192.168.3.44"

Dim objConn As New ADODB.Connection

objConn.Open cs

objConn.Execute "exec actualizar_empresa '" + Trim(Me.CIF_NIF.Value) + "','Nombre_Base_Datos'"

A través del objeto command:

Dim cs As String
cs = "Provider=SQLOLEDB.1;Password=1234; Persist Security Info=True; User ID=pepe;Initial Catalog=basededatos;Data Source=192.168.3.44"

Dim objConn As New ADODB.Connection
objConn.Open cs
Dim objRs As New ADODB.Recordset
Dim oc As New ADODB.Command
Set oc.ActiveConnection = objConn
'El procedimiento almacenado en SQL Server es actualizar_empresa
oc.CommandText = "actualizar_empresa"
oc.CommandType = adCmdStoredProc
'Podemos enviar parámentros de entrada. Ej enviamos datos para un filtro.
Dim op As ADODB.Parameter
Set op = oc.CreateParameter("CIF_EMPRESA", adVarChar,adParamInput, 9)
oc.parameters.Append op
op.Value = Trim(cif)
Dim op1 As ADODB.Parameter
Set op1 = oc.CreateParameter("NOMBRE", adVarChar, adParamInput, 50)
oc.parameters.Append op1
op1.Value = "PEPE SANCHEZ"
oc.Execute

Por supuesto este código irá escrito en algún evento del formulario de Access desde el que deseemos lanzar el procedimiento.

Por último reseñar que debemos de tener referenciada en Access la librería ADO que deseamos usar (Herramientas – referencias y selecciónar la versión de Microsoft Activex Data Objects… que deseamos usar, con la 2.1 library funciona).

Estos ejemplos están probados para Access 2007 contra un procedimiento almacenado programado en SQL Server 2005.

0
Categorizado en: Informática y TICS

No hay comentarios

  1. Ariel Furmanski dice:

    Buenas tardes .podrán decirme si puedo enlazar un procedimiento almacenado en SQL que devuelve registros a un recordset de un formulario de Access ?He logrado con una tabla una consulta. Pero no con un SPGracias! !!

    0
    • Juan Iruela dice:

      Ese tema no lo he trabajado, imagino que sí, pero ahora mismo no sabría decirle al 100%. De todos modos la opción de crear una tabla temporal que pueda usar y posteriormente eliminarla no es mala opción.

      Un saludo.

      0
  2. brandon diaz dice:

    buenas tardes muy interasante su post pero tengo un problema al ejecutar el  Private Sub Comando0_Click()Dim cs As String    cs = «Provider=SQLOLEDB.1;Password=Bf0ment0;Persist Security Info=True;User ID=sa;Initial Catalog=BASE_RIESGOS;Data Source=srvsqlserver»    Dim objConn As New ADODB.Connection      objConn.Open cs        objConn.Execute «exec patrimonio » + «8» + «,» + «2014»  ////** el 8  y 2014 son parametros que tiene mi  store procedure que son numero de mes y y añoEnd Subel problema es que me tira un mensaje de «EXPIRO TIEMPO DE ESPERA DE LA CONSULTA »  me podria ayudar con este problema ya que  e buscado y no e podido solucionarloesperare muy agradecido su  respuesta

    0
    • Juan Iruela dice:

      Estimado Brando, casi con toda seguridad su procedimento está fallando y no llega a finalizar y claro pasado un tiempo el sistema devuelve el error que usted comenta.

      Revise su procedimiento.

      0
  3. Guillermo Velasco dice:

    Buenos días quiero hacerle la siguiente pregunta. Pues llevo varios días investigando por internet y no lo encuentro y lo más aproximado lo explica usted.
    Tengo un procedimiento almacenado en un servidor sql, por ejemplo «BuscarDni», que tiene un parametro de entrada que es el DNI a buscar, y este procedimiento almacenado nos puede devolver un registro, o muchos registros o nada y esto meterlo en un recordset
    ¿Esto se puede hacer en Access.?

    Un saludo y muchas gracias.

    0
    • Juan Iruela dice:

      Ciertamente nunca he probado lo que usted dice. En .NET si lo he hecho, pero claro las estructuras de .NET son más actuales (Dataset) que los antiguos recordset.

      Como idea por si no lo consigue, siempre puede hacer un procedimiento que cree una tabla temporal con los datos deseados de modo que esa tabla una vez usada desde su aplicación sea eliminada.

      Un saludo.

      0
  4. Leonardo Valdez dice:

    Antes que nada te felicito por tu excelente trabajo. Evolucionado en esto de las bases de datos he creado un proyecto ADP. Hasta aquí todo bien pero me doy cuenta que no puedo usar casi nada de lo conocido en Access y que hay que familiarizarse con T-SQL.

    No he podido filtrar un cuadro combinado en base a un cuadro de texto en un formulario. Algo tan sencillo en Access. El origen de la fila del ComboBox es un procedimiento almacenado el cual tiene un parámetro que es el que debería filtrarlo.

    CREATE PROCEDURE sp_storedprocedure
    @myinput int
    AS
    SELECT columna1, columna2 FROM Tabla1
    WHERE columna1 = @myInput
    GO

    @myinput es igual a Me.Texto1.Value

    ¿Cómo puedo pasarle el valor del parámetro al Procedimiento? Cuando pulso sobre el cuadro combinado siempre me abre un cuadro de diálogo pidiéndome el parámetro. Te agradezco de antemano.

    0
    • Juan Iruela dice:

      Estimado lector.

      En respuesta a su consulta le comento que en los dos ejemplos que acompaño en el post, puede usted ver como enviar parámetros a un procedimiento almacenado.

      Creo que el problema por lo que me comenta es que los que usted está intentando enviar está vacío con lo que access le pide el valor antes de hacer la llamada (como cuando en una consulta no pode el valor de filtro).

      Yo le aconsejo que ejecute paso a paso el código de Access y se asegure de que está usando bien las propiedades del combo para seleccionar el valor deseado y por tanto se está enviando bien ese valor a la llamado.

      No encuentro otra razón por la que no funcione ese código.

      0
  5. Carlos Andrés dice:

    Buenas tardes amigo,

    De antemano le agradezco por su respuesta que me ha sido muy útil =), pero a la vez me surge una nueva duda y que se estoy muy cerca de lograr sacar mi proyecto y es la siguiente:
    objConn.Execute «exec monitoreo_trx ‘» + Trim(Me.CIF_NIF.Value) + «‘,’monitoreo_trx'»
    Que significa Trim(Me.CIF_NIF.Value) que me arroja error cuando ejecuto el código desde Access, a que nos referimos con el Trim y el código que esta en paréntesis.

    Nuevamente gracias por la atención y quedo atento a sus comentarios.

    0
    • Administrador dice:

      La función Trim, lo que hace es quitar todos los espacios en blanco que tenga el argumento al principio y al final. Ejemplo Trim (» hola amigo «), devuelve la cadena «hola amigo».

      Por qué razón imagino que le dá un error a usted, pues porque CIF_NIF.Value contenga el valor NULL. Un modo de evitar el error es solo aplicar la función Trim si el argumento es distinto de NULL. Ej.:

      If IsNull(CIF_NIF.Value) = true then

      En base a esa respuesta actuar.

      Espero que le sirva.

      Un saludo.

      0
Ver más comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre nuestro contenido más actualizado en TERRITORIO INESEM

PRÓXIMOS EVENTOS

Bienestar Tecnológico y Desconexión Digital

Bienestar Tecnológico y Desconexión Digital

Eduard Alcaraz
50 minutos
15/04/2024 17:00
LinkedIn: la Red Mundial que conecta a cualquier Profesional

LinkedIn: la Red Mundial que conecta a cualquier Profesional

Ana Cabello
1 hora
22/04/2024 17:00
Universidades colaboradoras
La universidad Antonio de Nebrija es Universidad colaboradora con INESEM Business School La universidad a Distancia de Madrid es Universidad colaboradora con INESEM Business School