Dividir aplicação em Módulos. Como? .exe, dll ou packages.

Delphi

24/05/2005

Olá Amigos.
Na aplicação que trabalho ao pedir para visualizar os relatórios isso acaba travando o sistema, devido a grande quantidade de páginas nos relatórios. Por exemplo 200 páginas e até mais dependendo do usuário.

Nos relatórios não é possível mexer ou alterar por que eles controlam as ligações de todos os ramais de uma empresa de médio porte. Por aí dá para ter uma ídeia. E são muitos relatórios e gráficos com filtros diferentes.

Meu chefe pediu para separar os relatórios da aplicação.

A minha dúvida é como posso dividir a aplicação de maneira eficiente.
Qual opção seguir? Outro executável a parte? DLL? ou Packages?
Estou com dúvidas porque é a primeira vez que faço.

Desde já sou grato por vossa colaboração.

mazeu :lol:


Mazeu

Mazeu

Curtidas 0

Melhor post

Yallebr

Yallebr

25/05/2005

Amigo,


Use Thread para fazer as operações que podem ´travar´ a máquina por alguns segundos.


GOSTEI 1

Mais Respostas

Massuda

Massuda

24/05/2005

Esse assunto é frequentemente abordado aqui no fórum. Experimente [url=http://forum.clubedelphi.net/search.php]pesquisar[/url] o fórum pelo termo [b:afbd231932]modularização[/b:afbd231932].

Só um detalhe... embora eu não conheça seu aplicativo, é pouco provável que modularizar o sistema vá resolver o problema na demora para gerar os relatórios. Geralmente a demora está relacionada com a execução das queries necessárias para gerar os dados do relatório. Se a modularização está sendo proposta para sanar esse problema, acho que o caminho não seria esse.


GOSTEI 0
Mazeu

Mazeu

24/05/2005

Obrigado pela resposta.
Talvez eu não tenha me espressado direito.

O problema na verdade não é a demora na geração de relatórios, mesmo por que a quantidade deles é grande.
Na verdade o sistema tem muitas rotinas e tais se comunicam com a porta serial da máquina e isso acontece em miléssimos de segundos. O travamento acontece quando o usuário quer visualizar os relatórios. Então a comunicação com a placa serial é cortada, isso não pode acontecer em hipótese alguma é essencial que o programa trabalhe inimterruptamente. De fato não sabemos qual é a melhor solução para contornar este problema. Se alguém souber uma solução por favor me responda. Só gostaria de um direcionamento para a melhor solução

Grato,

mazeu :lol:


GOSTEI 0
Massuda

Massuda

24/05/2005

Na verdade o sistema tem muitas rotinas e tais se comunicam com a porta serial da máquina e isso acontece em miléssimos de segundos. O travamento acontece quando o usuário quer visualizar os relatórios. Então a comunicação com a placa serial é cortada, isso não pode acontecer em hipótese alguma é essencial que o programa trabalhe inimterruptamente.
Nesse caso, o que você precisam é fazer processamento multithread ou dividir o programa em dois programas distintos (´modularização´).

Normalmente, um aplicativo Delphi possui apenas uma thread de execução. No seu caso, como tudo está nessa thread, enquanto o aplicativo aguarda o relatório ser gerado ele não pode coletar dados da porta serial. O ideal seria criar uma thread só para fazer a coleta de dados da porta serial. Uma boa referência (em inglês) sobre threads em Delphi está [url=http://www.pergolesi.demon.co.uk/prog/threads/ToC.html]neste site[/url].

Se optar por ter dois programas, seria bom fazer um programa que coletasse e armazenasse os dados da porta serial e outro apenas para emitir os relatórios, sem necessidade de utilizar packages, DLLs e outros bichos.

Acho que a solução mais simples (e menos problemática) seria fazer os programas separados.

Independente da solução a ser adotada, espero que vocês estejam executando esse programa com um SO decente (Win NT, 2K ou XP) numa máquina adequada. Dependendo do volume de dados armazenados, o BD também é um gargalo que vale a pena ser investigado.


GOSTEI 0
Mazeu

Mazeu

24/05/2005

Obrigado pela orientação, vou fazer os testes mas acredito que o mais indicado seja mesmo o thread.
Porém se alguém já viveu uma experiência similar gostaria de compartilhar.

Grato a todos, e bom trabalho!

mazeu :lol:


GOSTEI 0
POSTAR