Hacer Crystal Report con DataSet en Visual Basic.NET


Hola amigos, hoy les traigo aquí una forma bien sencilla de hacer reportes con crystal report en Visual Basic, la forma que utilizaré no es la más óptima pero en las diferentes formas que he hecho reportes con Crystal Reports si es la que más facilidad me ha dado.

Como ya les dije la forma que utilizo no es la más óptima debido a que utilizo métodos algo pesados para traer los datos, espero en el futuro hacer un post más en la que lo haga con procedimientos almacenados o alguna otra forma más eficaz que la que pondré a continuación.

Lo siguiente sirve en muchos casos para proyectos pequeños de la universidad, a pesar de que utlizaré Visual Studio 2008 esto sirve muy bien para Visual Studio 2005 también, asi que comencemos:

1.- Procederé a crear un proyecto en Visual Basic 2008, con el Framework 2.0, y le pondré de nombre EjemploReporteCrystal, obviamente si ya tienen el proyecto creado no deben de hacerlo.

Crystal1

2.- Después lo que hacemos es insertar un DataSet de nuestra base de datos, si no sabes como hacerlo da clic aquí.

Crystal2

3.- Luego de eso agregamos un nuevo elemento, para esto damos clic derecho en nuestro proyecto –> Agregar –> Nuevo Elemento. Crystal3

4.- Tendremos un formulario como el siguiente en donde escogeremos la opción de la izquierda, seleccionamos Reporting –> Seleccionamos ahora Crystal Report –> Le ponemos un nombre –> y damos clic en Adjuntar.

Crystal4

5.- Ahora lo que veremos será un wizard o ayudante que nos permitirá crear un reporte de manera sencilla, deberán entonces de ver una imagen como la siguiente y darle clic en ok. Dejen las opciones tal como las tengo en mi imagen.

Crystal5

6.- Lo siguiente es escoger de donde sacaremos los datos que mostraremos, para esto en la siguiente pantalla que se les mostrará que deberá ser como la imagen que coloco abajo, ustedes deberán escoger Datos del Proyecto –> ADO.NET DataSets –> EjemploReporteCrystal.BD_EjemploProcedimientosDataSet (Este es mi dataset que puse enante, entonces aquí colocan el de ustedes) –> y escogen las tablas que utilizarán en su reporte, en mi caso escogí 2, ya que utilizaré datos de las 2 tablas –> Presionamos el boton «>» para cada tabla que queramos utilizar en el reporte y una vez hecho esto damos en siguiente.

Crystal6

7.- En la siguiente pantalla veremos como están relacionadas las tablas, no hay practicamente nada que explicar asi que damos clic en siguiente.

Crystal7

8.- Ahora en esta pantalla siguiente si hay que poner asunto, porque es aquí en donde diremos que campos de que tablas y en qué lugar los queremos en nuestro reporte, entonces vemos como tengo mis 2 tablas y escojo los datos que necesito de las 2, sin preocuparme de como estén relacionadas ni nada por el estilo, como ven en esta parte lo que hago es darle sentido a la forma de presentar mis datos.

Crystal8

9.- Luego de esto vendrán ciertas opciones como la que utilizaré a continuación que es de agrupar los datos en un cierto orden, y la forma que escogi de agruparlos es por géneros iguales, esto lo hago especificando en la parte de agrupamiento qué campo es el que quiero agrupar.

Crystal9

10.- Lo que sigue son más opciones como les dije, pero en este momento yo ya le di en finalizar, ya que no necesito hacerle más cosas a mi reporte, por ahora. Luego de dar clic en finalizar tendré una imagen como la que está abajo, la parte que tengo tachada es una parte que no quiero mostrar en ejecución por tanto para ocultarlas les damos clic derecho en la parte gris y al desplegarse un menú de opciones seleccionamos ocultar.

Crystal10

11.- Bien ahora regresamos y abrimos nuestro form, y buscamos nuestro origen de datos, si no lo vemos por ahi, damos clic en el menú de Visual Studio en la opción de Datos –> Seleccionamos ver Origenes de Datos y listo, tendrán que poder ver su dataset con las tablas al lado como en la imagen. Pero bueno lo que debemos hacer con esto es arrastrar esas 2 tablas a mi formulario, y esto para qué es? pues es para colocar esos controles que ven abajo junto con el dataset que están encerrados en el rectángulo verde, son controles que ya vienen cargados con datos necesarios y que no tendremos que ponerlos nosotros, por ejemplo ruta de la base de datos o metodos de conexión y desconexión, etc.

Crystal11

12.- Después de poner esas tablas las sacamos junto con la barra que se pone en la parte superior, y deberá quedarnos tener algo como lo que sigue.

Crystal12

13.- Luego de lo que hicimos vamos a la caja de herramientas y buscamos un control llamado CrystalReportViewer, lo arrastramos y colocamos en el formulario, este control será el que nos permita vizualizar nuestro reporte hecho anteriormente.

Crystal13

14.- Entonces una vez hecho esto damos doble clic en el borde del form para entrar al metodo load del mismo y poner el codigo que sigue a continuación. Aclarando un poco sobre ese código, lo que hacen las 2 primeras líneas es filtrar los datos de las tablas indistintamente si están relacionadas, las otras 3 líneas sirven para cargar nuestro reporte en el reportviewer que pusimos en el form, para esto cree un objeto llamado rpt del reporte(), que fue mi reporte que creamos hace rato, y en su propiedad SetDataSource le envie el dataset del proyecto que obviamente ya tiene los datos filtrado gracias a las 2 líneas primeras, por último mande a cargar este reporte al control del form con su propiedad ReportSource.

Crystal14

15.- Luego de esto si lo ejecutan deberán ver algo como esto.

Crystal15

16.- Ahora abramos el DataSet para crear algo extra, a continuación lo que haremos es crear un método que nos filtree solo los datos de las personas de género masculino. Para esto demos doble clic sobre el dataset o clic derecho y Open.

Crystal16

17.- Damos clic derecho sobre la tabla en la que crearemos el filtro –> Adjuntar –> Query.

Crystal17

18.- Lo que haremos a las siguientes 2 pantallas es simplemente darles clic en siguiente.

Crystal18

Crystal19

19.- Luego tendremos esto y lo que haremos es agregar otra tabla para relacionarla con la actual, para esto damos clic derecho en la parte blanca al lado de la tabla y en las opciones que se despliegan seleccionamos Adjuntar Tabla.

Crystal20

20.- Ya que nuestra Base de Datos solo posee 2 tablas solo podremos escoger 1, que es la tabla TGenero que es la que no tenemos puesta, la seleccionamos y damos clic en Adjuntar y luego en Cerrar.

Crystal21

21.- Como vemos a continuación ya nos aparece la tabla que agregamos relacionada con la primera que teniamos, esto es debido a que ya desde que las creamos hicimos esta relación; lo que sigue el como se ve en la imagen poner en la parte del medio o directamente en el query que necesitamos de la tabla TGenero el campo nombre_genero y que este nos servirá como filtro, por eso colocamos en la parte de filtro la palabra =@nombre_genero además debemos de sacar este campo de área Select, ya que si lo dejamos ahí no nos mostrará datos en nuestro reporte, o por lo menos eso es lo que me ha sucedido en la práctica, porque si lo ejecutamos en ese instante con el botón Execue Query si funciona normalmente pero con el Crystal Report encontre esa falla.

 Crystal22

22.- Ya al haberle dado clic en OK debe de presentarnos la siguiente imagen en la cual veremos ya hecha nuestra sentencia query de consulta, damos clic en siguiente para continuar.

Crystal23 23.- Ahora le pondremos un nombre tanto en la parte donde dice Fill a DataTable como en Return a DataTable, damos clic en siguiente.

Crystal24 24.- Lo que viene es que ejecutará lo que hicimos en el DataSet y guardará los cambios, solo le damos clic en Finalizar.

Crystal25

 25.- Ahora en el código modificaremos la línea que hacia el filtro en la tabla TPersona, en mi caso la puse como comentario, y coloqué la que cree recién, pueden ver que después del DataSet le pongo una coma y le envio un parámetro, esto es debido a que en mi query le puse el @nombre_genero, entonces por cada parámetro así que pongamos en el query que hicimos debemos enviarlo aquí es esa línea después del DataSet en el orden que nos lo pide la instrucción; en ese código yo puse la opción masculino directamente, si nosotros la colocaramos o escogieramos desde un textbox o un combobox este sería el que pondríamos ahí con su propiedad text.

Crystal26

26.- Ya lo que queda es ejecutar la aplicación y podremos ver que solo nos filtrará los datos de las personas de género masculino.

Crystal27

 

Bueno con eso he finalizado este pequeño manual de cómo hacer un Crystal Report en Visual Basic.NET, espero les haya sido de ayuda y ahí me cuentan que tal les fue, hasta, a2.

90 responses

26 11 2009
Josue

Hola J, qué hay? está chevere este manual, gracias, sin duda me servirá de mucho, saludos…

26 11 2009
José Mendoza

Hola, pues la idea es esa de que sirva de algo jeje, cualquier duda hay ayudo en lo que pueda…

1 11 2011
Maikel

Bendiciones, varon horita estoy realizando un programa sencillo.. pero me he visto cmplicado en hacerlo. es programa q reguistre empleados y que capture la fechas q los empleados entre a la empresa . y si el empleado falta mas de 3 veses el sistema los coloque cm observacion u suspenda… hay q realizarlo en visual basic 2008 .. mi nombre es maikel espero tu respuesta este es mi msn maikel_yeshua10@hotmail.com

2 11 2011
José Mendoza

Hola, disculpa pero no entiendo que necesitas… o que respuesta necesitas…

5 06 2012
Gabriel

en el punto 12 al sacarlo no entiendo a que te refieres soy principiante perdonen lo bruto jeje :p porfavor!!!

4 09 2012
raul

Quizas el tutorial pueda ser de utilidad: http://www.youtube.com/watch?v=fSLDw8sde3U

29 12 2009
Jame

Jota… seria mejor que pusieras mas explicito el codigo… aunque con lo que se sabe de programacion pasa super piola el manual…

10 04 2010
SERGIO

QUE BUEN MANUAL!! ME SACO DE UN APURO DE UN SISTEMA DE FACTURACION QUE ESTOY CREANDO

SALUDOS!! JOSE MENDOZA

24 04 2010
José Mendoza

hola q weno q t sirviera, en realidad ahora manejo un modelo mas sencillo y más óptimo para hacer eso, pero no he podido postear nada en meses x el poco tiempo q he tenido, espero en unos meses poder postear otra vez como antes y hacerlo con las nuevas cosas q he aprendido… saludos y a2.

13 05 2010
Erika Mejia

Hola Jota esta muy bueno este manual explica todo… orita m sirve xq estoy interasada en aprender todo esto graciasss…

27 05 2010
heiner

Hola Jota, primero te felicito por que el manual esta bastante detallado, lo segundo es para realizarte una consulta, resulta ser que estoy realizando reportes casi de emergencia por medio de datasets pero de dos bases de datos (Oracle, SqlServer), los datasets trae querys de Oracle y Sql Server , se unen en el dataset y se genera el reporte ademas, al cargar los datasets le paso la información de conexión de la base de datos, he llegado a nivel de pasar la contraseña y usuario de la base de datos de las tablas del crystal , pero aun me da el siguiente error:

«El informe solicitado requiere información adicional.»

Server Dataset1
Base de datos :
Usuario:
Contraseña:

Código de Ejemplo de asignar la conexion por tablas que estoy realizando.

Dim myTables As Tables = myReportDocument.Database.Tables
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
If myTable.Name = «tabla1» Or myTable.Name = «tabla2» Then
myTableLogonInfo.ConnectionInfo = MyCnxOracle
Else
myTableLogonInfo.ConnectionInfo = MyCnxSqlServer
End If
myTable.ApplyLogOnInfo(myTableLogonInfo)
Next
Saludos y espero que tengas una idea que me pueda ayudar
cualquier cosa te dejo mi correo heinergc@hotmail.com

13 09 2010
Cesar Guillen

Hola, excelente manual. Pero estoy teniendo un problema con el crystal report. Lo Detallo a continuacion.

Estoy desarrollando en vb.net 2008 con windows form. He hecho varios reportes con crystal utilizando dataset. en la pc de desarrollo todo funciona de maravilla, todas las conexiones que uso son de trusted_connection, pero en una pc de pruebas con el ambiente de produccion, al ejecutar el reporte en la aplicacion, el crystal report siempre me pide usuario y contraseña, me muestra una ventana donde sale «ServerName» mostrando el nombre del datset, otro campo «Database» que va en blanco y por supuesto los campos usuario y contraseña.

Si estoy utilizando un dataset, porque el crystal me pide esta informacion ?
De que forma puedo hacer que no me lo pida ?

En foros he visto la instruccion: Reporte.SetDatabaseLogon(usr, pwd), pero en mi caso al usar dataset y en el llenado del dataset usar trusted_connection, no veo logico que me pida estos datos.

Gracias de antemano.

14 09 2010
José Mendoza

hola, gracias por leer mi blog, la verdad este post sobre como crear un crystal reports lo cree hace ya un par d años, pero actualmente para aplicaciones que desarrollo utilizo la misma cadena de conexion que uso para las transacciones de la aplicacion, entonces creo un metodo que usa esta cadena de conexion y lee un procedimieto almacenado de lectura (algo como select id, nombre, apellidos, edad from CLIENTES), entonces obviamente yo se que me devuelve una tabla y esa consulta la guardo en un datatable que retorno desde mi funcion, creo un dataset tipado (ya no un dataset como lo puse en mi post) y le doy los mismos nombres y los mismo tipos de datos y en la misma posicion que me devuelve mi procedimiento almacenada, entonces una vez armadas esta cosas lleno mi dataset tipado con el datatable y mando ese dataset a mi crystal reports que hice en base a mi dataset tipado, de esta forma si tu aplicacion funciona en una makina de produccion pero no los reportes al utilizar la misma cadena de conexion para los reportes debe d funcionarte.

Jejeje, espero me hayas entendido pero con el trabajo en cima no he tenido muxo tiempo d detallartelo mejor, saludos y espero que lo logres. a2.

17 01 2011
Luis Carrizo

hola Jose !!! muchísimas gracias por tus aportes!!! Quisiera preguntarte si es que puedes pasarme mas detalles de como utilizar un dataset tipado.

4 10 2010
German Morales

Hola, gracias por el manual, esta bastante practico…
Pero quiero hacerte una consulta.

Estaba tratando de hacer un reporte que presente cierto conjunto de datos entre dos fechas (rangos de fechas), utilizando tu ejemplo con filtros

SELECT visita.tiempo_max, visitante.nombre_visitante, empleado.nombre_empleado, visita.fecha
FROM ((empleado INNER JOIN
empleado_visitante ON empleado.cod_empleado = empleado_visitante.cod_empleado) INNER JOIN
((visita INNER JOIN
visitante_visita ON visita.cod_visita = visitante_visita.cod_visita) INNER JOIN
visitante ON visitante_visita.cod_visitante = visitante.cod_visitante) ON empleado_visitante.cod_visitante = visitante.cod_visitante)
WHERE (visita.fecha BETWEEN visita.fecha AND visita.fecha)

pongo en el campo filter… @fecha

pero tengo el problema de que cuando voy a llenar el tableadapter con el
fillbyfecha (datatable, fecha1,fecha2), no esta definido.

Has hecho algo similar?

de antemano gracias por tu generosa ayuda…

4 10 2010
José Mendoza

hola creo si he hecho lo q me dics, mmm si estas haciendo el query en el query builder del visual studio debes ponerle en el where de la siguiente manera WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2), de esa manera te establecerá que espera los 2 parámetros de fechas, el primero como inicial y el segundo como final, espero eso sea lo q me preguntabas, y gracias x pasarte por mi blog, suerte y a2.

4 10 2010
German Morales

Saludos josé y gracias por responder tan pronto.
Fijate que tomé tu consejo pero le he dado varias modificaciones y todavía no doy.

Efectivamente, estoy usando el querybuilder de vs.net.

Al escribir la consulta de esta forma: WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2)
se genera error porque las @fecha1 y @fecha2 deben de ir asi: WHERE (visita.fecha BETWEEN ‘@fecha1’ AND ‘@fecha2’)
entre comillas simples.
Cuando hago esta variante, la columna donde se especifica el campo que servirá como filtro
(filter), lo escribe como BETWEEN ‘@fecha1’ AND ‘@fecha2’, no se define un único valor.

No sé si el error se deba al especificar no un valor en el filter sino varios…porque en tu ejemplo unicamente utilizas
@nombre_genero.

Después de esto, vuelvo al dataset, a la tabla para modificar sus parametros y aparece sin ellos en la definicion:
fillbyfecha()… y debería generar fillbyfecha(@fecha1,@fecha2).

Muchas gracias José, saludos desde Nicaragua.

4 10 2010
José Mendoza

hola, acabo de enviarte un mail con un adjunto de ejemplo de un query con rango de fechas, espero te sirva, ahi me cuentas, a2.

22 03 2011
ana

Hola… oye nose si me puedas ayudar tengo el mismo porblema q plantean con las fechas y me salen los mismo errores q plantean…

Al escribir la consulta de esta forma: WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2)
se genera error porque las @fecha1 y @fecha2 deben de ir asi: WHERE (visita.fecha BETWEEN ‘@fecha1′ AND ‘@fecha2′)
entre comillas simples.
Cuando hago esta variante, la columna donde se especifica el campo que servirá como filtro
(filter), lo escribe como BETWEEN ‘@fecha1′ AND ‘@fecha2′, no se define un único valor…

me puedes ayudar… ya estuve revisando varias cosas y la verdad q no encuentro la solucion….

4 10 2010
German Morales

José, te escribi a tu correo por lo de tu ejemplo

5 10 2010
JC

Hola, esta bonito el manualito, pero este aplica si alguien quiere trabajar con controles visuales, yo lo programa de forma manual, sin embargo, en un reporte, invoco otro subreporte (especificamente en el encabezado) y al inyectarle los parametros de la siguiente forma :

string strAppDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
ReportDocument cryRpt = new ReportDocument();

try
{
cryRpt.Load(strAppDir + «\\RptCorte.rpt»);
cryRptView.ReportSource = cryRpt;
cryRpt.SetParameterValue(«@Opcion», 1);
cryRpt.SetParameterValue(«@Store_Code_Id», Convert.ToInt32(GrdSucursales.Rows[GrdSucursales.CurrentRow.Index].Cells[0].Value).ToString());
cryRpt.SetParameterValue(«@Cais», Convert.ToInt32(GrdCajas.Rows[GrdCajas.CurrentRow.Index].Cells[0].Value).ToString());
cryRpt.SetParameterValue(«@FechaInicial», dtFechaInicio.Value.Date);
cryRpt.SetParameterValue(«@FechaFinal», dtFechaFin.Value.Date);
}//try
catch (Exception error)
{
// Let the user know what went wrong.
MessageBox.Show(«ERROR » + error.Message, «Problema en generar el Reporte : RptCorte.rpt»);
}//try

Capturo sin problema el valor de la opcion, Store_Code_Id, Cais, FechaInicial, FechaFinal, y cuando quiero generar el reporte, me pide de nuevo que introduzca los parametros, pero el chiste es que el usuario no los este metiendo de forma manual, que puedo hacer ?????

Gracias.

6 10 2010
José Mendoza

hola que weno que te haya sido de utilidad mi post, sobre tu problema pues 2 observaciones o por lo menos diferencias que encuentro respecto a como yo escribo el codigo para parametros de reportes, yo no les pongo el arroba (@), y el ReportSource lo pongo despues de asignar los parametros, aunque kizas eso no influya, pero en resumen yo lo escribo asi:
…..
rpt.SetParameterValue(«OrdenTrabajo», listaCab(1))
rpt.SetParameterValue(«CodBarco», listaCab(2))
rpt.SetParameterValue(«NomBarco», listaCab(3))
rpt.SetParameterValue(«Viaje», listaCab(4))
visor.ReportSource = rpt

entonces kizas el arroba no es necesario y x eso no te toma en cuenta esos valores y te los vuelve a pedir, espero te haya ayudado, suerte, a2.

6 10 2010
JC

Gracias por responder.

Te comento que realizando tu observacion, si no agrego el simbolo «@» al final siempre me pide los parametros, pero por el momento solo los de la fecha me pide de nuevo, los otros parametros me los acepta sin problemas, sera que acaso las fechas se inyectan de otra forma ????

6 10 2010
José Mendoza

hola, mmm weno sobre las fechas igual les kito el @, pero los envio de otra forma, diferente a la tuya, los envio así rpt.SetParameterValue(“FechaInicial”, date.parse(dtFechaInicio.text));.
Yo los envío así siempre y cuando la variable en el crystal este definida como tipo date, porque si no está definida como date simplemente pongo los mismo aumentando el toString() al final, osea así: rpt.SetParameterValue(“FechaInicial”, date.parse(dtFechaInicio.text).toString());.

Pruebalo y nos cuentas que tal te fue, a2.

6 10 2010
José Mendoza

hola, puedes decirme que error es o que dice el error???.

8 10 2010
José Mendoza

hola, disculpa fue mi error, como estas en c# no encontraras date sino datetime, me ekivoke con vb, prueba con datetime.parse…

9 10 2010
José Mendoza

hola, sabes yo escribo el reportSource despues de asignar todos los parametros, no se si eso te estará afectando en el reporte, intenta ponerlo como en mi ejemplo después que asignast todos los parámetros, si el arroba, xq asi me funciona…

11 10 2010
JC

Hola, pues me sigue apareciendo lo mismo, siempre me pide los parametros, pero descubri algo mas, lo fui ejecutando paso a paso, y al llegar al parametro en donde asigno las fechas, el try me tira un error, y es aca donde me pide los parametros de forma manual, al introducirlos todos me genera el reporte y el catch tira el siguiente error : «ERROR El indice no es valido. (Excepcion de HRESULT: 0x8002000B (DISP_E_BADINDEX))» y no se si esto puede servir de pista para encontrar la solucion, ya que busco y no encuentro algo que me solucione.

12 10 2010
José Mendoza

una pregunta antes q todo, para estar seguro, el tipo de datos de fecha en el crystal reports si es fecha verdad???, la verdad no se q otra solucion darte tendria q verlo yo mismo para probar y ver q pueda ser, xq en la forma como yo t dije q lo hacia debe funcionar a menos q alguno d los tipos d datos no este correcto o se pierda… disculpa ya no se m ocurre q mas pueda ser, pero si kieres te ayudo a probarlo, no se q tan rapida sea la conexion para hacer un escritorio remoto con teamviewer o sharedview, si es q los manejas para ayudarte remotamente…

6 10 2010
JC

pues al adicionar la linea date.parse antes del valor de la fecha, me tira error, debes declarar otra libreria entes ???? , y si quito el simbolo de arroba, tengo que agregar los parametros de nuevo, pero de la interfaz del usuario.

9 10 2010
JC

hola de nuevo
pues no me funciona aun, y cuando tu colocas el parametro sin la arroba es cuando manda un valor que quieras que salga en el reporte, y con la arroba es un parametro que inyecto al procedimiento almacenado que ejecuta el reporte, y como te digo, tengo que ponerlos de nuevo desde la aplicacion.

7 10 2010
JC

El error que muestra es :
el nombre «date» no existe en el contexto actual

Que crees que pueda ser ????

9 10 2010
German Morales

Hola José, espero estes bien… te comento que no he podido abrir la BD_EjemploProcedimientos.mdf, recordas, hay un error de apertura , tengo sqlser ver 2000 y 2005 y no abre. sigo con aquello de presentar un reporte por intervalos de fechas… mas adelante te comento…

9 10 2010
German Morales

Mi pregunta jose por no poder ver BD_EjemploProcedimientos.mdf, como es que definis en el querybuilder de vs, el filtro del campo fecha porque a como te comenté antes, en tu ejemplo definis el nombre como @nombre pero al ser dos fechas en mi caso, no se definiria solamente como @fecha en el filter… sino @fecha, @fecha (no puedo poner @fecha1,@fecha2) porque la BD solo tiene el campo llamado fecha y en el filter , segun ejemplos, solo se puede definir un filter por campo…

9 10 2010
German Morales

luego de revisar el video , aparece un error: Error in WHERE clause near ‘@’.
Unable to parse query text. mi BD esta en access2007 y el campo fecha es text… sera por eso??? he estado probando y cambiando a tipo de dato datetime, pero nada, ni siquiera puedo ver la ventana donde indicas los parametros @fecha1 @fecha2… aparece el mensaje ‘faltan parametros’… tengo ademas vb.net 2008 team system

9 10 2010
German Morales

luego de revisar el video , aparece un error: Error in WHERE clause near ‘@’.
Unable to parse query text. mi BD esta en access2007 y el campo fecha es text… sera por eso??? he estado probando y cambiando a tipo de dato datetime, pero nada, ni siquiera puedo ver la ventana donde indicas los parametros @fecha1 @fecha2… aparece el mensaje ‘faltan parametros’… tengo ademas vb.net 2008 team system, ya me fije que no indicas parametros a filter…!

9 10 2010
German Morales

Jose, que tipo de dato es fecha en tu BD BD_EjemploProcedimientos.mdf???

9 10 2010
German Morales

jose… los parametros @fecha1 @fecha2, los que me decis que vs los toma como parametros exigidos, fijate que luego al ejecutar consulta no aparece la ventana donde precisamente vos estableces los parametros de entrada para la consulta…

25 11 2010
yerson

Doctor esta bien el manula, mas bien doctor cual sera tu correo para preguntarte algunas dudas que tengo.., saludos

13 01 2011
Dario

necesito saber como hago para cambiar el sexo de un empleado que se guarda con «M» y lo quiero mostrar en el reporte como masculino por favor respondame lo antes posible

13 04 2011
Alexander

Hola Dario… puedes editar espero aún te sirva.. puede editar la consulta SQL para ese cometido usando IF algo asi como esto
IF(tabla.sexo=’M’,’Masculino’,’Femenino’) as ‘GENERO’

y en el reporte llamar ese campo GENERO

jeje espero te sirva de algo.

1 03 2011
martin rivas

hola, tengo un situacion con mi sistema que estoy desarrollando por que al momento de ingresar contraseña y usuario quiero en el reporte que me visualeze informacion de la sesion como nombre del usuario, para saber quien realizo el reporte(crystal report), ficha, espero me puedan ayudar. el programa esta e vb.net 2008

1 03 2011
José Mendoza

hola Martin, mmm es simple primero q debes de cargar los datos del usuario en variables globales, x lo menos asi lo hago yo, ya sean los datos del usuario de dominio o de la propia aplicacion, no se como los estes manejando, de ahi en el crystal reports definir variables y cuando abres el crystal reports les envias esos datos a las variables…

22 03 2011
Alexander

Hola muchachos. Tengo un porblemota todo feo y me siento frustado por que no lo puedo solucionar. les comento, si me pueden ayudar.

Necesito meter un subreporte, use una parte de la tecnica posteada para crear los reportes y me va de maravilla, la unica vaina y problema es que no puedo meter un subreporte. uso procediemientos almacenados y los reportes por separado funcionan sin problema pero cuando los quiero unir en un solo reporte no me funcionan, no estoy enviando nada de parametros pues ya los genero desde afuera de CR a puro codigo.
solo quiero meterlos en el reporte general.
que puedo hacer???

necesito su ayuda por favor si alguien tiene idea agradeceria su ayuda.

22 03 2011
Alexander

JEJE.. bueno muchachos ya encontre la respuesta…. era tan simple… nuuu XD

8 06 2011
orlandoraul

Chochera necesito tu ayuda con rangos de fechas en el reporte

8 06 2011
orlandoraul

por favor te lo agradeceria mucho si me ayudas con este gran detalles con los rangos de fecha en los reportes que deseo….
mi correo es rpachas@dm.pe

Gracias..
saludos..

22 06 2011
Richard Vizcaino

Hola buen dia, les cuento que el manual esta muy bueno, lo probe para ver que tal y me parecio bien, pero tengo un pequeno problema el cual no he podido solucionar todabia, sucede que tengo unos reportes en crystal report y vb.net y cuando lo pruebo con distintas conexiones de datos me funciona perfecto, la cuestion esta que cuando la pruebo desde otro pc, nada de nada, no logra conectarse al servidor, mientras que las demas funciones del sistema estan perfectamente y se conectan con el servidor «vizcainor21@hotmail.com»

22 06 2011
José Mendoza

Hola, si vas a las propiedades del dataset veras que hay dice la cadena de conexion que esta utilizando, lo mas seguro es que diga localhost, por eso no te conecta desde otro computador, cambia la palabra localhost por el nombre de tu servidor o mejor dicho la ip donde esta alojada la base de datos.

saludos.

27 07 2011
luis sanchez

hola gracias por ese manual la verdad he buscado mucho y nada me a servido hasta ahora

10 08 2011
Dany

GRacias, los reportes de crystal reports me salian en blanco con los de visualbasic 10 no podia sacar datos de dos bases de datos y eso ya habia trabajado con los tableadapter y dataset de vb10, gracias a tu aporte en el paso 15 solucionaste mi problema

Dim rpt_1 As New CrystalReport1
rpt_1.SetDataSource(NucleoDataSet)
CrystalReportViewer1.ReportSource = rpt_1

GRACIAS:::::::::::::::) je je je je

23 09 2011
Jorge

Estimado amigo: este informe me ha sido de mucha utilidad para mi trabajo, no obstante aun tengo una falla a la que no le encuentro solución. Cuando hago la consulta SQL y el pongo una condicion (p. ej. CAMPO1 = 1 AND CAMPO2 > 1 ) es cierto que funciona cuando ejecutas el query en el Query Binder, pero luego no aparce nada en el Crystal Report.
Mucho agradeceria si pudieras darme una ayuda con esto. Saludos y gracias de antemano

24 09 2011
José Mendoza

mmm no entendi muy bien, pero si no me equivoco te ha de faltar enviar los parametros como variables en el metodo… si me pones algo de codigo quizas lo entienda mejor.

28 09 2011
Jorge

ya descubri el tema…… no se debe poner @nombreparametro en la consulta porque sino no funciona, en lugar de ello hay que colocar ?, es decir campozz = ? … y aasi funciona de 10 !!!! gracias de todas formas…

28 09 2011
José Mendoza

???? me parece muy raro, pero si te funciono asi chevere.

28 09 2011
Jorge

Estimado José: De todas formas estoy muy agradecido porque el ejemplo que das funciona de maravillas. A pesar de ello aún me quedan dudas sobre el punto 11 de tu explicación, dado que es muy comodo y practico para dos tablas, pero si tienes mas tablas y mas reportes para mostrar, puede transformarse en un embrollo. Hay algún otro mecanismo para ahcer lo mismo.
Gracias, Jorge

28 09 2011
José Mendoza

Pues bueno, la verdad deje de usar mucho de eso hace tiempo, lamentablemente ahora no tengo tiempo suficiente para mantener el blog, pero no lo quito porque veo que aun sigue sirviendo, como lo hago ahora, pues de manera rapida utilizo dataset tipados, en que ayudan? pues en mucho con eso puedo utilizarlo para tener reportes de crystal con sql, postgresql o cualquier otro motor de base de datos sin necesidad de depender de la tecnologia microsoft, la base es hacer un query y ejecutarlo en un metodo, ejemplo (lo siguiente funciona con postgres pero con sql es lo mismo solo cambia un poco):
public DataTable Produccion_Poliza(string where)
{
DataTable t = new DataTable();
BaseDatos miBD = new BaseDatos();
miBD.Conectar();
miBD.ComenzarTransaccion();
miBD.CrearComando(«select p.id_poliza, p.codigo_poliza, c.nombre as nombre_asegurado, p.vigencia_fecha_desde as vigencia_desde, p.vigencia_fecha_hasta as vigencia_hasta, p.num_poliza as numero_poliza, s.id_ramo, s.nombre as seguro, s.codigo as cod_seguro, cs.nombre as compania_seguro, p.prima_neta as prima_neta, p.porcentaje_comision from » + c + «TCliente» + c + » as c inner join » + c + «TPoliza» + c + » as p on c.id_cliente=p.id_cliente inner join » + c + «TDetSeguro» + c + » as ds on ds.id_det_seguro=p.id_det_seguro inner join » + c + «TSeguro» + c + » as s on ds.id_seguro=s.id_seguro inner join » + c + «TCompaniaSeguro» + c + » as cs on cs.id_compania=ds.id_compania inner join » + c + «TRamo» + c + » as r on r.id_ramo=s.id_ramo » + where);
Npgsql.NpgsqlDataReader dr = miBD.EjecutarConsulta();
if (dr.FieldCount > 0)
{ t.Load((System.Data.IDataReader)dr); }
miBD.ConfirmarTransaccion();
miBD.Desconectar();
return t;
}

Como ves en el query me halo datos de varias tablas, en una consulta especifica para lo que necesito, acto seguido hago un dataset tipado con un datatable para que reciba el resultado de esto, ejemplo:
Dim mtRPT As New MRPolizas()
Dim miT As New DataTable()
miT = mtRPT.Produccion_Poliza(where)
Dim ds As New ds_produccion_polizas()
For Each poli As DataRow In miT.Rows
…..
…..
ds.dt_Produccion.Adddt_ProduccionRow(poli.Item(«nombre_asegurado»), CDate(poli.Item(«vigencia_desde»)), CDate(poli.Item(«vigencia_hasta»)), poli.Item(«numero_poliza»), CInt(poli.Item(«id_ramo»)), poli.Item(«seguro»), poli.Item(«cod_seguro»), poli.Item(«compania_seguro»), CDbl(poli.Item(«prima_neta»)), valorHaber, facturas, valorDebe, fechasfacturas)
Next

Dim rpt As New cr_ProduccionPoliza()
rpt.SetDataSource(ds)
visor.ReportSource = rpt

Aqui en eso ultimo podia obviarme el for each, pero antes de la linea de agregar los datos hago una manipulacion de los datos, por ese motivo lo hago asi y acorte un poco.

Y listo, en base asi lo hago actualmente ya que es mas flexible por asi decirlo.

Saludos, a2.

28 09 2011
Jorge

Jose: Gracias por la aclaración que me has hecho, pero debo confesar que soy muy novato (en esto) y lo mio es solo un hobby y me llevara tiempo entender de que se trata… de todas formas un millon de gracias.
Jorge- Argentina

4 10 2011
Jorge

Jose, soy nuevamente jorge y queria consultarte sobre un tema de pasar los datos a un reporte pero no con data set…. donde te puedo escribir?

6 10 2011
José Mendoza

hola Jorge, la verdad preferiria que cualquier duda la escribas aqui, y por este medio compartirla con los demas, casi no me gusta dar mi correo personal, asi que pro favor comentalo aqui en el blog.

6 10 2011
Jorge

hola Jose… genial, entonces ahi va la duda, que es sobre el mismo tema de antes:

1)El reporte en cristal tiene cuatro campos (nombreusuario, codigousuario y nivelusuario) que salen de la Tabla USUARIO y el otro campo es nombreproceso que sale de la Tabla Proceso.

2)Las dos tablas están enlazadas por el campo numero de proceso

3)La instrucción Sql para seleccionar los datos es la siguiente:

» SELECT USUARIO.US_APELLIDO, USUARIO.US_NOMBRE, USUARIO.US_USUARIO, » & _
» INFOPROC.PRO_NOMBRE, USUARIO.US_OPCIONES, USUARIO.US_NUMERO, USUARIO.US_ESTADO, USUARIO.US_COMPUESTO» & _
» FROM USUARIO INNER JOIN INFOPROC ON USUARIO.US_PROCESO = INFOPROC.PRO_NUMERO » & _
» WHERE (USUARIO.US_NUMERO > » + CStr(1) & » AND USUARIO.US_ESTADO = » + CStr(1) & «)»

4)Las instrucciones para leer los datos, llenar el dataset y llamar al reporte son estas:

Comando.CommandType = CommandType.Text
Comando.Connection = dbConectarBase
Dim Adaptador As New Data.OleDb.OleDbDataAdapter
Adaptador.SelectCommand = Comando
Adaptador.Fill(TablaDatos, «USUARIO»)
Dim MiReporte As New CrystalReport1
MiReporte.SetDataSource(TablaDatos)
Dim miForma As New Form1()
miForma.CrystalReportViewer1.ReportSource = MiReporte
miForma.Show()

5)El reporte se muestra bien si NO esta incluido el campo nombreproceso
6)Cuando se incluye este campo, en el reporte no se muestra ningún dato.

Podrias orientarme por donde anda la falla??

Mi idea es llenar una Tabla de Datos con los datos seleccionados y pasarlos al reporte, pero parece que se encapricha el muy jodido.

Grcias por tu aporte..

Muy bueno el blog…!!!!

8 10 2011
José Mendoza

Hola, una duda la tabla del dataset, asumo es TablaDatos, posee esta columna que agregas? la de nombreproceso? cuando he tenido problemas que no me carga el reporte me ha sucedido que es porque no escribi bien el query, para eso lo pruebo en el sql a ver si corre sin problemas; o porque en la tabla del dataset no esta la columna o con alguna diferencia en el nombre o tipo de dato diferente.

Puedes ponerle un breakpoint en Dim MiReporte As New CrystalReport1 y revisar si pasa de ahi, ya que si no es porque cuando llega ahi debe haber un problema con la llenada del dataset o de la ejecucion del query.

Saludos.

12 10 2011
Jorge

Hola José: Gracias por tu respuesta y te hago los comentarios en forma separada.
– La TablaDatos es la tabla del dataset
– La TablaDatos no tiene la columna nombreproceso (Como se incorpora? y dónde?)
– Corre bien hasta ese breakpoint y continua corriendo bien

Gracias

3 11 2011
DMR

Definitivamente eres lo maximo.. me a servido de muxo.. gracias..

9 12 2011
sama

jejejjeje quiero sabes como haces un cristal report en asp.net usando un data set y cual es el codigo para hacer la conexion y extraer las tablas de sqlserver2008

6 11 2011
Jorge

Jose:

Aún no pude descubrir el error, puedes darme otra idea de como encarar la cuestion. Gracias

9 12 2011
sama

apuesto a que te refieres que se puede hacer esto con una cadena de conexion con codigo??

10 01 2012
Alejo

Hola amigo me puedes enviar este proyecto a ver si me guio ?? es q tengo un problema y no logro resolverlo…. Pasa q en el filtro coloco =@MiParametro y cuando le doy ENTER para guardar se guarda como campo=? me sustituye mi filtro por un ‘?’ te dejo mi correo por fa necesito tu ayuda GRaciass!

7 02 2012
Luis Humberto Zamorano

Hola! excelente me funciono perfecto!, lamentablemente tuve un problema con el diseño dado que al utilizar suprimir si se duplica, me genera demasiados espacios en blancos, he tickeado en el asistente de sección eliminar espacios en blancos pero aun asi no me funciona.

Me muestra lo siguiente:

44 GASTO NIVEL 1
4455 GASTO NIVEL 2
445505 GASTO NIVEL 3
445505005 GASTO NIVEL 4

445505005 GASTO NIVEL 4

445505015 GASTO NIVEL 4
Cuando debería mostrar lo siguiente:
44 GASTO NIVEL 1
4455 GASTO NIVEL 2
445505 GASTO NIVEL 3
445505005 GASTO NIVEL 4
445505010 GASTO NIVEL 4
445505015 GASTO NIVEL 4

ya no se que hacer, he intentado hacer todo incluso lei el manual de crystal reports y aparece lo mismo en todos lados pero no funciona.
Yo creo que debe existir alguna formula que me permita leer los datos y compararlos y no dejar espacio.

Favor ayuda.!

Saludos

18 02 2012
orion16

seria mas facil asi
crea tu cadena de conexion
crea tu dataset y llenalo con un select con un procedimiento almacenado mandandolo a una clase
luego tu reporte mandalo por parametros y no te meteras en problemas con temas de origenes de datos

29 02 2012
crystal reports

[…] […]

1 03 2012
Ileana B.

hola tengo un problema con un sistema en .net (VStudio 2010) y crystal reports, al montar el proyecto al servidor , los usuarios empiezan a trabajar en el y derepente a los 30 mminutos los reportes se dañan (da un error como cuando el rpt. no existe o no lo encuentra), incluso los q no estan en uso. La unica forma de arreglarlo es volver a montar todo el proyecto al servidor. Y siguen trabajando por otros minutos y se vuelven a perder los reportes. que puede ser ? es concurrencia , alguna dll de Crystal ?

12 03 2012
monserrat

esta muy padre, m ayudó mucho en una materia de aplcaciones web 🙂

25 04 2012
Jose Luis

Hola amigo muy bueno tu aporte pero tengo un inconveniente cuando me muestra la consulta me aparece repetido el resultado de la consulta varias veces que puedo hacer

16 08 2012
Gerardo

Gracias, el mejor manual que he visto sobre el tema, explica muy claramente. me ha servido de mucho.

9 09 2012
Marcos Montoya

Me funciono muy bien, Gracias por el aporte

30 09 2012
frank

la base de datos de donde la puedo bajar?

1 10 2012
frank

fijate que quiero hacer tu ejemplo con una base de datos pero me tira error que puedo hacer?

14 12 2012
Miguel

Gracias muy buen aporte simple pero funciona.

6 05 2013
Jorge Salazar

Estimado, llevo tres semanas con un problema de que me mostraba en blanco un reporte y despues de miles de foros el tuyo fue el único que me funcionó y super bien explicado. Extraordinario aporte

24 09 2013
Otoniel

Estimado Jose, te comento que soy principiante en .net y en cristal, por destino estoy para programar en esta herramienta y tengo que generar unos reportes, estaba viendo tu manual y me parece bien interesante, pero para uno de nuevo creo que nos cuesta un poco, en el punto 11 estoy perdido, porque en ningun momento creas al inicio un form, bueno yo creo un web form, pero por ningun lugar veo mis origenes de datos, yo creo un dataset como lo explicaste pero este lo veo en mi explorador de soluciones (lado derecho), y en la herramientas (lado izquierdo) no veo mis origenes de datos como tu imagen, cuando le doy al de solucion me desplega la ventana de inicio en donde coloque las tablas (son varias)
Pregunta (como te dije soy nuevo) como hago para ver esto lo del paso 11, para poder seguir con tu instructivo. vi una dirección de youtube, pero aqui no puedo ver ese tipo de videos.
Que Dios te bendiga por tu ayuda y apoyo, y mil gracias por compartir tus conocimientos es de gran ayuda.

O si alguien de los demas expertos tambien me pueden ayudar les agradezco.

30 09 2013
Joel

Estimado, muy bueno tu manual me ayudo a despejar algunas dudas, solo una consulta como se lograría ingresar el parámetro genero (masculino o femenino) desde la ventana de parámetros del propio Crystal Report?

2 11 2013
Vanessa

no veo los códigos de la misma forma en mi visual ='(

28 11 2013
mag

una consulta.. este reporte podra ser visto en cualquier pc? osea que no esta casado con el servidor vD?

12 02 2014
vladimirunfv

Hola con todos, son principiante en .net con VB estoy implementando un crystal report en un aplicativo web pero cuando genero el reporte me sale el mensaje: «El informe solicitado requiere información adicional» alguien tiene un ejemplo en aplicativo web

16 08 2014
vicent

como lo puedo hacer mediante MVC?
me imajino algo asi

CrystalReport5 report = new CrystalReport5();

report= cc.consultaGeneralByDATe(dateTimePicker1.Value, dateTimePicker2.Value);

crystalReportViewer1 = report;

pero no se como hacerlo

cc= Controlador y consultaGeneralByDATe es mi metodo

quiero obtener mi reporte mediante fechas… espero que me puedas ayudar

2 01 2015
ANGEL

ANGELPC

2 01 2015
ANGEL

Alguien me podria ayudar a sacar el reporte de cada registro
con visual basic .net 2010,les agradeceria mucho.

27 02 2015
BLadimir PauAnc

Pero, como se aria la conexion en una PC remota, si ya pusiste que el servidor es otro

20 03 2016
Hernando Rodriguez

Saludos amigo tengo un problema que me ha hecho la vida de cuadros. cree el reporte tal como indicas en este block el problema es que el reporte como tal la primera vez que ejecuto el programa muestra los datos correctamente pero luego cuando la base de datos ha cambiado, aunque haya cerrado y vuelto a ejecutar el programa muestra en el reporte los datos de la primera vez que lo ejecute. en otras palabras carga de forma predeterminada los datos de la primera ejecución. he intentado muchas formas que he encontrado en la web y nada no logro dar solucion

Replica a Jorge Cancelar la respuesta