Fórum Como fazer busca em Units de um sistema legado? #413189

24/02/2012

0

Preciso fazer um programa, que faça uma busca no banco de dados e traga todas as tabelas(apenas nome) e depois, ele pegue todas as Units de um sistema antigo nosso aqui e frelacione em uma lista e também em planilha cada Unit que faça uso de determinada tabela. Esse sistema antigo é feito em Delphi 5 e o novo programa para listar tudo será desenvolvido em XE.
Pjava

Pjava

Responder

Posts

24/02/2012

Gustavo Bretas

Eita! Automatizado vai ser complicado heim, ainda mais se vc usar DataModule e/ou Procedure no Banco!

Você conhece o NotePad++? Quando eu tenho que fazer alguma pesquisa mais ampla no código (.pas e .dfm) eu uso ele!
Responder

Gostei + 0

24/02/2012

Pjava

Só que no notepad++ eu faria isso manualmente e não é isso que queremos, pois o sistema é gigantesco. A minha maior dúvida é abrir o .PAS. Eu consigo trazer tudo do banco e posso colocar isso tudo em ima lista(TList<String>) e aí sim, pegando item a item e ir abrindo o .PAS e ir comparando se naquele .PAS faz ou não uso daquela tabela e/ou sp. O rpoblema está em correr o .PAS e se é possível também.
Responder

Gostei + 0

24/02/2012

Joel Rodrigues

Você quer buscar todas as units que contenham o nome da tabela em seu conteúdo?
Os arquivos estão em pastas conhecidas?
Responder

Gostei + 0

24/02/2012

Joel Rodrigues

Ah, tem que ser em Delphi?
Segue um pequeno exemplo em C# de como varrer os arquivos de um diretório e verificar se cada arquivo contém um certo texto:

---
foreach(String s in Directory.GetFiles(@C:\Sistemas\Exemplo))
{
FileInfo fi = new FileInfo(s);
if (fi.Extension.ToUpper().Equals(.PAS))
{
if(File.ReadAllText(s).Contains(texto_procurado))
listBox1.Items.Add(s);//path do arquivo que contem o texto

}
}
---
Responder

Gostei + 0

24/02/2012

Gustavo Bretas


Por isso que eu disse que ia ser complicado! rsrs

A questão é que vc vai pesquisar a tabela, tranquilo, mas depois de ver em quais componentes de acesso estão as tabelas que vc quer (Table, Query), vc vai precisar procurar onde é usado esses componentes, entende? Se vc usar DataModule fica mais complicado um pouco pq vc pode ter referenciado os componentes em N telas, se vc user Stored Procedure complica mais um pouco aidna pq terá que fazer uma pesquisa nos script das Stored Procedure e depois procurá-las no componentes, e se usar ClientDataset da pra imaginar né? rsrs

Eu já tive que fazer algo parecido com isso, mas o sistema erá pequeno, e o Notepad++ me ajudou bastante... rsrs!

Mas da pra fazer, qual o banco de dados que vc usa? Já adianto que no SQL Server vc pega o nome das tabelas na tabela SysObjects (Eu acho que compara T no campo XTYPE), no Firebird e umas das RDB$RELATION_FIELDS (Compara com o campo RDB$SYSTEM_FLAG = 0, se não me engano), no Oracle é na tabela DBA_TABLES!

PJava, te desejo sorte!
Responder

Gostei + 0

26/02/2012

Pjava

A idéia minha é o seguinte. Jogo todas as tabelas em uma lista(select * from sysobjects) e depois vou pegando item a item dessa lista e ir lendo .pas a .pas. Isso pretendo fazer com textfile, abro o arquivo .pas e varrendo e ver se acho pelo menos uma única vez o nome da tabela. Achando, saio do arquivo, pois só preciso saber se ele é usado uma vez apenas, gravo em outra lista e vou correr outro .pas até chegar ao último. Chegando no último, pego outro nome de tabela e faço tudo outra vez. Acho que assim eu consigo saber quais os .pas que utilizam aquela tabela e/ou stored procedure.
Responder

Gostei + 0

27/02/2012

Gustavo Bretas

E ae cara, tudo certo?

Sim, a lógica que vc esta pensando funciona, mas eu acrescentaria os .dfm, pq no meu caso eu não costumo atribuir o select às Querys em modo de execução!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar