Ir para conteúdo
Fórum Script Brasil
  • 0

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


Livio Neiva

Pergunta

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 para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por Jhonas
Link para o comentário
Compartilhar em outros 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 ?

Editado por ClaudioFS
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...