none
Pasar base de datos como parámetro RRS feed

  • Pregunta

  • Hola a todos.

    ¿Es posible ejecutar los informes de reporting services, pasando como parámetro, la base de datos?

    Por ejemplo, tengo tres bases de datos, llamadas: empresa2010, empresa2011, empresa2012; todas las bases de datos contienen las mismas tablas, los mismos SP, la diferencia es la información almacenada que corresponde a cada año.

    Lo que necesito es ejecutar un informe, pero seleccionando la base de datos sobre la cual consultar.

    Espero me puedan ayudar, gracias.
    jueves, 11 de abril de 2013 15:46

Respuestas

  • Hola Javier lo que puedes hacer es pasar la cadena de conexión como un parámetro es decir crear un parámetro por ejemplo "cadenaConexion" en tu Reporte y cuando ejecutes el Reporte desde tu Webform le envíes la cadena de conexión como parámetro. De esa forma se vuelve dinámico tu reporte porque no estará atado a una cadena de conexión.

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    • Marcado como respuesta JavierDt sábado, 13 de abril de 2013 0:04
    jueves, 11 de abril de 2013 17:02
  • Completando lo que te propone José Barba, te paso un enlace a la documentación de la cadena de conexión. Baja hasta el final del artículo y verás un ejemplo de cómo concatenar Parameters!NombreBD.Value en la cadena de conexión.

    http://msdn.microsoft.com/en-us/library/ms156450.aspx

    • Marcado como respuesta JavierDt sábado, 13 de abril de 2013 0:04
    jueves, 11 de abril de 2013 20:13
    Moderador

Todas las respuestas

  • Lo que haria es antes de ejecutar el reporte, desde el mismo sp, cambiar los datasource con codigo SQL, te anexo un query (debes ejecutarlo en ReportServer)

    Lo ejecutarias asi: EXEC spOrigenDatosReportes 'NombreOrigenDatos','NombreCarpetaReportes', 1

    Saludos

    if exists (select * from sysobjects where name = 'spOrigenDatosReportes' and type = 'P')
    drop proc spOrigenDatosReportes
    GO
    create proc spOrigenDatosReportes
    @OrigenDatos	varchar(20), -- Se tiene que crear un origen de datos directamente desde el administrador de informes y aqui se pone el nombre
    @Carpeta		varchar(50),  -- Es el nombre de la carpeta que almacena los reportes que se les va a cambiar el origen de datos
    @Exacto			bit -- Se refiere a si es exacto el nombre de la carpeta
    AS
    BEGIN
      DECLARE 
        @Conexion		uniqueidentifier,
        @NombreCarpeta	varchar(50)
    
      IF @Exacto = 0
      BEGIN
        SELECT @NombreCarpeta = '%' + @Carpeta + '%'
        SELECT @Conexion = c.ItemID FROM Catalog c WHERE Name = @OrigenDatos
    
        UPDATE DataSource SET LINK = @Conexion 
          FROM DataSource 
          JOIN Catalog ON DataSource.ItemID = Catalog.ItemID 
         WHERE Catalog.Path LIKE @NombreCarpeta
      END
      IF @Exacto = 1
      BEGIN
        SELECT @NombreCarpeta = '/' + @Carpeta + '/'
        SELECT @NombreCarpeta = @NombreCarpeta + '%'
        SELECT @Conexion = c.ItemID FROM Catalog c WHERE Name = @OrigenDatos
    
        UPDATE DataSource SET LINK = @Conexion 
          FROM DataSource 
          JOIN Catalog ON DataSource.ItemID = Catalog.ItemID 
         WHERE Catalog.Path LIKE @NombreCarpeta
      END
    END
    GO


    Gracias Ing. Salomon Bagdadi


    • Editado SaloBG jueves, 11 de abril de 2013 16:27 Falta informacion
    jueves, 11 de abril de 2013 16:26
  • Hola Javier lo que puedes hacer es pasar la cadena de conexión como un parámetro es decir crear un parámetro por ejemplo "cadenaConexion" en tu Reporte y cuando ejecutes el Reporte desde tu Webform le envíes la cadena de conexión como parámetro. De esa forma se vuelve dinámico tu reporte porque no estará atado a una cadena de conexión.

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    • Marcado como respuesta JavierDt sábado, 13 de abril de 2013 0:04
    jueves, 11 de abril de 2013 17:02
  • Completando lo que te propone José Barba, te paso un enlace a la documentación de la cadena de conexión. Baja hasta el final del artículo y verás un ejemplo de cómo concatenar Parameters!NombreBD.Value en la cadena de conexión.

    http://msdn.microsoft.com/en-us/library/ms156450.aspx

    • Marcado como respuesta JavierDt sábado, 13 de abril de 2013 0:04
    jueves, 11 de abril de 2013 20:13
    Moderador
  • Esto estaba buscando, gracias a todos.
    sábado, 13 de abril de 2013 0:04