Fórum Compactar e Corrigir - BD Access #266052
19/01/2005
0
Preciso de algo que execute uma função do BD Access. Abrindo o Access a função que preciso está em: ´Ferramentas -> Utilitários de banco de dados -> Compactar e corrigir banco de dados...´
Segundo o que pesquisei aqui mesmo no forum, existe uma bilbioteca chamada [b:74efa7059b]kaAdo[/b:74efa7059b] que, entre seus recursos, tem a capacidade de executar esta função que citei acima, no BD Access. Porém, fui tentar instalar e dá erro na diretiva ´{$ALIGN 8}´ do pacote. Além disso, na cláusula [b:74efa7059b]requires[/b:74efa7059b], acusa a falta de ´vcl´. Tá meio esquisito....
Alguém sabe como conseguir executar no Delphi esta função do Access que estou precisando?
E/OU
Alguém sabe como corrigir o problema da instalação desta biblioteca?
Valeu
wbb
Wbb
Curtir tópico
+ 0Posts
19/01/2005
Massuda
Algumas dicas básicas para instalar o pacote:[list:ae4e05ce1b][*:ae4e05ce1b]Você baixou a versão mais recente do KAAdo do [url=http://kadao.dir.bg/]site ´oficial´[/url] (http://kadao.dir.bg/)?[*:ae4e05ce1b]Quando descompactar, preserve a estrutura de diretórios/pastas contida no arquivo .ZIP (depende do seu zipador/deszipador)[*:ae4e05ce1b]Na hora de instalar, você deve abrir o arquivo KAAdo.dpk existente no subdiretório correspondente a sua versão de Delphi (exemplo: se você está usando o Delphi5, use o subdiretório D5).[/list:u:ae4e05ce1b]
Gostei + 0
19/01/2005
Wbb
Tem também algumas funções aqui mesmo no forum, pesquisando pela palavra ´corrigir´, que indicam como fazer a compactação via código. Porém, usando Access 2000 com instalado Jet4 não estão funcionando estas funções.
wbb
Gostei + 0
21/01/2005
Wbb
Se alguém tiver alguma dica ou exemplo eu agradeço.
wbb
Gostei + 0
21/01/2005
Aroldo Zanela
Encontrei esta dica do Brian Bushay (TeamB)
[quote:34f5eab9a5=´Brian Bushay (TeamB)´]You need to import the JRO type library to use the following code
Here´s a procedure that works for me. You have to import the JRO type
library to compact an Access database.[/quote:34f5eab9a5]
procedure TMainForm.CompactDataBaseMenuClick(Sender: TObject);
var JROJetEngine: TJROJetEngine;
strTempDBPath,
strSource,
strDest,
strJetVersion: string;
iLength: integer;
begin
if strGlobalAccessVersion = ´2000´ then
strJetVersion := ´5´ { Access 2000}
else if strGlobalAccessVersion = ´97´ then
strJetVersion := ´4´; {Jet 3.x, Access 97}
strTempDBPath := ExtractFilePath(strGlobalDBPath) + ´TEMP.MDB´;
strSource := ´Data Source=´ + strGlobalDBPath + ´;Jet OLEDB:Engine Type=´
+ strJetVersion;
strDest := ´Data Source=´ + strTempDBPath + ´;Jet OLEDB:Engine Type=´ +
strJetVersion;
try
try
Screen.Cursor := crHourGlass;
if not dbModule.CloseAll then
begin
MessageDlg(´Error closing some datasets, unable to compact´,
mtError, [mbOk], 0);
exit;
end
else
dbModule.ADOConnection1.Close;
Application.ProcessMessages;
JROJetEngine := TJROJetEngine.Create(Application);
JROJetEngine.CompactDatabase(strSource, strDest);
SysUtils.DeleteFile(strGlobalDBPath);
RenameFile(strTempDBPath, strGlobalDBPath);
MessageDlg(´The database has been packed´, mtInformation, [mbOk], 0);
except
on E: Exception do
MessageDlg(´Error packing database: ´ + E.Message, mtError, [mbOk],
0);
end;
finally
JROJetEngine.Free;
dbModule.ADOConnection1.Open;
Screen.Cursor := crDefault;
end;
end;Gostei + 0
21/01/2005
Wbb
Eu praticamente acabei de conseguir terminar a parte do meu programa que faz essa compactação que eu precisava. Tirei a solução pesquisando aqui no forum mesmo. Fiz algumas modificações, mas a coisa é a mesma.
Obrigado pela ajuda.
wbb
Segue abaixo a solução que utilizei:
[i:927f7e1969]Este programa tem como objetivo fazer com que um arquivo de banco de dados do Access seja compactado via código Delphi, tal como acontece se formos ao menu ´Ferramentas - Utilitários de banco de dados - Compactar e corrigir banco de dados´ do próprio Access.
Vá em Projet / Import Type Library e escolha a opção Microsoft Jet and Replication Objects 2.6 Library... Clique no botão Install. Será aberta uma janela de diálogo pedindo para indicar o arquivo DPK para onde será apontado os novos componentes desta biblioteca. Este DPK se encontra
normalmente em ´C:\Arquivos de programas\Borland\Delphi5\lib´. Aponte e pressione OK para instalar esta biblioteca de componentes Activex. Na paleta Activex aparecerão 2 novos componentes.
Abra um novo projeto e insira um componente ADOConnection, um JetEngine e um botão. Em seguida cole o código abaixo:[/i:927f7e1969]
procedure TForm1.Button1Click(Sender: TObject); var BD_Old, BD_New: WideString; Path_Nome_BD_Old: WideString; Path_Nome_BD_New: WideString; begin Path_Nome_BD_Old := ´C:\Temp\BDAccess.mdb´; Path_Nome_BD_New := ´C:\Temp\BDAccess_XXX.mdb´; BD_Old := ´Provider=Microsoft.Jet.OLEDB.4.0;´ + ´Data Source=´ + Path_Nome_BD_Old; BD_New := ´Provider=Microsoft.Jet.OLEDB.4.0;´ + ´Data Source=´ + Path_Nome_BD_New; ADOConnection1.Connected := False; JetEngine1.CompactDatabase(BD_Old, BD_New); DeleteFile(Path_Nome_BD_Old); RenameFile(Path_Nome_BD_New, Path_Nome_BD_Old); ADOConnection1.Connected := True; end;
Gostei + 0
28/01/2005
Pistesil
Teria como usar uma progressbar para indicar esse processo?
Desde ja agradeço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)