¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como melhorar o desempenho de uma aplicação com bancos de dados Oracle e Microsoft Access

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

Olá,

Desenvolvi um aplicativo usando CR4E e ele funciona, mas durante a execução o aplicativo é mais lento do que o antigo aplicativo desenvolvido com componentes activex. Estamos usando dois bancos de dados diferentes, Oracle 11G e Microsoft Access.

Testei o tempo de exportação. Com o Oracle, o aplicativo exporta o arquivo em 6/7 segundos, mas com o Access exporta o arquivo em cerca de 18/20 segundos. Tentei modificar alguns scripts do meu código, mas nada mudou. Você poderia me dar alguma sugestão para melhorar o desempenho?

Esta é a parte do meu código que abre o relatório, estabelece a conexão de dados e onde o aplicativo fica mais lento.

Espero que você possa me ajudar.

Obrigado antecipadamente.

           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...

Não há muito que você possa fazer sobre o tempo que leva para se conectar ao banco de dados, embora você possa tentar desativar "Verificar na Primeira Atualização" nas Opções do Relatório para ver se isso ajuda.

Vejo algumas coisas aqui que também podem estar afetando a velocidade do relatório.

1. Certifique-se de NÃO ter a opção "Salvar dados com o relatório" ativada ao salvar o arquivo .rpt. Quando ativada, o relatório leva mais tempo para carregar e o Crystal precisa de tempo para limpar os dados antes de atualizar o relatório.

2. Está usando múltiplos comandos no seu relatório? Se sim, está os vinculando entre si? Isso fará com que o relatório leve mais tempo para ser executado pelas mesmas razões que conectar a múltiplos bancos de dados: o Crystal precisa fazer as junções na memória. Para obter mais informações sobre como trabalhar com comandos, consulte o artigo do blog este .

-Dell

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

Obrigado pela sua resposta. Desculpe se não fui muito claro... não combino dados de múltiplas conexões em um único relatório, mas sim minha aplicação lê o nome do banco de dados e escolhe o tipo de conexões de dados a serem abertas. No meu caso, se o arquivo do relatório contém um nome de banco de dados do Access, ao exportar em pdf, apenas obterá dados do banco de dados do Access.

Ontem, revisei o registro da aplicação e descobri que a aplicação para por cerca de 7 segundos ao se conectar ao banco de dados... Dê uma olhada no 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

Alguma sugestão a respeito?

Muito obrigado antecipadamente por qualquer ajuda.

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

Ao combinar dados de múltiplas conexões de dados em um único relatório, o Crystal não consegue unir os dados de ambas durante a consulta. Em vez disso, ele extrai TODOS os dados de ambas as fontes na memória e depois os une e filtra lá. É por isso que o Crystal demora mais.

Sei que existem formas no Oracle de criar links de banco de dados para bancos de dados externos. Se for possível criar um link de banco de dados para o Access, faria isso e então criaria uma visualização ou visualizações dos dados do Access e usaria apenas o Oracle como fonte de dados para o relatório.

-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?