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.
|
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