none
Cargar varias Data_Tables en Crystal Report RRS feed

  • Pregunta

  • Buenas tardes,

    tengo un informe Crystal Report con un DataSet con dos tablas: Personal y Eventos. Dichas tablas están relacionadas por el campo ID_Empleado, es decir, cada empleado puede haber hecho varios eventos, y quiero sacar un informe agrupándolo por empleado.

    El problema es que en cuanto creo el nombre de grupo para agrupar los datos e intento meter datos de la otra tabla, me sale el informe en blanco. Mi primera duda es si en el DataSet de Crystal tienen que estar relacionadas las tablas y con qué tipo de relación (la que me sale por defecto lleva la flecha de la tabla Eventos a Personal y es del tipo "combinación interna" y "no forzar".

    El segundo problema, y más importante, es cuando cargo las DataTables desde el código, ya que si cargo una no puedo cargar la otra. Pego el código a continuación:

        Private Sub Parametros_Crystal()
            Dim oCnn As New OleDbConnection        ' Objeto de conexion a la base de datos
            Dim da_Datos As New OleDbDataAdapter   ' Objeto Adaptador para leer datos de la Base de datos

            Dim dt_Eventos As New DataTable        ' Datatable para recibir los datos de la base de datos
            Dim cmdExec1 As New OleDbCommand       ' Objeto comando para ejecutar sentencias sql
            Dim sbQuery1 As New StringBuilder      ' StringBuilder para armar cadenas

            Dim dt_Personal As New DataTable       ' Datatable para recibir los datos de la base de datos
            Dim cmdExec2 As New OleDbCommand       ' Objeto comando para ejecutar sentencias sql
            Dim sbQuery2 As New StringBuilder      ' StringBuilder para armar cadenas



            Try
                oCnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Ruta_Fichero
                oCnn.Open()


                ' EVENTOS ***************
                cmdExec1 = oCnn.CreateCommand
                cmdExec1.Connection = oCnn

                sbQuery1.Append("SELECT ID_Evento  ")
                sbQuery1.Append("      ,Fecha  ")
                sbQuery1.Append("      ,Dia_Semana  ")
                sbQuery1.Append("      ,ID_Empleado  ")
                sbQuery1.Append("      ,Hora_Inicio  ")
                sbQuery1.Append("      ,Hora_Fin  ")
                sbQuery1.Append("      ,Tipo_Evento  ")
                sbQuery1.Append("      ,Horas  ")
                sbQuery1.Append("      ,Minutos  ")
                sbQuery1.Append("      ,Total_Minutos  ")
                sbQuery1.Append("      ,Error  ")
                sbQuery1.Append("            FROM Eventos   ")

                cmdExec1.CommandText = sbQuery1.ToString

                da_Datos = New OleDbDataAdapter(cmdExec1)
                da_Datos.Fill(dt_Eventos)


                ' PERSONAL ***************
                cmdExec2 = oCnn.CreateCommand
                cmdExec2.Connection = oCnn

                sbQuery2.Append("SELECT ID_Empleado  ")
                sbQuery2.Append("      ,Nombre  ")
                sbQuery2.Append("      ,Apellidos  ")
                sbQuery2.Append("      ,Horas_Jornada  ")
                sbQuery2.Append("      ,Minutos_Jornada  ")
                sbQuery2.Append("            FROM Personal   ")

                cmdExec2.CommandText = sbQuery2.ToString

                da_Datos = New OleDbDataAdapter(cmdExec2)
                da_Datos.Fill(dt_Personal)



                Dim CrReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument
                ' Asigno el reporte
                CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument()



                ' Elimina el bin\Debug si es necesario
                Dim Ruta_Reporte As String
                Ruta_Reporte = System.IO.Directory.GetCurrentDirectory.ToString
                If Microsoft.VisualBasic.Right(Ruta_Reporte, 9) = "bin\Debug" Then
                    Ruta_Reporte = Microsoft.VisualBasic.Left(Ruta_Reporte, Len(Ruta_Reporte) - 9)
                End If
                Ruta_Reporte = Ruta_Reporte & "\cr_Informe.rpt"



                CrReport.Load(Ruta_Reporte)

               CrReport.SetDataSource(dt_Eventos)

                'CrReport.SetDataSource(dt_Personal)           Si cargo este datatable no puedo cargar el otro
                '                                                                       este es el problema !!!!!!!!!!!!!!!!!!!!!!


                crv_Informe.ReportSource = CrReport


            Catch ex As Exception
                MessageBox.Show(ex.ToString, "Mostrando Informe")
            End Try

        End Sub

    Gracias por adelantado por vuestra ayuda

    lunes, 25 de agosto de 2014 16:38