Migre do BDE, AnyDAC e DBX para FireDac com um duplo clique!

O que fazer quando não tem nada pra fazer? Bem, eu costumo ler o help do Delphi e entre um navegada e outra, entre analisar um fonte da VCL e outro da FMX às vezes sentimos cheiro de coisa boa, outras vezes de coisa muito boa e não raro coisas excelentes. Eu tenho uma convicção, o Delphi tem como premissa facilitar a nossa vida, sempre, então quando penso que terei que migrar na unha meu projeto DBX ou BDE para FireDac eu penso “Meu Deus, não pode ser, o Delphi não faria isso comigo”. Partindo dessa premissa fui ao Help e imaginem o que achei, o ReFind.exe. Você está se perguntando: “Que diabos é o ReFind.exe”.

O reFind.exe é um utilitários que permite localizar e substituir textos utilizando expressões regulares com base em instruções que passadas em um determinada sintaxe. com isso é possível realizar a migração dos códigos fontes (.pas e .dfm) alterando as classes, propriedades e métodos da BDE, ADO ou DBX para o FireDAC. Funciona assim, ele é um utilitário de linha de comando onde você passa para ele o os arquivos que deseja “vasculhar” e um arquivo TXT com as instruções do que ele deve fazer, entre elas remover uses desnecessárias, adicionar novas, trocar classes, métodos, etc. Como disse acima, o Delphi sempre facilita a nossa vida e já trás um arquivos prontinho com as instruções para migrar nossos projetos. A sintaxe é muito simples:

reFind.exe *.pas *.dfm *.fmx /X:FireDAC_Migrate_DBX.txt

O aplicativo reFind.exe fica na pasta Bin da instaçao do Delphi e como esse diretório está no Path do Windows de qualquer lugar que você invocar o comando irá funcionar. Mas o que de fato está ocorrendo na linha acima? Estamos falando para o reFind.exe percorrer todos os arquivos .pas .dfm e .fmx do diretório de onde o comado está sendo executado e fazer tudo o que está determinado no arquivo FireDAC_Migrate_DBX.txt. É simplesmente um Find Replace nos arquivos. Veja um dos trechos das instruções do TXT.

#unuse Data.SqlExpr
#unuse Data.DBXCommon
(...)
#migrate Data.DbxDb2 -> FireDAC.Phys.DB2
#migrate Data.DbxFirebird -> FireDAC.Phys.FB
(...)
#migrate TDBXIsolation -> TFDTxIsolation, FireDAC.Stan.Option
#migrate TDBXIsolations.ReadCommitted -> xiReadCommitted, FireDAC.Stan.Option
(...)
#remove AutoClone
#remove LocaleCode
(...)
#migrate TSQLConnecion:CloseDataSets -> ReleaseClients(rmDisconnect)
#migrate TSQLConnecion:Execute -> ExecSQL

Note que tudo que precisa ser feito para alterar classes, métodos, propriedades, eventos, etc será feito pelo reFind. Ele irá remover uses antigas do DBExpress, alterar as units necessárias para invocar as classes FireDAC, trocar enumerados, remover métodos do DBX que não existem no FD e muito mais, tudo isso num simples comando. Ao durante a execução o reFind gerar um arquivo .bak para cada um dos arquivos que ele alterar caso você precisa verificar algo ou voltar a versão anterior.

migrado dbexpress para firedac

Para mais informações de como usar o reFind.exe e o que pode ser feito com ele, consulte a documentação clicando aqui!

Como usar na prática

O ideal é criar um arquivo .bat com os comandos necessários para que você possa executar o reFind em qualquer diretório que desejar. Um exemplo de .bat é o que já vem junto com o Delphi, isso mesmo, tem um .bat prontinho para você fazer as alterações necessárias e usar em seus projetos. Segue abaixo a sugestão da pasta Samples:

cd Forms
md FireDAC_MeetingOrg
del /Q FireDAC_MeetingOrg\*.*
copy *.* FireDAC_MeetingOrg\*.*
reFind.exe FireDAC_MeetingOrg\*.pas FireDAC_MeetingOrg\*.dfm FireDAC_MeetingOrg\*.fmx /X:..\..\FireDAC_Migrate_DBX.txt

Veja no no arquivo que está no Samples ele abre uma pasta FORM, criar um subdiretório e move todo o projeto para dentro deste novo diretório, depois migra os arquivos copiados não os originais. Eu fiz uma cópia deste arquivo .bat e o alterei para atender as minhas necessidades, retirei o comando cd Forms pois eu vou sempre executar o .bat dentro da pasta do meu projeto, eu mantive a ideia de criar uma pasta para copia dos arquivos mas com um novo mais sugestivo e padrão 🙂 e por fim a linha do que chama o arquivo com as instruções de migração eu fixei em um caminho padrão de onde não vou movê-lo, assim de qualquer lugar que eu chamar o .bat ele irá funcionar, basta colocar o .bat no mesmo diretório dos arquivos que eu quero migrar e executar. Simples Assim! Vejam como ficou meu arquivo .bat

md Arquivos_Migrados
del /Q Arquivos_Migrados\*.*
copy *.* Arquivos_Migrados\*.*
reFind.exe Arquivos_Migrados\*.pas Arquivos_Migrados\*.dfm Arquivos_Migrados\*.fmx /X:C:\NaoDeletarJamais\FireDAC_Migrate_DBX.txt

Bem, agora é com vocês, usem a criatividade. Vocês poderia por exemplo fazer um busca recursiva e copiar os arquivos para a pasta de migração com a mesma estrutura de diretórios original. Poderiam também fazer um loop nos diretórios e migrar não do os arquivos da pasta raiz mas também dos subdiretórios, enfim, o céu é o limite. E já que temos acesso as regra do reFind e os arquivos do DBE, DBX e AnyDAC você pode estudar as classes o IB e criar seu arquivos de migração, ou ZEOS ou qualquer outro middleware de acesso a dados.

Mãos a obra e até o próximo post.