Compartilhar via


Método DBEngine.CompactDatabase (DAO)

Aplica-se ao: Access 2013 | Access 2016

Copia e compacta um banco de dados fechado e dá a você a opção de alterar sua versão, ordem de agrupamento e criptografia. (Espaços de trabalho do Microsoft Access apenas).

Observação

Ao usar tabelas vinculadas criptografadas para ação e atualizar consultas SQL [como uma instrução SQL UPDATE (CurrentDb.Execute "UPDATE...")], você deverá fornecer a chave de criptografia. Além disso, as tabelas vinculadas têm um limite de 19 de caracteres para a chave de criptografia. Confira a seção tabelas vinculadas criptografadas no final deste tópico.

Sintaxe

expressão . CompactDatabase(SrcName, DstName, DstLocale, Options, password)

expressão Uma expressão que retorna um objeto DBEngine.

Parâmetros

Nome

Necessária/opcional

Tipo de dados

Descrição

SrcName

Obrigatório

String

Identifica um banco de dados existente e fechado. Pode ser o caminho completo e o nome do arquivo, como "C:\db1.mdb". Se o nome do arquivo tiver uma extensão, você deve especificá-lo. Se sua rede oferecer suporte a ele, você também pode especificar um caminho de rede como "\\server1\share1\dir1\db1.mdb".

DstName

Obrigatório

String

o nome de arquivo (e o caminho) do banco de dados compactado que você está criando. Você também pode especificar um caminho de rede. Não é possível usar este argumento para especificar o mesmo arquivo de banco de dados como SrcName.

DstLocale

Opcional

Variant

Uma expressão de cadeia de caracteres que especifica uma ordem de agrupamento para criar DstName, conforme especificado nos comentários.

  • Se você omitir esse argumento, a localidade DstName é igual a SrcName.

  • Você também pode criar uma senha para dstName concatenando a cadeia de caracteres de senha (começando com "; pwd=") com uma constante no argumento DstLocale, assim: dbLangSpanish & "; pwd=NewPassword".

  • Se você quiser usar o mesmo DstLocale que SrcName (o valor padrão), mas especificar uma nova senha, basta inserir uma cadeia de senha para DstLocale: "; pwd=NewPassword"

Opções

Opcional

Variant

Opcional. Uma constante ou combinação de constantes que indica uma ou mais opções, conforme especificado em Comentários. Você pode combinar opções associando as constantes correspondentes.

senha

Opcional

Variant

Uma expressão de cadeia de caracteres com uma chave de criptografia, se o banco de dados é criptografado. A cadeia de caracteres "; pwd=" deve preceder a senha real. Se você incluir uma configuração de senha DstLocale, essa configuração será ignorada.

OBSERVAÇÃO:Esse é um parâmetro preterido e não tem suporte no formato .ACCDB. Para criptografar um arquivo .ACCDB, use a opção de cadeia de caracteres. "pwd =". Use senhas fortes que combinam letras maiúsculas e minúsculas, números e símbolos. As enhas fracas não combinam esses elementos. Senha forte: Y6dh!et5. Senha fraca: Casa27. Use uma senha fraca para que você possa lembrá-la sem precisar escrevê-la.

Comentários

Você pode usar uma das seguintes constantes para o argumento DstLocale a fim de especificar a propriedade CollatingOrder do texto para comparações de cadeias de caracteres.

Constante

Ordem de agrupamento

dbLangGeneral

Inglês, francês, alemão, português, italiano e espanhol moderno

dbLangArabic

Árabe

dbLangChineseSimplified

Chinês simplificado

dbLangChineseTraditional

Chinês tradicional

dbLangCyrillic

Russo

dbLangCzech

Tcheco

dbLangDutch

Holandês

dbLangGreek

Grego

dbLangHebrew

Hebraico

dbLangHungarian

Húngaro

dbLangIcelandic

Islandês

dbLangJapanese

Japonês

dbLangKorean

Coreano

dbLangNordic

Idiomas nórdicos (apenas mecanismo de banco de dados do Microsoft Jet versão 1.0)

dbLangNorwDan

Norueguês e dinamarquês

dbLangPolish

Polonês

dbLangSlovenian

Esloveno

dbLangSpanish

Espanhol tradicional

dbLangSwedFin

Sueco e finlandês

dbLangThai

Tailandês

dbLangTurkish

Turco

Você pode usar uma das seguintes constantes no argumento options para especificar se o banco de dados será criptografado ou descriptografado durante sua compactação.

Observação

As constantes DbEncrypt e dbDecrypt são substituídas e não são suportadas pelos formatos de arquivo .ACCDB.

Constante

Descrição

dbEncrypt

Criptografa o banco de dados durante a compactação.

dbDecrypt

Descriptografe o banco de dados durante a compactação.

Se você omitir uma constante de criptografia ou se incluir o dbDecrypt e o dbEncrypt, o DstName terá a mesma criptografia que o SrcName.

Você pode usar uma das seguintes constantes no argumento options para especificar a versão do formato dos dados para o banco de dados compactado. Essa constante afeta apenas a versão do formato dos dados de DstName e não afeta a versão de objetos definidos pelo Microsoft Access, como formulários e relatórios.

Constante

Descrição

dbVersion10

Cria um banco de dados que usa o formato de arquivo do mecanismo de banco de dados Microsoft Jet versão 1.0 durante a compactação.

dbVersion11

Cria um banco de dados que usa o formato de arquivo do mecanismo de banco de dados Microsoft Jet versão 1.1 durante a compactação.

dbVersion20

Cria um banco de dados que usa o formato de arquivo do mecanismo de banco de dados Microsoft Jet versão 2.0 durante a compactação.

dbVersion30

Cria um banco de dados que usa o formato de arquivo do mecanismo de banco de dados Microsoft Jet versão 3.0 (compatível com a versão 3.5) durante a compactação.

dbVersion40

Cria um banco de dados que usa o formato de arquivo do mecanismo de banco de dados Microsoft Jet versão 4.0 durante a compactação.

dbVersion120

Cria um banco de dados que usa o formato de arquivo da versão 12.0 do mecanismo do banco de dados do Microsoft Access durante a compactação.

É possível especificar apenas uma constante de versão. Se você omitir uma constante de versão, o DstName terá a mesma versão do SrcName. Você pode compactar o DstName apenas para uma versão que seja igual ou posterior ao SrcName.

À medida que você altera dados em um banco de dados, o arquivo do banco de dados pode se fragmentar e usar mais espaço em disco do que o necessário. Periodicamente, você pode usar o método CompactDatabase para compactar seu banco de dados para desfragmentar o arquivo do banco de dados. O banco de dados compactado é geralmente menor e com frequência é executado mais rapidamente. Também é possível alterar a ordem de agrupamento, a criptografia ou a versão do formato de dados enquanto copia ou compacta o banco de dados.

Você deve fechar o SrcName antes de compactá-lo. Em um ambiente multiusuário, outros usuários não podem estar com o SrcName aberto enquanto você o estiver compactando. Se o SrcName não estiver fechado ou disponível para uso exclusivo, ocorrerá um erro.

Como CompactDatabase cria uma cópia do banco de dados, é preciso ter espaço em disco suficiente tanto para o banco de dados original como para o duplicado. A operação de compactação falhará se não houver espaço em disco suficiente disponível. O banco de dados DstName duplicado não precisa estar no mesmo disco que o SrcName. Depois de compactar com sucesso um banco de dados, você pode excluir o arquivo SrcName e renomear o arquivo DstName compactado com o nome do arquivo original.

O método CompactDatabase copia todos os dados e as configurações de permissão de segurança do banco de dados especificado por SrcName para o banco de dados especificado por DstName.

Observação

Como o método CompactDatabase não converte objetos do Microsoft Access, não use CompactDatabase para converter um banco de dados contendo esses objetos.

Tabelas vinculadas criptografadas

Senhas criptografadas dependem do formato do arquivo do banco de dados que você está usando. Se você estiver usando um Access 2003 (.mdb) ou um banco de dados anterior, você terá uma senha para proteger o banco de dados e uma senha separada para criptografar o banco de dados. Para o Access 2007 (.accdb) e bancos de dados (.mdb) posteriores, a única opção é criptografar e proteger o banco de dados com uma senha, pois a opção para fazer duas senhas separadas foi removida.

Observação

Para bancos de dados do Access 2007 (.accdb), a senha é a chave de criptografia

Você pode usar o seguinte exemplo do código VBA para um botão de comando:

    Private Sub Command0_Click()
    
    Dim strSourcePath As String
    Dim strDestPath As String
    
    strSourcePath = "<path>\sourceDb.accdb"
    strDestPath = "<path>\destDb.accdb"
    
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
    
    Set CurrentDatabase = CurrentDb
    Set LinkedTableDef = CurrentDatabase.CreateTableDef 
    ("My Linked Table")
    LinkedTableDef.Connect = "MS Access;pwd=Access";database=" & strDestPath
    LinkedTableDef.RefreshLink
    
    
    MsgBox "Finished"
    
    End Sub 

O exemplo de código a seguir mostra como usar o CompactDatabase com uma senha (chave de criptografia) e vincular a uma tabela no banco de dados compactado. Observe que uma senha deve ser fornecida.

    Private Sub CompactAndLink_Click() 
     
    Dim strSourcePath As String
    Dim strDestPath As String
    Dim strSourceTableName As String
    Dim strDestTableName As String
    Dim tdf As TableDef
     
    strSourcePath = "<path>\<database>.accdb"
    strDestPath = "<path>\<database>.accdb"
    strSourceTableName = "<table name in destination database>"
    strDestTableName = "<linked table name>"
     
    ' Compact source database into new destination database with encrypted password
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
     
    ' Link to one of the tables in the destination database
    ' Password must be provided in the Connect property
     
    Set CurrentDatabase = CurrentDb
    Set tdf = CurrentDatabase.CreateTableDef(strDestTableName)
       
        With tdf
            .Connect = ";pwd=Access" & ";DATABASE=" & strDestPath
            .SourceTableName = strSourceTableName
        End With
        
    CurrentDatabase.TableDefs.Append tdf
     
    MsgBox "Database compacted and encrypted password applied. Link to table also completed."
     
    End Sub