Pregunta: | 43064 - SACAR UN INFORME CON EL CRYSTAL EN BASE A UNA SELECT. |
Autor: | Elena Igartua |
Hola,
Yo he diseñado con el Crystal un informe que saca 4 campos de 2 tablas diferentes. Desde VB ejecuto la consulta para seleccionar las filas pero en el informe salen mas filas de las que debería: cnx.ConnectionString = ConexionSql cmd.CommandText = "SELECT C.DNI,C.Nombre,c.ape1,d.codban FROM COLABORAdor C,DONATIVO d WHERE C.CODTIPO=d.CODTIPO AND C.DNI=d.DNI " _ & " and d.fecdon >= '01/04/2004' AND d.fecdon <= '30/04/2004' and d.forpag='T' ORDER BY c.ape1" myadapterPer.SelectCommand = cmd cmd.Connection = cnx cnx.Open() myadapterPer.Fill(DsDona) orpt.SetDataSource(DsDona.Tables(0)) CrystalReportViewer1.ReportSource = orpt El dataset después de la instrucción Fill tiene las filas correctas y la select la he ejecuta en SQL directamente y está bien, pero cuando carga el orpt no sé qué pasa que salen mas filas. Si por favor se os ocurre algo decirme. Un saludo y muchas gracias. |
Respuesta: | Juan Carlos Martínez López |
Hola Elena, ps mira, bueno, en realidad no se cuanto sabes de Crystal y su uso, pero cuando trabajas con un Crystal Report al crearlo te pide el origen de datos, vos sabes, campos de las tablas que quieras mostrar en tu informe.
Lo que te recomiendo hacer es usar esa sentencia SQL y crear una consulta en la base de datos, no se si estes trabajando con Access o con SQL Server, luego agregas un dataset vacio y abris en explorador de servidores, agregas una nueva conexion a tu base de datos e inmediatamente te van a aparecer las tablas y consultas que tenes, arrastras la consulta que creaste a tu dataset que acabas de crear. Luego te vas a agregar el Crystal Report y en la seccion campos te pide tu origen de datos buscas en Datos del Proyecto, luego ADO.Net DataSets y buscas el dataset que creaste, Luego le das siguiente, en campos del informe seleccionas lo que quieres mostrar y luego finalizar, las otras opciones ya sabes q son opcionales. Ahora en tu aplicacion VB el codigo que va a ir en tu botón para mostrar el informe, es el siguiente: Dim instaciaReporte As New reporteCrystal() /* Este es tu instancia del reporte */ instaciaReporte.SetDataSource(miDataSet) /* Aca le decis q el origen va a ser el dataset q tenes en tu formulario */ Dim formReporte As New frmVistaPreviaFactura() /*Aca declaro una instancia de mi formulario en donde voy a mostrar mi reporte */ formReporte.crvFactura.ReportSource = instaciaReporte formReporte.Text = "Reporte" formReporte.ShowDialog() y eso es todo, aca estoy considerando que tu dataset del formulario tiene la misma consulta que le pasaste al reporte, pero si no es asi escribime a mi correo y me mandas tu proyecto y la Base de Datos, si es SQL Server te vas a la carpeta en donde se Instala: C:Archivos de ProgramaMicrosoft SQL ServerMSSQLData y ahi buscas dos archivos uno se llama: nombre_de_tu_base_de_datos_Log y el otro nombre_de_tu_base_de_datos_Data, esa es la base de datos y te lo mando corregido y comentado para q entiendas lo que hice. Suerte! |
Respuesta: | Mauricio |
no se si te entiendo tu pregunta pero me parece q al sacar datos de 2 tablas estan tienen q estar relacionadas mediante un inner join y tener una tabla en el datatset(si es creado por ti) con todos los campos q quieras mostrar, de no tener una tabla con otdos los campos en el momento de cargar el datatable debes cargar las 2 tablas. |
Respuesta: | Hector Urbina |
No se si esto te sirva pero... o no se si es que lo haces asi... al diseñar un reporte en CR debe hacerlo en base a un dataset lo que debes hacer es agregar un archivo dataset (que al fin y al cabo es un XML) y en base a el diseñarlo, luego cuando llamas al reporte indicarle el datasource con un dataset que se ejecute en tiempo de ejecucion con el mismo nombre de dataset, tablas y columnas, no olvides eso!!!!.
bueno espero te sirva ;) |