Home » C#, Destacados, Programacion

Reportes con Crystal Report en Windows Form y parámetros StoreProcedure

agosto 22 200951 Comentarios

Por risharpPermalink: http://www.datanoia.com/ajt3

Existen varias formas de crear reportes en Crystal Report, una en particular que me parece tiene una alta mantenibilidad es la de crear código dinamico, es decir parámetros, conexiones,  que puedan ser cambiados directamente en el código de nuestras clases.

Explicaré a usar el asistente para crear reportes rapidamente y luego a modificar el código para que sea todo dinámico.

Bien a programar:

Necesitará la base de datos Northwind de SQL Server 2005 si es que desea probar el tutorial.

Paso 1.- Primero crearemos un procedimiento almacedado con parámetros de entrada en SQL Server para luego mostrarlo en un reporte. Abra el SQL Server 2005 y en la base de datos Northwind ejecute el siguiente código:

USE NORTHWIND;
GO
CREATE PROC ObtenerTotalMesYear
@Fecha nvarchar(10)
AS
SELECT Mes=DateName( month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 ),
Total=ROUND(SUM(([order details].UnitPrice*[order details].Quantity)-([order details].UnitPrice*[order details].Quantity)*[order details].Discount),2)
FROM [order details] INNER JOIN Orders on [order details].OrderID = Orders.OrderID
WHERE DATENAME(yy,Orders.OrderDate) =@Fecha
GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)
ORDER BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

USE NORTHWIND;

GO

CREATE PROC ObtenerTotalMesYear

@Fecha nvarchar(10)

AS

SELECT Mes=DateName( month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 ),

Total=ROUND(SUM(([order details].UnitPrice*[order details].Quantity)-([order details].UnitPrice*[order details].Quantity)*[order details].Discount),2)

FROM [order details] INNER JOIN Orders on [order details].OrderID = Orders.OrderID

WHERE DATENAME(yy,Orders.OrderDate) =@Fecha

GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

ORDER BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

Lo que hace este procedimiento es mostrar las ventas totales de cada uno de los meses, según el año ingresado, pregunten si tienen dudas acerca del código anterior.

Paso 2.- Abrimos el Visual Studio y creamos un nuevo proyecto de Aplicación para Windows, asignamos un nombre al mismo.

Haga clic derecho en el Proyecto>Agregar>Nuevo Elemento y escoja el reporte Crystal.

Asignele un nombre: “ReporteVentas” y haga click en agregar.

3

Paso 3 .- Se abrirá la siguiente pantalla, usaremos el asistente de informes. Presionamos aceptar.

Asistente

Paso 4.- En la siguiente pantalla, despliegue crear nueva conexión y luego OLE DB (ADO), se abrirá un formulario para seleccionar un proveedor de SGBD.Conectando

Paso 5.- Seleccione la opción SQL NATIVE CLIENT  y haga clic en siguiente.

proveedor

Paso 6.- Seleccione su Servidor de Base de datos, marque el check de seguridad Integrada, y seleccione la base de datos Northwind y luego presione finalizar.

Servidor

Paso 7.- Expanda el servidor y ubique la base de datos Northwind, despliegue dbo y en procedimientos almacenados, busque el procedimiento que creamos ObtenerTotalMesYear. Seleccionelo  y marquelo a la derecha con el botón “>”.

Store

Paso 8.- En la siguiente ventana presione aceptar, luego siguiente.

Param

Paso 9. Despliegue el árbol de campos disponibles, seleccione los campos que desee  mostrar y paselos a la derecha.  No vamos a personalizar más el reporte, presionamos Finalizar.

Campos

Paso 10. Se observará la siguiente pantalla, acomode los campos a su gusto:

Reporte

Paso 11. Arrastre desde campos de parámetros el valor que se ingresa desde pantalla, para que se muestre en el reporte el año que ingresamos:

ReportePersonalizado

Veamos una vista previa del informe, ingrese por ejemplo 1996 cuando le pida ingresar un parámetro.

vista

Paso 12. Bien es hora de programar, lo anterior funciona pero no es dinámico, imagine que el servidor de base de datos cambia de lugar, tendriamos que modificar cada uno de nuestros reportes, crearemos una sola conexión:

Agregaremos una clase llamada conexión:


private string servidor = "JPANTOJA\\SQLEXPRESS";

private string basededatos = "Northwind";

private string usuario = "PREMIER\\rmauricio";

private string password = "";

public string Password

{

get { return password; }

set { password = value; }

}

public string Servidor

{

get { return servidor; }

set { servidor = value; }

}

public string Basededatos

{

get { return basededatos; }

set { basededatos = value; }

}

public string Usuario

{

get { return usuario; }

set { usuario = value; }

}

Dirigirse al  formulario y agregar un componente Crystal Report Viewer y los demás componentes. Al comboBox lo llenamos con los años: 1996, 1997, 1998.

formulario

En el formulario escribir el siguiente código, no olviden agregar las referencias para Crystal Report.


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

//Referencias

using CrystalDecisions.CrystalReports.Engine;

using CrystalDecisions.Shared;

using CrystalDecisions.ReportSource;

namespace ReporteVentas

{

public partial class Form1 : Form

{

ReporteVentas report = new ReporteVentas();

ParameterDiscreteValue FechaDV = new ParameterDiscreteValue(); //parametro de entrada

Conexion con = new Conexion();

public void CargaReporte(string FechaParam)

{

FechaDV.Value = FechaParam;

report.SetParameterValue("@Fecha", FechaDV);//Asignando el parametro

//de entrada con el parametro del storeprocedure

crystalReportViewer1.ReportSource = report; //cargando el reporte

}

public Form1()

{

InitializeComponent();

report.DataSourceConnections[0].SetConnection(con.Servidor, con.Basededatos, con.Usuario, con.Password);//Cargando Conexion

}

private void button1_Click(object sender, EventArgs e)

{ //Ejecutando reporte

if (comboBox1.SelectedItem != null)

{

CargaReporte(comboBox1.SelectedItem.ToString());

}

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{ //Liberando recursos

report.Dispose();

crystalReportViewer1.Dispose();

}

}

}

Por si no lo recuerdan, el método  Form1_FormClosed fue agregado de la siguiente forma:

Dando doble clic en Form Closed.

closed

Ahora ejecutamos el programa, seleccionamos un año y presionamos el botón mostrar.

Crystal

Acá tienen un ejemplo para Web http://www.datanoia.com/reporte-web-con-crystal-report-usando-store-procedure.html

¡Espero les haya sido de ayuda! Buen día.

→ Entradas Relacionadas:

  1. Reporte Crystal Report en Windows Form con parametros StoreProcedure Visual Basic.NET
  2. Reporte Web con Crystal Report usando Store Procedure
  3. Crystal Report: Reporte Maestro / Detalle
  4. Tutorial: Instalación y Configuración Apache Tomcat 6.0 en Windows
  5. Quick Form Builder: Construye formularios HTML en 3 pasos


→ Comparte esta entrada:

51 Comentarios »

  • rogertrips said:

    RT @datanoia: Reportes con Crystal Report en Windows Form y parámetros StoreProcedure: http://bit.ly/13wngQ *rS #CrystalReport

  • Christian said:

    Hola,
    Primero que todo gracias por el ejemplo, me ha sido muy útil.
    Pero sabes soy algo inexperto en las consultas SQL y quisiera que me despejes una duda que tengo: ¿Por qué utilizas varias funciones para obtener la fecha?:

    SELECT Mes=DateName( month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 )

    No sería suficiente: Mes = DATENAME(MONTH, OrderDate)
    ¿Esto es correcto o incorrecto?

  • risharp (author) said:

    Hola Christian para eso estamos, bien lo que pasa es que para hacer un agrupamiento en este caso por fechas, es necesario que lo que se va a agrupar tenga relación con su sentencia Group BY, es decir si en el select muestro las fechas de manera alfabetica el ordenamiento también debe cumplir esto.
    Según tu apunte la consulta sería así:

    create proc MesesPrueba
    @Fecha nvarchar(10)AS
    SELECT Mes=datename(month, orderdate), //(SEGUN TU APUNTE QUE ES CORRECTO)
    Total=ROUND(SUM(([order details].UnitPrice*[order details].Quantity)-([order details].UnitPrice*[order details].Quantity)*[order details].Discount),2)
    FROM [order details] INNER JOIN Orders on [order details].OrderID = Orders.OrderID
    WHERE DATENAME(yy,Orders.OrderDate) =@Fecha
    GROUP BY datename(month, orderdate) //EL GROUP BY TIENE RELACION CON SU CONSULTA
    ORDER BY datename(month, orderdate)

    Ahora bien, esto agrupa correctamente y por meses, pero lo muestra así:

    Agosto 25485.28
    Diciembre 45239.63
    Julio 27861.89
    Noviembre 45600.04
    Octubre 37515.72
    Septiembre 26381.4

    Obviamente no está ordenado, la pregunta fue: cómo ordenarlo según su orden real (ener, feb, marzo…)

    Si ponía el select: SELECT Mes=datename(month, orderdate) y el orderby:
    GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2) // 01,02,03,04

    Me botaría un error por no tener relación como lo explicaba al principio.
    La columna ‘Orders.OrderDate’ de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.

    Pues la solución entonces era mostrando las fechas en números: 01, 02, 03, 04.
    y agrupando con GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)
    y ordenándolo por números.

    Pero ahora viene el problema que no quiero que se muestren números en la consulta, sino que se muestre alfabéticamente, es por ello que puse
    SELECT DateName(month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 ) que en realidad está en números 01,02,03…, sólo que el datename lo disfraza.
    y ahora si se puede ordenar agrupar con GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2) y lo ordena 01,02,03… etc.

    Espero sigas visitando el blog.
    Saludos.

  • Richard Miauricio said:

    ai q bonito como comentan http://bit.ly/17Cgjy

  • Christian said:

    Mil gracias Risharp por la respuesta, me ha quedado muy claro.
    Saludos Cordiales,
    Christian

  • Mario said:

    Cómo puedo pasar por código usando DataSourceConnections[0].SetConnection a 2 bases de datos que utilizo en un mismo reporte?

  • JoTa said:

    Hola Mario respondiendo tu pregunta, para las 2 bases de datos de deberias poner el “1″ en DataSourceConnections[1].SetConnection
    Saludos.

  • Frank said:

    Hola, muy bueno tu ejemplo, me saco de muchas dudas que tenia, pero aún asi no puedo resolver algo: Al crear el procedimiento almacenado, se le envia un dato (la fecha) bueno en mi caso no me aparece @fecha para poder agregarlo al .rpt, aún asi, dandole anticlick a “campos de parametro”, le agrego el campo de @fecha de forma manual, el problema es que al ejecutar no me muestra nada, quiza haya algún paso para relacionar @fecha con el dato del combobox que este obviando y que por esa razón no me sale el resultado, te agradeceria mucho si me ayudas con esa situación.

    Un saludo

  • risharp (author) said:

    Hola Frank, dime has probado el ejemplo en el mismo SQL y te bota algún resultado cuando lo ejecutas? También ten en cuenta que el “@Fecha” de tu storeprocedure debe ser igual en tu código report.SetParameterValue(“@Fecha”, FechaDV)

  • Frank said:

    Hola, gracias por responder tan rapido, bueno en realidad, el ejemplo que me diste lo probe mas con un sistema que estoy desarrollando y que tambien trabaja con un procedimiento almacenado al cual se le envia una fecha (igual que tu ejemplo) ahora con respecto al @Fecha, pues si, es el mismo que en el storeprocedure (que el que yo estoy desarrollando) sólo que en el ejemplo que nos muestras en el paso 8 ya aparece el @Fecha en “campos de parametros”, en mi caso no me aparece, es asi que una vez que se genero el reporte como muestras en el paso 10, yo lo agregue de forma manual dandole anticlick en “campos de parametro” y luego en “nuevo” y posteriomente llene los campos que me pedia, ahora mi duda era que quiza al hacer esto no haya una relacion entre el @Fecha que me cree en el crystalreport y el @Fecha de mi base de datos (no se si me dejo entender), por eso te preguntaba si habria alguna forma de relacionarlos y como se haria.

    Y con respecto al storeprocedure, pues si lo probe en el SQL y me da los resultados que espero. Entonces entiendo que el procedimiento esta bien. Otra cosa que quiza pueda ser que me este fallando sea el formato de fecha (en el SQL lo tengo como dmy y no se cual sera el formato de fecha del crystalreport y no se si tiene alguna relación o no con SQL).

    Te agradezco mucho por tu ayuda y tu tiempo.

    Saludos!!

  • JUAE REYES said:

    Saludos a todos.

    Tengo un proyecto muy semejante al mostrado anteriormente con la salvedad de que no le envio los parametros sino que son entroducidos cuando en CRVIEWR corre el reporte.

    Tengo el siguiente problema, cuando instalo la aplicacion en un cliente los reportes que piden parametros generan el siguiente error:
    Runt-time ’50003′:
    Application-defined or object-defined error
    Esto no sucede si instalo CRYSTAL REPORT XI en cada pc que tenga que correr la aplicacion. QUE DLL OCX es que me falta o no esta registrado.

  • Mauricio said:

    Gracias maestros! de verdad esto me sirvio muchisimo, les mando un gran abrazo y vivan los hermanos peruanos.

  • risharp (author) said:

    Para eso está el equipo datanoia, saludos.

  • pinpinete said:

    ¿qué formato de fecha debe tener Crystal para que al obtener los datos de informix con un camp parámetro (de fecha) no obtengamoas el error 1206:
    $ finderr 1206
    -1206 Invalid day in date.

    The day number in a DATE value or literal must a one- or two-digit number
    from 1 to 28 (or 29 in a leap year), 30, or 31, depending on the month that
    accompanies it.

  • cristian said:

    hola una consulta el ejemplo me sale todo bien chevere pero cuando le doy click en actualizar en el crystalreportviewer me sale un form apra que llene el parametro por que no deberia salir cmo hago para desaparecer eso T_T helme!!!

  • risharp (author) said:

    Hola Christian gracias por visitar el blog, el equipo datanoia revisará ese problema. Te responderemos a la brevedad :) . Saludos.

  • cristian said:

    hola richard denuevo yo pucha estoy en un lio quiero pintar el cryustal report pero con select * from tabla where campo1=variable
    hay alguan opcion podrias darme un ejemplo realmente lo necesito ahora mismo :S helme please

  • pinpinete said:

    Mi proble es que al definirun campo de parámetro como fecha, aunque configures Crystal con formato DMY y dd/mm/yyyy,aunque en Informixcli tengas DMY4/, al pasar el parámetro fecha al select para su ejecución, este da error por que la configuración de los parámetros tipo fecha es yyyy/dd/mm,y no sé como canviarlo para que funcione bien, es la primera vez que manejo Crystal.

  • risharp (author) said:

    Hola gracias por visitar el blog, prueba con esto:
    set dateformat ymd;
    o con dmy según sea el caso.

    Saludos.

  • RICKY said:

    podrias pasarlo a vb.net me pierdo cuando veo este codigo en C# porfavor he tratado de hacerlo y convertilo a mi estilo pero no me sale

    yo lo quiero hacer en vez de un combo con una caja he cambiado los valores e puesto toda mi conexion pero nada no muietsra :( espero puedas ayudarme gracias

  • risharp (author) said:

    Hola, umm ok no hay problema te pasaré el ejemplo a vb en las proximas horas…
    gracias por visitarnos.. saludos.

  • chely said:

    hola, esta muy interesante tu articulo pero un favorsote, podrias pasarlo a visual basic.net es que no entiendo mucho c# andale he tratado de hacerlo asi pero no le entiendo mucho va, de antemano mil gracias…. esperando tu respuesta bye….

  • Luis Falconi said:

    Saludos,

    Hice exactamente lo que menciona el ejemplo pero no funciona me muestra el siguiente mensaje:
    No se pudo recuperar los datos de la base de datos.
    Detalles: [Código de proveedor del la base de datos:2812]

    Estoy utilizando VS2008
    La primera conexion al reporte lo hice como:
    Nombre del servidor: (Local)
    Autentificacion de windows: true
    Nombre base de datos: Desarrollo

    La segundo conexion al reporte lo hice como:
    Nombre del servidor: sistemas1
    Autentificacion de windows: true
    Nombre base de datos: Prueba2

    Cabe recalcar que mi maquina se llama sistemas1 y que la base de datos Prueba2 es una copia de la base de datos desarrollo

    Estoy utilizando el siguiente codigo:

    Dim rpt As New Saldo()

    Dim oCnnInfo As New CrystalDecisions.Shared.ConnectionInfo
    oCnnInfo.DatabaseName = “Prueba2″
    oCnnInfo.UserID = “sa”
    oCnnInfo.Password = “SSss123″
    oCnnInfo.ServerName = “sistemas1″

    For Index As Integer = 0 To rpt.DataSourceConnections.Count – 1
    rpt.DataSourceConnections(Index).SetConnection(oCnnInfo.ServerName, oCnnInfo.DatabaseName, True)
    Next

    Dim identidad As New CrystalDecisions.Shared.ParameterDiscreteValue

    identidad.Value = “5E99A88E-62C6-4F96-9CBE-4576846EE9B0″
    rpt.SetParameterValue(“@Identidad”, identidad)
    rpt.SetParameterValue(“@Codigo”, DBNull.Value)

    CRV.ReportSource = rpt

  • julio said:

    Hola a todos, estuve revisando este post, y queria hacer una consulta pues tengo un problema bastante relacionado.

    Estoy trabajando con VS2005 y SQL Server 2008, y he creado varios reporte de maneras similar a como se indica en este post.

    1. Cree un reporte con procedimientos almacenados (los campos mostrados en el reporte se jalaron de los campos que contiene los procedimiento almacenados en la base de datos)

    2. La conexion es OLE DB, tipo Proveedor de OLE DB para Microsoft SQL Server

    3. Utilizando el servidor de BD en el que cree el reporte, se genera el reporte sin problema.
    Los parametros de conexion originales son:
    Servidor: ballena
    Base de Datos: bd_sc2
    Usuario: sa
    Password: 123456

    Cuando utilizo otra BD (copia exacta de la BD original pero con otro nombre) u otro servidor, a la hora de generar el reporte sale la pantalla de conexion a la base de datos de Crystal Reports con los campos servidor y base de datos (desactivados) y los campos usuario y contraseña habilitados. Lo que me impide generar el reporte.
    Por ejemplo, cambiando el nombre de la BD a bd_sc3 o cualquier otro nombre.

    4. A la hora de generar el reporte, le envío nuevos parámetros de conexión mediante código, pero no da ningún resultado. Pues sigue saliendo la pantalla de conexión, con el nombre del servidor y base de datos con que cree el reporte (es decir, donde originalmente cree los proc. almacenados)

    Es decir, he creado un reporte como se explica en el post y configurado la conexion dinamica mediante codigo, pero no me da resultado.

    Por favor, les pido una ayuda para resolver este problema, que me tiene ya varios dias.

    He buscado bastante en otros foros, pero hasta el momento no he encontrado una solución.

  • pinpinete said:

    Muchas gracias.

  • jagarciardz said:

    tengo un reporte hecho directamente en crystal report 10 y quiero mandarlo llamar desde mi aplicacion windows en vb 2005, que debo de hacer para poder ejecutar el reporte desde mi aplicacion windows ???

  • Melisa said:

    Muchisimas gracias por el ejemplo, realmente me ayudaste con una duda que tenia, adapte el codigo a vb.net y andubo de 10!!

    Estoy contentaaaaaaa jaja!!!

    Felicitaciones y muchas gracias!!!

    Melisa

  • kuki said:

    hola…datanoia

    Justo lo que necesitaba…llevaba semanas buskndo un ejemplo como el q pusist….la verdad esta excelente…me salvast de la orca. jeje

    pero ahora solo tengo un problema…si me puedieras ayudar te lo agradecera mucha mas….quiero hacer esto pero mediante ODBC, he intentado pero no me quiere mostrar lo campos de los procedimientos almacenados, me marca un error como esta leyenda..¨error en el motor de busqueda conector mysql 5.1.6¨…ayudame por fis
    De antemano mil gracias…

  • kliver said:

    man me quede en el paso 7 y 8

    paso 7 en el asisitente
    en procedimientos almacenados
    >northwind
    >>dbo>>>solo me sale “ObtenerTotalMesYear;1″
    –bueno eso puede ser por que creaste mas stored y no los pusiste en el codigo–

    seguimos lo selecciono le doy clic en “>” y me sale
    paso 8
    la ventana de introducir valores de parametro
    @Fecha
    –hasta ahi bacan pero le doy aceptar y mensale este mensaje de error –
    ——————————————————
    ¦Cristal Reports ActiveX Desing… ¦ ¦ x ¦
    ¦——————————————————¦
    ¦ Query Engine Error: ‘ADO Error Code: 0x ¦
    ¦ Source: Microsoft SQL Native client ¦
    ¦ Description: Invalid object name ‘order details’.¦
    ¦ SQL State: 42S02 ¦
    ¦ Native Error:’ ¦
    ¦______________________________________________________¦

  • HSM said:

    hola esta muy buena la info

    solo q tengo un problema cuando doy clic en el boto para q carge los datos me manda todos los registros de la tabla

    el codigo q tengo es el sig

    yo estoy ocupando un data set

    clsFunciones obj = new clsFunciones();
    crpBitacora report = new crpBitacora();
    ParameterDiscreteValue placas = new ParameterDiscreteValue();
    DataTable dtpReporte;
    clsBitacora gr = new clsBitacora(); 0)<———- a qui ago una consulta ala base de datos si hay registros muestra el reporte
    {
    report.SetDataSource(dtpReporte);
    crvBitacora.ReportSource = report;
    }
    else
    {
    MessageBox.Show("No existe Registro para general el reporte", "Atencion-Reporte", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }

    bueno espero q me puedan ayudar gracias

  • Michael said:

    hola brother gracias por el tutorial ps esta chever
    y aunq estoy haciendolo en visual basic me ha servido bastante para sacarme de un apuro.

  • risharp (author) said:

    Excelente, que gusto que te haya servidor la info, saludos.

  • Pedro Alvarez said:

    Hola risharp, sinceramente muy pero muy buena la informacion puesta, pero hay un error, o no se si sea mio xD, en todo caso como me puedes ayudar. Pasa lo siguiente

    He hecho mi proc normal, seteo mi conexion xere, todo bacan, cabe mencionar que mi proc recibe 2 parametros de tipo datetime para emitir reportes entre intervalos de fechas pasados por el usuario estos son @fecha_inicio y @fecha_fin. Lo pruebo localmente en mi BD y excelente funciona a la perfeccion, pero que pasa, x ejm pongo mi BD la misma en otro servidor, pongo mis parametros de conexion en el app.config y sale este error.

    Failed to open a rowset.
    Details: ADO Error Code 0x
    Source: Microsoft SQL Native Client
    Description: Procedure or function ‘proc… mi procedimiento’
    expects parameter ‘@fecha_inicio’ which was not supplied
    SQL State: 42000
    Native Error
    Failed ti open a rowset
    Error in file
    C:\Users\miUsuario\AppData\Local\temp_caa4c6e0-5f73-4962-9e06-0e2f786ff416{F1B6D83C-C0FB-4E54-84E6-F9ED077484E5}.rpt:
    Failed ti open a rowset.

    Sin embargo aqui esta lo que programo

    ReporteCompraxFechas crystal_compra = new ReporteCompraxFechas();
    SqlConnection conexion = Conexion.obtenerConexion;
    ParameterDiscreteValue param1 = new ParameterDiscreteValue();
    ParameterDiscreteValue param2 = new ParameterDiscreteValue();

    public void CargarReporte(DateTime fec_inicio, DateTime fec_fin)
    {
    param1.Value = fec_inicio;
    param2.Value = fec_fin;
    crystal_compra.SetParameterValue(“@fecha_inicio”, param1);
    crystal_compra.SetParameterValue(“@fecha_fin”, param2);
    crystalReportViewer1.ReportSource = crystal_compra;
    }

    Ese es el error man, no se como solucionarlo, tengo otros 2 reportes que no reciben parametros y esos normal cargan en cualquier lado usando los mismos metodos, pero este de aqui si me esta traendo problemas.

    Espero me puedan ayudar y como dije al inicio Graxias por todo de verdad muy agradecido po la info.

    Cuidense

  • Pedro Alvarez said:

    Holaaa a todos, weno taba tratando de solucionar el problema, y bueno que hago le asigno el reporte que tengo que se llama ReporteCompraxFechas.rpt, se lo asigno a crystal report viewer del form y bueno lo ejecuto me sale 2 ventanas para pasar el parametro de @fecha_inicio y @fecha_fin, se los paso y bueno pasa 5 segundos y me aparece una ventana en donde me muestra 4 cosas de las cuales 2 debo editar:
    Nombre del servidor: .\SQLEXPRESS
    Base de datos: RESTAURANTDB
    Id incio de sesion:
    Contrseña:

    Bueno los 2 primeros no los puedo editar estan asi, pero que pasaaa, esa instancia de la BD es la que tengo en la pc donde hice el reporte, porque me esta jalando eso, derrepente ese es el error que esta pasando, le asigno todo pero aun asi el nombre del servidor no es el mio, esa instancia de sql io no lo tengo ya que tengo la version standard.

    Bueno estoy a la espera de sus comentarios, me gustaria que intenten ya que derrepnte entre todos podamos ayudarnos a mejorar el gran aporte de nuestro compañero risharp.

    Byes a todos
    Saludos

  • Pedro Alvarez said:

    Bueno gente la “solucion” que se me ha ocurrido es que al momento que escojamos el store procedure en el servidor pongamos .
    Cosa que donde estemos reocnocera al servcidor local pero la vaina estaria en configurar le nombre de la instancia del sql.

    Lo he probado si funca normal pero debe haber otra manera de tal manera que realmente coje de cualkier lado, si les pasa esto hagan click derecho sobre la vista de diseño del crystal van a Base de Datos y seleccionan Comprobar Base de Datos, ahi veran el nombre del servidor, ahi debrian cambiar al servidor donde estan poniendo su repote.

    Bueno supongo que esto se guasrda en algun lado la voz seria saber dond y como pasarle los paarametros de nuestra cadena de conexion.

    Nos vemos gente, saludos

  • Ruben said:

    Hola como estan yo tengo un problema, no me aparece la galeria de Crystal Report en el paso 3. No sae que puedo hacer en ese caso?

  • FSamh said:

    hola amigo!
    ha sido de mucha utilidad, he hecho algunos reportes solo con el procedimiento almacenado y me has ayudado!!!!
    y he leido que hay algunas peticiones para vb.net y me uno a ello!
    he tratado de entender y hasta he acudido a un convertidor de
    c# a vb.net, pero entro en conflicto con los codigos! de la conexion del paso 12!
    el procedimiento almacenado ya lo tengo, ya probe con el reporte
    ya creado, ingresando la fecha en la vista previa para los reportes me sale el resultado, pero a la hora de programar se me complica!

    talvez me estoy ahogando en un vaso de agua, pero aveces es asi’
    gracias amigo y espero tu comprension!!!!

  • risharp (author) said:

    Vaya si que hay varias peticiones para VB.net tienes razón, a ver trabajaré en ello. saludos.

  • FSamh said:

    Muchas gracias amigo risharp!
    Estare esperando con ansias!!!!
    Saludos!!!

  • FSamh said:

    Amigo disculpa lo molestia!!
    Estoy probando y todo lo configure a lo que necesito!
    pero por mas que busco no encuentro!
    como se declara

    private string servidor = “JPANTOJA\\SQLEXPRESS”;
    private string basededatos = “Northwind”;
    en la parte de conexion.cs,

    como seria en vb.net??
    Partial m_servidor As String = “JPANTOJA\SQLEXPRESS”
    Private m_basededatos As String = “Northwind”

    Error La instrucción no es válida en un espacio de nombres.

    Saludos!!!

  • risharp (author) said:

    Hola de nuevo, bueno acabo de pasar el proyecto por completo a VB.NET lo estoy subiendo en los proximos minutos, te dejo la parte que me decías:
    Private servidor As String = “tuservidor”
    Public Property ServidorP() As String

    Get
    Return servidor
    End Get

    Set(ByVal value As String)
    servidor = value
    End Set
    End Property

  • Reporte Crystal Report en Windows Form con parametros StoreProcedure Visual Basic.NET | Datanoia said:

    [...] Si quieren el tutorial en C#(csharp) entren a este post. [...]

  • FSamh said:

    Hooooooooooooo! que rapido!
    Muchisimas gracias amigo risharp!
    Tu aporte es muy valioso y Recuerda que siempre hay alguien que ayudaste y que te agradece siempre!

  • Jose said:

    Hola a todos como puedo correr reportes de crystal report 8.5 sin tener que instalarlo, desde una aplicacion VB 6, gracias de atemano.

  • juan castillo said:

    Buenas tardes a todos, uso VB6 con reportes en Crystal 9 pero tengo el siguiente problema. Cuando llamo los reportes a traves de VB6, algunos me corren muyb bien pero en otros me aparece el siguiente error:

    Crystal Report Viewer
    Not supported Details: Cannot obtain error message from server.

    por favor si alguien sabe por que pasa esto se los agradeceria.

    PD. uso SQL. y los reportes llevan un Store Procedure.

  • Gustavo Leyva said:

    De verdad Carnal!! muchas gracias!!

    Este pequeño tutorial, efectivo, simple, entendible, sencillo me a servido bastante, no me habian podido decir como realizar reportes de manera parametrizable, pensaba que era mas complicado o inusual, pero realmente al ver esto me siento, confiado a seguir podiendo realizar lo que han pedido…

    Que tengas una excelente programada!, sigue con estos magnificos tutoriales!.

  • risharp (author) said:

    De nada Gustavo, gracias por la visita.

  • chapo said:

    me salvastes la vida vergas!!
    jajajajajaja

    gracias!!

  • Lorenzo Antonio said:

    Camarada, me gustaría me ayudaras en un conflicto…

    Osea que también mando parámetros al crystal report, pero quiero mandarle los datos de un datagridview, que por ejemplo son tres filas, pero no hallo la forma de enviarle las tres filas que quiero, solo he podido con una… he tratado de ponerle un ciclo, pero no me sale, me sale un error!.. no es igual al tuyo, pero es parecido!

    te mando el pedazo de codigo!!

    using CrystalDecisions.Shared;//
    using CrystalDecisions.CrystalReports.Engine;//Son las librerias que uso
    using System.IO;//para hacer esto con parametros

    ConnectionInfo conec = new ConnectionInfo();
    conec.ServerName = “server”;
    conec.DatabaseName = “ejemplo”;
    conec.UserID = “sa”;
    conec.Password = “hola”;
    conec.IntegratedSecurity = false;
    object[] para = new object[]
    {//————-Parametros que envio
    “@mat_Alumno”,dgvDetalles.Rows[0].Cells[0].Value.ToString(),
    “@Pro_Cve”,ctClave.Text,
    “@Pro_CuaPeriodo”,ctCuatrimestre.Text,
    “@porcentaje”,dgvDetalles.Rows[0].Cells[4].Value.ToString(),
    “@Pro_Descripcion”,dgvDetalles.Rows[0].Cells[2].Value.ToString(),
    “@tipo_actividad”,dgvDetalles.Rows[0].Cells[3].Value.ToString()
    };
    ReportDocument doc = new ReportDocument();
    doc.Load(@”..\\..\\rptCon_DetProyectos.rpt”);
    reporte.Crystal.ReportSource = ReportesMarkoF.RptMarkoF.ShowReportWithParametros(doc, para, conec);
    reporte.Show();

    dgvDetalles es el nombre del datagridview, que tiene mas de una fila, y quiero mandar todas las filas…

    Espero y me puedas ayudar, gracias!!

  • Ignacio Fernandez said:

    Buenas tardes!

    Muchas gracias por el ejemplo, estoy empezando a trabajar con .net y aunque sigo todos los pasos que indicaste entre mi lista de elementos no aparece el del Crystal, he buscado en varios lados, pero los ejemplos ya traen el elemento incluido.

    Agradezco la ayuda que me puedas brindar

Deja tu Opinión

Deja un comentario, o trackback desde tu sitio web. También puedes suscribirte a los comentarios de esta entrada vía RSS.

Tu comentario será bien recibido.

Puedes usar estas etiquetas:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Éste es un blog habilitado con Gravatar. Si deseas colocar una imagen de perfil a tus comentarios lee esta entrada.