¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo mejorar el rendimiento de una aplicación con bases de datos Oracle y Microsoft Access

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 24 Vistas
0
Cargando...

Hola,

Desarrollé una aplicación utilizando CR4E y funciona, pero en tiempo de ejecución la aplicación es más lenta que la antigua aplicación desarrollada con componentes activex. Estamos utilizando dos bases de datos diferentes, Oracle 11G y Microsoft Access.

He probado el tiempo de exportación. Con Oracle, la aplicación exporta el archivo en 6/7 segundos, pero con Access exporta el archivo en unos 18/20 segundos. Intenté modificar algunos scripts de mi código pero no ha sucedido nada más. ¿Puedes darme alguna sugerencia para mejorar el rendimiento?

Esta es la parte de mi código que abre el informe y establece la conexión de datos y donde la aplicación se ralentiza.

Espero que puedas ayudarme.

Gracias de antemano.

           ReportClientDocument rcd=new ReportClientDocument();
            rcd.open(name_Rpt, OpenReportOptions._discardSavedData);

             ReadReport readReport=new ReadReport();
             readReport.dbConnection(dbConn, dbUser, dbPass,dbodbc,tableName,id_Request,rcd);

             end = System.currentTimeMillis();
             time=(end-start)/1000; 
             System.out.println("\n time to open connection and set data "+time + " sec");
public void dbConnection(String dbConn,String dbUser, String dbPass,Jdbc_db dbodbc,String tableName,long id_Request,ReportClientDocument rcd) throws Exception  
    {
        String serverName = null;
        
        
    try{
           
            for(String s:rcd.getDatabaseController().getServerNames()) 
               {
                  // System.out.println(" ServerName "+s);
                   serverName=s;
               }
            
        
            if(serverName.contains("DBACCESS_Name")) 
               { 
                 dbAccess(dbodbc,tableName,id_Request,rcd);
               }
            
            else 
               {
                dbOracle(dbConn,dbUser,dbPass,dbodbc,tableName,id_Request,rcd);
               }
        } 
        catch (ReportSDKException e) 
        {
            Utility.updateTableCmd(String.valueOf(e    
            
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Cargando...

No hay mucho que puedas hacer sobre el tiempo que tarda en conectarse a la base de datos, aunque podrías intentar desactivar "Verify on First Refresh" en las Opciones del Informe para ver si eso ayuda.

Veo un par de cosas aquí que también podrían estar afectando la velocidad del informe.

1. Asegúrate de NO tener activada la opción "Guardar datos con el informe" al guardar el archivo .rpt. Cuando está activada, el informe tarda más en cargarse y Crystal tiene que tomar tiempo para purgar los datos antes de actualizar el informe.

2. ¿Estás utilizando múltiples comandos en tu informe? En caso afirmativo, ¿los estás vinculando entre sí? Eso hará que el informe tarde más en ejecutarse por las mismas razones que conectar a múltiples bases de datos: Crystal tiene que hacer las uniones en memoria. Para obtener más información sobre cómo trabajar con comandos, consulta el artículo de blog este .

-Dell

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias por tu respuesta. Disculpa si no fui muy claro... no combino datos de múltiples conexiones en un solo informe, sino que mi aplicación lee el nombre de la base de datos y elige el tipo de conexiones de datos a abrir. En mi caso, si el archivo del informe contiene un nombre de base de datos de Access, al exportar en pdf, obtendrá datos solo de la base de datos de Access.

Ayer revisé el registro de la aplicación y descubrí que la aplicación se detiene durante unos 7 segundos al conectarse con la base de datos... Echa un vistazo al registro:

2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager command SETUP: NotUndoableCommand
2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager command PERFORM: NotUndoableCommand
2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager -- command is NOT UNDOABLE -> purge undo stack
2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager --- Purging command SetReportDateCommand
2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager --- Purging command SetReportDateCommand
2019-03-04 11:46:11 DEBUG com.crystaldecisions.reports.common.commandmanager --- Purging command SetSummaryInfoCommand
2019-03-04 11:46:11 DEBUG com.healthmarketscience.jackcess.impl.DatabaseImpl Finished reading system catalog. Tables: [DB Access Table] (Db=DbName.mdb)
2019-03-04 11:46:18 INFO com.businessobjects.reports.sdk.JRCCommunicationAdapter received request: fetchSubreportNames
2019-03-04 11:46:18 DEBUG com.crystaldecisions.reports.common.commandmanager command SETUP: NotUndoableCommand
2019-03-04 11:46:18 DEBUG com.crystaldecisions.reports.common.commandmanager command PERFORM: NotUndoableCommand
2019-03-04 11:46:18 DEBUG com.crystaldecisions.reports.common.commandmanager -- command is NOT UNDOABLE -> purge undo stack
2019-03-04 11:46:18 INFO com.businessobjects.reports.sdk.JRCCommunicationAdapter received request: addTableRequest

¿Alguna sugerencia al respecto?

Muchas gracias de antemano por cualquier ayuda.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Al combinar datos de múltiples conexiones de datos en un solo informe, Crystal no puede unir los datos de ambas durante la consulta. En su lugar, extrae TODOS los datos de ambas fuentes en la memoria y luego los une y filtra allí. Por eso tarda más en Crystal.

Sé que hay formas en Oracle de crear enlaces de base de datos a bases de datos externas. Si es posible crear un enlace de base de datos a Access, haría eso y luego crearía una vista o vistas de los datos de Access y solo usaría Oracle como fuente de datos para el informe.

-Dell

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?