Olá amigos, esta é minha primeira tentativa de escrever um artigo sobre esta fantástica ferramenta de programação chamada Delphi, sou desenvolvedor de sistemas à 5 anos, recebi gentilmente uma edição da revista Active Delphi para minha avaliação, cedida pela equipe da ActiveDelphi, eu não tinha idéia que esta revista pudesse ser tão clara e objetiva, fiquei impressionado...
A edição 003 possui o brilhante
artigo "Alterando estrutura de tabelas paradox via código" na página 6, escrito
pelo colega Ivan José de Mecenas Silva.
Este artigo ensina como construir uma
aplicação que pode ser utilizada por usuários, a fim dos mesmos selecionarem
tabelas com estruturas diferentes e igualá-las.
Acredito que muitos desenvolvedores
distribuem suas aplicações à distância para seus clientes e precisam atualizar
seus programas, inclusive as tabelas.
No final do artigo apresentado, a
autor expõe suas considerações finais explicando que:
"Os desenvolvedores poderão adaptar o
código às suas próprias necessidades, preferencialmente inserindo-os em seus
aplicativos, com objetivo de que as alterações na estrutura da base de dados
possam ser feitas sem que o usuário precise atuar diretamente no processo."
Eu distribuo minhas aplicações via
internet para meus clientes e por isso preciso efetuar as atualizações das
estruturas dos bancos de dados sem que o usuário precise atuar diretamente no
processo, resolvi então alterar o código do que foi ensinado a fim de criar uma
Unit padrão e uma rotina que pode ser utilizada por qualquer aplicação que use
banco de dados Paradox.
A Unit criada chama-se Estruturas.pas,
pode ser adicionada ao seu projeto e declarada na cláusula Uses do DataModule da
aplicação.
Clique aqui para fazer o download.
Insira na Unit do DataModule a função
abaixo:
Function TDM.AliasToPath(Alias:
String): String;
Var
Desc : dbDesc;
szAlias : Array[0..255] Of
Char;
Begin
StrPCopy(szAlias,Alias);
DbiGetDatabaseDesc(szAlias,@Desc);
Result := StrPas(Desc.szPhyName);
End;
A função acima tem como objetivo
retornar o path do Alias usado pela aplicação.
Em seguida, o evento Create do
DataModule deverá ficar assim:
procedure TDataModule1.DataModuleCreate(Sender:
TObject);
Var ArquivoEncontrado: Integer;
begin
For ArquivoEncontrado := 0 To
DataModule1.ComponentCount - 1 Do
If (DataModule1.Components[ArquivoEncontrado]
Is TTable) Then
If FileExists(ExtractFilePath(Application.ExeName)
+ (DataModule1.Components[ArquivoEncontrado] As TTable).TableName) Then
Begin
EstruturaDesejada(ExtractFilePath(Application.ExeName) + (DataModule1.Components[ArquivoEncontrado]
As TTable).TableName);
EstruturaAtual(AliasToPath('NomeDoAlias') + '\' + (DataModule1.Components[ArquivoEncontrado]
As TTable).TableName);
VerificaEstruturas;
IgualaEstruturas;
DeleteFile(ExtractFilePath(Application.ExeName) + ExtractFileName((DataModule1.Components[ArquivoEncontrado]
As TTable).TableName));
End;
End;
Feito isso, basta reestruturar as
tabelas pelo Database Desktop e distribuir as mesmas, vazias e com suas novas
estruturas no mesmo diretório onde se encontra o arquivo executável de sua
aplicação.
E importante dizer que o Alias não
poderá estar sendo apontado para este mesmo diretório, ou seja, as tabelas a
serem atualizadas tem que estar em um diretório qualquer diferente de onde esta
o arquivo executável de sua aplicação.
Automaticamente, como num passe de
mágica todas as tabelas serão reestruturas e atualizadas.
Sou André Luiz de Souza Fernandes,
Técnico em Processamento de Dados, dono do site GSoftWares.COM e responsável
pelo projeto OpenSource de Portais PHP CPGNUKE no Brasil.
Contato
suporte@gsoftwares.com
Um forte abraço a todos!
PS: Eu escrevi tudo muito rápido,
qualquer erro, por favor me avisem.
|