Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Como Compactar O Banco De Dados Do Access No Delphi?


Livio Neiva

Question

linhas de comandos!!!

Procedure TFrmMenuPrin.Compactar;

Var

dao : OLEVariant;

Begin

Panel1.Visible := True;

Dm.Conexao.Connected := False;

Try

Panel1.Caption := 'Compactando.Tabela';

Panel1.Repaint;

dao := CreateOleObject('ADO.DBEngine.36');

dao.CompactDataBase(ExtractFileDir(Application.ExeName)+'\Banco.mdb',

ExtractFileDir(Application.ExeName)+'\Banco2.mdb',",0,"); --------------------> ERRO

Panel1.Caption:='Apagando Arquivo Temporário';

Panel1.Repaint;

if FileExists(ExtractFileDir(Application.ExeName)+'\Banco2.mdb')then

DeleteFile(ExtractFileDir (Application.ExeName)+'\Banco.mdb');

Panel1.Caption:='Renomeando Arquivo';

Panel1.Repaint;

if FileExists(ExtractFileDir(Application.ExeName)+'\Banco2.mdb') then

RenameFile(EXtractFileDir(Application.Exename)+'\Banco2.mdb',

ExtractFileDir (Application.ExeName)+'\Banco.mdb');

Panel1.Caption:='Arquivo Banco.mdb Compactado';

Panel1.Repaint;

Except

Panel1.Caption:='Ocorreu um erro durante a Compactação';

end;

Dm.Conexao.ConnectionString := 'provider=Microsoft.jet.OLEDB.4.0;Data Souser='+

ExtractFilePath(Application.ExeName)+'Banco.mdb;Persist Security info=False;';

DM.Conexao.Connected := True;

Panel1.Visible := False;

end;

Menssagem de erro;

[Error] UMenuPrin.pas(149): Undeclared identifier: '\Banco2.mdb'

AGRADEÇO A ATENÇÃO!!!

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Corrigindo o erro da linha de codigo:

dao.CompactDataBase(ExtractFileDir(Application.ExeName)+'\Banco.mdb',
ExtractFileDir(Application.ExeName)+'\Banco2.mdb',",0,"); --------------------> ERRO


dao.CompactDataBase(ExtractFileDir(Application.ExeName)+'\Banco.mdb',
ExtractFileDir(Application.ExeName)+'\Banco2.mdb','',0,'');

Voce colocou aspas duplas ao invés de aspas simples (veja a diferença )

Link to comment
Share on other sites

  • 0
Corrigindo o erro da linha de codigo:

dao.CompactDataBase(ExtractFileDir(Application.ExeName)+'\Banco.mdb',
ExtractFileDir(Application.ExeName)+'\Banco2.mdb',",0,"); --------------------> ERRO


dao.CompactDataBase(ExtractFileDir(Application.ExeName)+'\Banco.mdb',
ExtractFileDir(Application.ExeName)+'\Banco2.mdb','',0,'');

Voce colocou aspas duplas ao invés de aspas simples (veja a diferença )

ok Jhonas, que vacilo;

obrigado pela atenção

problema resolvido

Link to comment
Share on other sites

  • 0

Apoveitando que voce esta mexendo com compactação do banco access vai ai uma outra dica de uma função que compacta e repara o banco access:

Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean; 
const 
         sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; 
var 
         oJetEng   : JetEngine; 
begin 
         sOldMDB := sProvider + 'Data Source=' + sOldMDB; 
         sNewMDB := sProvider + 'Data Source=' + sNewMDB; 

         try 
            oJetEng := CoJetEngine.Create; 
            oJetEng.CompactDatabase(sOldMDB, sNewMDB); 
            oJetEng := Nil; 
            Result  := True; 
         except 
            oJetEng := Nil; 
            Result  := False; 
         end; 
end; 


Exemplo : 

if CompactAndRepair('e:\Old.mdb', 'e:\New.mdb') then 
   ShowMessage('Successo') 
else 
   ShowMessage('Erro…');

Notas importantes:

1 - inclua na clausula uses JRO_TLB .

2 - Não usar ou abrir o banco de dados durante compactar.

3 - se o compilador lhe dá um erro na unidade de JRO_TLB siga estes passos:

a) Usar o Delphi IDE va para Project – Import Type Library.

B) Rolar para abaixo até encontrar “Microsoft Jet and Replication Objects 2.1 Library”.

c) Clique no botão Install.

d) Recompile novamente..

Abdulaziz Jasser

Edited by Jhonas
Link to comment
Share on other sites

  • 0

Jhonas,

Estou com o mesmo problema, preciso compactar o meu banco access

Tentei a primeira solução e dá a mensagem : "Cannot start your application. The Workgroup information file is missing or opened exclusively by another user".

Sendo que :

- Não estava aberto o banco pelo access

- o arquivo de workgroup estava no diretorio do mdb.

Depois de muitas tentativas e alterações, desisti e fui para a segunda solução que parece mais enxuta. Ao executar o codigo, aparece a mensagem NA funçao oJetEng.compactDatabase :

"Coud not find installable ISAM"

- Fiz todos os passos para importar e usar a Library

- Uso windows vista

Poderia me ajudar ?

Edited by ClaudioFS
Link to comment
Share on other sites

  • 0
Tentei a primeira solução e dá a mensagem : "Cannot start your application. The Workgroup information file is missing or opened exclusively by another user".
Mensagem : Não pode iniciar sua aplicação. O arquivo de informação Workgroup está faltando ou abriu exclusivamente para outro usuário ".

Coud not find installable ISAM

Não encontrou a instalação do ISAM

http://support.microsoft.com/kb/269490/pt

http://www.alpes-software.com/realisam/

http://www.easysoft.com/products/data_acce...bc_isam_driver/

Outras fontes de consulta

http://www.ramosdainformatica.com.br/art_r...es01.php?CDA=82

http://www.forumweb.com.br/foruns/index.ph...tabelas-access/

http://www.activedelphi.com.br/print.php?sid=154

http://www.forumweb.com.br/foruns/index.ph...ost&p=54805

http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=257

abraço

Link to comment
Share on other sites

  • 0
Em 2007-9-14 at 14:05, Jhonas disse:

Apoveitando que voce esta mexendo com compactação do banco access vai ai uma outra dica de uma função que compacta e repara o banco access:

 

 

 

Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean; 
const 
         sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; 
var 
         oJetEng   : JetEngine; 
begin 
         sOldMDB := sProvider + 'Data Source=' + sOldMDB; 
         sNewMDB := sProvider + 'Data Source=' + sNewMDB; 

         try 
            oJetEng := CoJetEngine.Create; 
            oJetEng.CompactDatabase(sOldMDB, sNewMDB); 
            oJetEng := Nil; 
            Result  := True; 
         except 
            oJetEng := Nil; 
            Result  := False; 
         end; 
end; 


Exemplo : 

if CompactAndRepair('e:\Old.mdb', 'e:\New.mdb') then 
   ShowMessage('Successo') 
else 
   ShowMessage('Erro…');

 

 

Notas importantes:

1 - inclua na clausula uses JRO_TLB .

2 - Não usar ou abrir o banco de dados durante compactar.

3 - se o compilador lhe dá um erro na unidade de JRO_TLB siga estes passos:

a) Usar o Delphi IDE va para Project – Import Type Library.

B) Rolar para abaixo até encontrar “Microsoft Jet and Replication Objects 2.1 Library”.

c) Clique no botão Install.

d) Recompile novamente..

 

Abdulaziz Jasser

Valeu Jhonas Serviu para mim também.

Sempre ajudando.

Grande abraço.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...