Reporte lento para cargar

Quiero comentar que me ocurre un caso muy particular con un reporte, pues este muy lento para cargar, el reporte recibe la información de una consulta la cual tiene más de 140 campos, esta consulta extrae la información de 2 tablas. Se trabaja actualmente con crystal report 11 y el reporte tiene una plantilla la cual pesa más o menos 109k, el problem al parecer no es la plantilla pues ya la quite y ejecute el reporte pero demora los mismos 30 seg. Hice un experimento el cual consistía en volverlo hacer y mirar a ver que ocurría y resulto que cuando iba a extraer en el generador de reportes las consultas que quería mostrar en el reporte, estas demoraban mucho. Creo que puede ser la estructura de la consulta, sin embargo no estoy muy segura. Antes de intentar hacer de nuevo el reporte cambie las conexiones a Ado para acelerar el proceso de conexión a ver si podía ser eso, pero no. Pues no se si cambiar el generador de reportes seria buena idea o cambiar la version. El lenguaje de programación es vb6 y access 2000
Necesito una propuesta, posible solución

2 respuestas

Respuesta
1
¿Por qué trabajas con Access 2000 y no SQL?, las conexiones y consultas a SQL son vía código (es un poco tedioso) pero en contraparte la velocidad de respuesta es alta, quizás te sirva eso, avisame para continuar ayudándote
Hola experto quiero comentarte que la verdad la verdad es que así es desde siempre
La idea es migrarla pero aun no se ha hecho debido a que se están haciendo modificaciones en la estructura de la misma.
Tu podrías enviarme el proyecto vb y la base de datos
Respuesta

les dejo mi solución...

 'Resulta que al utilizar un generador de reportes, cuando la base de datos crese, al generador le cuesta preparar los datos y eso se ve reflejado en un consumo de tiempo muy considerable.
        'Debido a que el generador de reportes esta vinculado a un DataSet, el cual es llenado con los datos de toda la base de datos, la solucion que se me ocurrio, fue generer un DataAdapter para
        'cada tabla involucrada en la generacion del informe, los cuales se generan filtrando solo los datos que se necesitan para el informe. De esta manera, el generador de reportes no se ve afetado
        'por el tamaño de la base de datos.
        Try
            'Se Genera una coneccion con la base de datos y se crean los OleDbDataAdapter necesarios para seleccinar los datos deseados para el informe y asi redimensionar
            'los origenes de datos que utilizara el generador de reportes.
            'Cadenas de coneccion y consulas.
            Dim CadenaConeccion As New String("Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0; Data Source=" & My.Computer.FileSystem.CurrentDirectory & "\BDHornos.sdf")
            Dim CadenaConsulta As String
            'Se establece la coneccion.
            Dim ConeccionBDH As New OleDb.OleDbConnection(CadenaConeccion)
            'Se crean los DataAdapter.
            Dim DataAdapter_DatosEmpresaGeneradoraTratamientos, DataAdapter_DatosTratamientos, DataAdapter_RegistrosTratamientos As New OleDb.OleDbDataAdapter
            'Se realizan las consultas a las tablas para llenar los DataAdapter.
            CadenaConsulta = New String("SELECT * FROM DatosEmpresaGeneradoraTratamientos")
            DataAdapter_DatosEmpresaGeneradoraTratamientos.SelectCommand = New OleDb.OleDbCommand(CadenaConsulta, ConeccionBDH)
            CadenaConsulta = New String("SELECT * FROM DatosTratamientos WHERE NumeroTratamiento = '" + CStr(N_R) + "'
                                                                         AND FechaHoraTratamiento = '" + CDate(FechaHoraTratamiento).ToString("MM-dd-yyyy HH:mm:ss") + "'")
            DataAdapter_DatosTratamientos.SelectCommand = New OleDb.OleDbCommand(CadenaConsulta, ConeccionBDH)
            CadenaConsulta = New String("SELECT * FROM RegistrosTratamientos WHERE NumeroTratamiento = '" + CStr(N_R) + "' 
                                                                             AND FechaHoraTratamiento
                                                                             BETWEEN '" + CDate(FechaHoraTratamiento).ToString("MM-dd-yyyy HH:mm:ss") + "' 
                                                                             AND '" + CDate(FechaHoraTratamientoHasta).ToString("MM-dd-yyyy HH:mm:ss") + "'")
            DataAdapter_RegistrosTratamientos.SelectCommand = New OleDb.OleDbCommand(CadenaConsulta, ConeccionBDH)
            'Se actualizan los origenes de datos vinculados al generador de reportes, con los origenes de datos seleccionados recien creados.
            DataAdapter_DatosTratamientos. Fill(Me. BDHornosDataSet. DatosTratamientos)
            DataAdapter_RegistrosTratamientos. Fill(Me. BDHornosDataSet. RegistrosTratamientos)
            DataAdapter_DatosEmpresaGeneradoraTratamientos. Fill(Me. BDHornosDataSet. DatosEmpresaGeneradoraTratamientos)
        Catch ex As Exception
            MsgBox("Error al acceder a la base de datos para generar el Informe." + Chr(13) + "Consulte al proveedor del sistema.", vbCritical)
        End Try

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas