Fórum Compactar e Corrigir DB no Access #204590
06/01/2004
0
Cheuk
Icheuk
Curtir tópico
+ 0Posts
06/01/2004
Erucci
Eu utilizo essa função para Reparar e Compactar um banco de dados Access usando ADO. Se servir....
procedure RepararCompactar;
var
ArquivoMDB: string;
DB: OLEVariant;
Temp: string;
begin
Screen.Cursor := crHourGlass;
try
ArquivoMDB := copy(DataModule.adoconnection1.ConnectionString,
pos(´Data Source=´, DataModule.adoconnection1.ConnectionString)+12,
length(DataModule.adoconnection1.ConnectionString)-(pos(´Data Source=´, DataModule.adoconnection1.ConnectionString)+12));
ArquivoMDB := copy(ArquivoMDB, 1, pos(´;´,ArquivoMDB)-1);
try
// cria o objeto para manipulacao do BD
DataModule.ADOConnection1.Close;
DataModule.ADOConnection1.Connected := False;
DB := CreateOLEObject(´DAO.DBEngine.35´);
// reparar
DB.RepairDataBase(ArquivoMDB);
// compactar
Temp := ExtractFilePath(ArquivoMDB) + ´Temp.mdb´;
DB.CompactDataBase(ArquivoMDB, Temp);
DeleteFile(ArquivoMDB);
RenameFile(Temp, ArquivoMDB);
Application.MessageBox(´Banco de dados reparado e compactado com sucesso.´, ´Aviso´, mb_IconInformation);
except
on E: Exception do Application.MessageBox(PChar(E.message), ´Erro DAO´, mb_IconError);
end;
finally
DataModule.ADOConnection1.Open;
DataModule.ADOConnection1.Connected := True;
Screen.Cursor := crDefault;
end;
end;
Gostei + 0
06/01/2004
Icheuk
Obrigado.
Gostei + 0
08/01/2004
Ilanocf
Copiei sua função e colei em meu sistema, logo abaixo de [b:3698ddd7a6][color=red:3698ddd7a6]{$R *.DFM}[/color:3698ddd7a6][/b:3698ddd7a6], alterando apenas o nome [b:3698ddd7a6]DataModule.adoconnection1[/b:3698ddd7a6] para [b:3698ddd7a6][color=blue:3698ddd7a6]DMDados.CONEXAO[/color:3698ddd7a6][/b:3698ddd7a6]
No evento OnClick do botão Compactar coloquei:
Mas ao clicar neste, deu a seguinte mensagem: [b:3698ddd7a6][color=red:3698ddd7a6]Project Oficios.exe raised exception class EOleException with message ´Não foi possível encontrar o arquivo DASQL.1´´[/color:3698ddd7a6][/b:3698ddd7a6]
Em seguida destaca a linha: [b:3698ddd7a6][color=blue:3698ddd7a6]DB.RepairDataBase(ArquivoMDB);[/color:3698ddd7a6][/b:3698ddd7a6]
Vc saberia me dizer o q fiz de errado?
Grato,
Ilano
Gostei + 0
08/01/2004
Erucci
Acho que não está pegando o caminho correto do arquivo .mdb
Essa função pega o endereço do arquivo .MDB (Ex: c:\dados\dados.mdb) no ADOConnection.ConnectionString e guarda na string ArquivoMDB
depois faz a compactação
Faça um teste, coloque na função antes do //reparar,
ShowMessage(ArquivoMDB);
Se der a mensagem do caminho do arquivo .mdb incorreto..... então tente arrumar nessa parte
ArquivoMDB := copy(DataModule.adoconnection1.ConnectionString,
pos(´Data Source=´, DataModule.adoconnection1.ConnectionString)+12,
length(DataModule.adoconnection1.ConnectionString)-(pos(´Data Source=´, DataModule.adoconnection1.ConnectionString)+12));
ArquivoMDB := copy(ArquivoMDB, 1, pos(´;´,ArquivoMDB)-1);
[]´s
Luís Erucci
Gostei + 0
10/04/2004
Richard Lima
eu fui testar esta funcao e recebi uma mensagem do DAO dizendo ´A classe não está licenciada para uso´.. alguém sabe como resolver?
Gostei + 0
10/04/2004
Spooner
Peguei essa funçãoo que o erucci compartilhou, fui testar e deu erro na linha
DB := CreateOleObject(´DAO.DBEngine.35´);
esta dizento que ´Sequencia de Classe Invalida´
alguem sabe resolver esse problema?
Gostei + 0
10/04/2004
Adilsond
Voce deve adicionar a seguinte linha no registro do windows:
[HKEY_CLASSES_ROOT\Licenses\F4FC596D-DFFE-11CF-9551-00AA00A3DC45]
@=´mbmabptebkjcdlgtjmskjwtsdhjbmkmwtrak´
Gostei + 0
11/04/2004
Richard Lima
Voce deve adicionar a seguinte linha no registro do windows:
[HKEY_CLASSES_ROOT\Licenses\F4FC596D-DFFE-11CF-9551-00AA00A3DC45]
@=´mbmabptebkjcdlgtjmskjwtsdhjbmkmwtrak´[/quote:2efd8a4205]
ok passou.. mas agora deu ´OPERACAO NAO SUPORTADA PARA ESTE TIPO DE OBJETO´ na linha DB.RepairDataBase(ArquivoMDB).. e o caminho para o arquivo tah certinho..
abraço..
Gostei + 0
12/04/2004
Nerdex
vá em Projet / Import Type Library e escolham a opção Microsoft Jet and Replication Objects 2.6 Library... Instale estas esta bibliotece de componentes Activex. Na paleta Activex vcs verão 2 novos componentes:
//Cam é uma string que contém o caminho da minha aplicação.
//CadC.mdb = arquivo original
//C.mdb = arquivo compactado
var Prov: widestring;
begin
Form1.Conect.Connected:=false;
Prov:=´Provider=Microsoft.Jet.OLEDB.4.0;Data Source=´;
Form1.JE.CompactDatabase(Prov+Cam+´CadC.mdb´,Prov+Cam+´C.mdb´);
DeleteFile(Cam+´CadC.mdb´);
RenameFile(Cam+´C.mdb´,Cam+´CadC.mdb´);
OBS: para funcionar vcs devem ter os componente DtSets em Active False e usei DeleteFile / RenameFile, pois ele primeiramente cria um novo arquivo de banco de dados compactado, que não posso pôr o mesmo nome do antigo (ñ aceita rewrite...), então deleto o antigo e renomeio o novo com o nome original...
Abraço
Gostei + 0
12/04/2004
Richard Lima
eu já tinha visto um exemplo desse, até tenho um que funciona.. mas soh falava em compactação e não em reparacao...tanto q soh tem uma funcao q eh a CompactDatabase.. c sabe se alem de compactar esse tb repara?
abraço..
Gostei + 0