MyTetra Share
Делитесь знаниями!
Метод DBEngine.CompactDatabase (DAO)
12.10.2019
20:38
Текстовые метки: VBA access, Compact, compress, сжатие
Раздел: !Закладки - VBA - Access - Compress

Метод DBEngine.CompactDatabase (DAO)DBEngine.CompactDatabase Method (DAO)

  • ‎24‎.‎10‎.‎2016


В этой статье

  1. Синтаксис
  2. Параметры
  3. Примечания
  4. Зашифрованные связанные таблицы

Область применения: Access 2013 | Access 2016Applies to: Access 2013 | Access 2016

Копирует и сжимает закрытую базу данных, предоставляя возможность изменить ее версию, порядок сортировки и шифрование.Copies and compacts a closed database, and gives you the option of changing its version, collating order, and encryption. (Только для рабочих областей Microsoft Access.)Creates a new TableDef object (Microsoft Access workspaces only).

Примечание

Если используются зашифрованные связанные таблицы для действия, обновления и запросов SQL [например, оператор SQL UPDATE (CurrentDb.Execute "UPDATE...")], необходимо указать ключ шифрования.When using encrypted linked tables for action, update, and SQL queries [such as a SQL UPDATE statement (CurrentDb.Execute "UPDATE...")], you must supply the encryption key. Кроме того, в связанных таблицах установлено ограничение в 19 знаков для ключа шифрования.Also, linked tables have a 19-character limit for the encryption key. См. раздел Зашифрованные связанные таблицы в конце этой статьи.See the Encrypted linked tables section at the end of this topic.

СинтаксисSyntax

выражение .CompactDatabase(SrcName, DstName, DstLocale, Options, password)expression .CompactDatabase(SrcName, DstName, DstLocale, Options, password)

выражение: выражение, возвращающее объект DBEngine.expression An expression that returns a Range object.

ПараметрыParameters


ИмяName

Обязательный/необязательныйRequired/optional

Тип данныхData type

ОписаниеDescription

SrcNameSrcName

ОбязательныйRequired

StringString

Определяет существующую закрытую базу данных.Identifies an existing, closed database. Это может быть полный путь и имя файла, например "C:\db1.mdb".It can be a full path and file name, such as "C:\db1.mdb". Если имя файла содержит расширение, необходимо его указать.If the file name has an extension, you must specify it. Если в сети поддерживается эта возможность, также можно указать сетевой путь, например "\\server1\share1\dir1\db1.mdb"If your network supports it, you can also specify a network path, such as "\\server1\share1\dir1\db1.mdb"

DstNameDstName

ОбязательныйRequired

StringString

Имя файла (и путь) сжатой базы данных, которую вы создаете.the file name (and path) of the compacted database that you're creating. Также можно указать сетевой путь.You can also specify a network path. С помощью этого аргумента нельзя указать тот же файл базы данных, что и в аргументе SrcName.You can't use this argument to specify the same database file as SrcName.

DstLocaleDstLocale

НеобязательныйOptional

VariantVariant

Строковое выражение, указывающее порядок сортировки для создания DstName, как указанно в примечаниях.A string expression that specifies a collating order for creating DstName, as specified in Remarks.

  • Если этот аргумент опущен, языковой стандарт DstName совпадает с SrcName.If you omit this argument, the locale of DstName is the same as SrcName.
  • Вы также можете создать пароль для DstName, объединив строку пароля (начиная с ";pwd=") с константой в аргументе DstLocale следующим образом: dbLangSpanish & ";pwd=NewPassword".You can also create a password for DstName by concatenating the password string (starting with ";pwd=") with a constant in the DstLocale argument, like this: dbLangSpanish & ";pwd=NewPassword".
  • Если вы хотите использовать такой же аргумент DstLocale, как в SrcName (значение по умолчанию), но указать новый пароль, просто введите строку пароля для DstLocale: ";pwd=NewPassword"If you want to use the same DstLocale as SrcName (the default value), but specify a new password, simply enter a password string for DstLocale: ";pwd=NewPassword"

OptionsOptions

НеобязательноOptional

VariantVariant

Необязательно.Optional. Константа или сочетание констант, определяющих один или несколько параметров, как указано в примечаниях.A constant or combination of constants that indicates one or more options, as specified in Remarks. Вы можете объединить параметры, сложив соответствующие константы.You can combine options by summing the corresponding constants.

passwordPassword

НеобязательныйOptional

VariantVariant

Строковое выражение, содержащее ключ шифрования, если база данных зашифрована.A string expression containing an encryption key, if the database is encrypted. Перед фактическим паролем должна находиться строка ";pwd=".The string ";pwd=" must precede the actual password. Если параметр пароля добавлен в DstLocale, этот параметр игнорируется.If you include a password setting in DstLocale, this setting is ignored.

ПРИМЕЧАНИЕ. Это устаревший параметр, который не поддерживается в формате ACCDB.NOTE: This is deprecated parameter and is not supported in .ACCDB format. Чтобы зашифровать ACCDB-файл, используйте строку параметра "pwd=".To encrypt an .ACCDB file, use the "pwd=" option string. Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки.Use strong passwords that combine uppercase and lowercase letters, numbers, and symbols. В ненадежных паролях не используются сочетания таких элементов.Weak passwords don't mix these elements. Надежный пароль: Y6dh!et5.Strong password: Y6dh!et5. Слабый пароль: House27.Weak password: House27. Используйте надежный пароль, который можно запомнить, чтобы не пришлось его записывать.Use a strong password that you can remember so that you don't have to write it down.

ПримечанияRemarks

Можно использовать одну из следующих констант для аргумента DstLocale, чтобы задать свойство CollatingOrder для сравнения строк текста.You can use one of the following constants for the DstLocale argument to specify the CollatingOrder property for string comparisons of text.


КонстантаConstant

Порядок сортировкиCollating order

dbLangGeneraldbLangGeneral

Английский, немецкий, французский, португальский, итальянский и современный испанскийEnglish, German, French, Portuguese, Italian, and Modern Spanish

dbLangArabicdbLangArabic

АрабскийArabic

dbLangChineseSimplifieddbLangChineseSimplified

Китайский (упрощенное письмо)Simplified Chinese

dbLangChineseTraditionaldbLangChineseTraditional

Китайский (традиционное письмо)Traditional Chinese

dbLangCyrillicdbLangCyrillic

РусскийRussian

dbLangCzechdbLangCzech

ЧешскийCzech

dbLangDutchdbLangDutch

ГолландскийDutch

dbLangGreekdbLangGreek

ГреческийGreek

dbLangHebrewdbLangHebrew

ИвритHebrew

dbLangHungariandbLangHungarian

ВенгерскийHungarian

dbLangIcelandicdbLangIcelandic

ИсландскийIcelandic

dbLangJapanesedbLangJapanese

ЯпонскийJapanese

dbLangKoreandbLangKorean

КорейскийKorean

dbLangNordicdbLangNordic

Скандинавские языки (только ядро СУБД Microsoft Jet версии 1.0)Nordic languages (Microsoft Jet database engine version 1.0 only)

dbLangNorwDandbLangNorwDan

Норвежский и датскийNorwegian and Danish

dbLangPolishdbLangPolish

ПольскийPolish

dbLangSloveniandbLangSlovenian

СловенскийSlovenian

dbLangSpanishdbLangSpanish

Традиционный испанскийTraditional Spanish

dbLangSwedFindbLangSwedFin

Шведский и финскийSwedish and Finnish

dbLangThaidbLangThai

ТайскийThai

dbLangTurkishdbLangTurkish

ТурецкийTurkish


Можно использовать одну из следующих констант в аргументе Options, чтобы указать необходимость шифрования или расшифровки базы данных при сжатии.You can use one of the following constants in the options argument to specify whether to encrypt or to decrypt the database while it's compacted.

Примечание

Константы dbEncrypt и dbDecrypt являются устаревшими и не поддерживаются в форматах файлов ACCDB.The constants dbEncrypt and dbDecrypt are deprecated and not supported in .ACCDB file formats.


КонстантаConstant

ОписаниеDescription

dbEncryptdbEncrypt

Шифрование базы данных при сжатии.Encrypt the database while compacting.

dbDecryptdbDecrypt

Расшифровка базы данных при сжатии.Decrypt the database while compacting.


Если опустить константу шифрования или указать как dbDecrypt, так и dbEncrypt, для DstName будет применяться такое же шифрование, как для SrcName.If you omit an encryption constant or if you include both dbDecrypt and dbEncrypt, DstName will have the same encryption as SrcName.

Можно использовать одну из следующих констант в аргументе Options, чтобы указать версию формата данных сжатой базы данных.You can use one of the following constants in the options argument to specify the version of the data format for the compacted database. Эта константа влияет только на версию формата данных DstName и не влияет на версию объектов, определяемых в Microsoft Access, таких как формы и отчеты.This constant affects only the version of the data format of DstName and doesn't affect the version of any Microsoft Access-defined objects, such as forms and reports.


КонстантаConstant

ОписаниеDescription

dbVersion10dbVersion10

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Jet версии 1.0.Creates a database that uses the Microsoft Jet database engine version 1.0 file format while compacting.

dbVersion11dbVersion11

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Jet версии 1.1.Creates a database that uses the Microsoft Jet database engine version 1.1 file format while compacting.

dbVersion20dbVersion20

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Jet версии 2.0.Creates a database that uses the Microsoft Jet database engine version 2.0 file format while compacting.

dbVersion30dbVersion30

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Jet версии 3.0 (совместимый с версией 3.5).Creates a database that uses the Microsoft Jet database engine version 3.0 file format (compatible with version 3.5) while compacting.

dbVersion40dbVersion40

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Jet версии 4.0.Creates a database that uses the Microsoft Jet database engine version 4.0 file format while compacting.

dbVersion120dbVersion120

Создает базу данных, использующую при сжатии формат файлов ядра СУБД Microsoft Access версии 12.0.Creates a database that uses the Microsoft Access database engine version 12.0 file format while compacting.


Можно указать константу только одной версии.You can specify only one version constant. Если опустить константу версии, версия DstName будет совпадать с SrcName.If you omit a version constant, DstName will have the same version as SrcName. Можно сжать DstName только до версии, совпадающей с версией SrcName или более поздней.You can compact DstName only to a version that is the same or later than that of SrcName.

Когда вы изменяете данные в базе данных, файл базы данных может фрагментироваться и будет занимать больше места на диске, чем требуется.As you change data in a database, the database file can become fragmented and use more disk space than is necessary. Периодически для сжатия базы данных можно использовать метод CompactDatabase, чтобы дефрагментировать файл базы данных.Periodically, you can use the CompactDatabase method to compact your database to defragment the database file. Сжатая база данных обычно меньше и часто работает быстрее.The compacted database is usually smaller and often runs faster. Вы также можете изменить порядок сортировки, шифрование или версию формата данных при копировании и сжатии базы данных.You can also change the collating order, the encryption, or the version of the data format while you copy and compact the database.

Необходимо закрыть файл SrcName перед его сжатием.You must close SrcName before you compact it. В многопользовательской среде другие пользователи не могут держать SrcName в открытом состоянии при его сжатии.In a multiuser environment, other users can't have SrcName open while you're compacting it. Если SrcName не закрыт или недоступен для монопольного использования, возникает ошибка.If SrcName isn't closed or isn't available for exclusive use, an error occurs.

Так как метод CompactDatabase создает копию базы данных, необходимо располагать достаточным местом как для исходной базы данных, так и для копии.Because CompactDatabase creates a copy of the database, you must have enough disk space for both the original and the duplicate databases. Операция сжатия завершается сбоем, если отсутствует достаточное место на диске.The compact operation fails if there isn't enough disk space available. Дублированную базу данных DstName не обязательно располагать на том же диске, что и SrcName.The DstName duplicate database doesn't have to be on the same disk as SrcName. После успешного сжатия базы данных можно удалить файл SrcName и присвоить сжатому файлу DstName исходное имя файла.After successfully compacting a database, you can delete the SrcName file and rename the compacted DstName file to the original file name.

Метод CompactDatabase копирует все данные и параметры разрешений системы безопасности из базы данных, определяемой SrcName, в базу данных, определяемую DstName.The CompactDatabase method copies all the data and the security permission settings from the database specified by SrcName to the database specified by DstName.

Примечание

Так как метод CompactDatabase не преобразует объекты Microsoft Access, не следует использовать CompactDatabase для преобразования базы данных, содержащей такие объекты.Because the CompactDatabase method doesn't convert Microsoft Access objects, you shouldn't use CompactDatabase to convert a database containing such objects.

Зашифрованные связанные таблицыEncrypted linked tables

Зашифрованные пароли зависят от используемого формата файла базы данных.Encrypted passwords are dependent on the file format of the database that you are using. Если вы используете Access 2003 (.mdb) или базу данных более ранней версии, у вас есть один пароль для защиты базы данных и другой пароль для шифрования базы данных.If you are using an Access 2003 (.mdb) or earlier database, you will have one password to protect the database, and a separate password to encrypt the database. В Access 2007 (.accdb) или базах данных более поздних версий (.mdb) зашифровать и защитить базу данных можно только с помощью одного пароля, так как возможность использования двух разных паролей была удалена.For Access 2007 (.accdb) and later (.mdb) databases, the only option is to encrypt and protect the database with one password, as the option to have two separate passwords has been removed.

Примечание

Для баз данных Access 2007 (.accdb) пароль является ключом шифрованияFor Access 2007 (.accdb) databases, the password is the encryption key

Вы можете использовать следующий пример кода VBA для кнопки:You can use the following example VBA code for a command button:

VB Копировать

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



В следующем примере кода показано, как использовать CompactDatabase с паролем (ключом шифрования) и затем сослаться на таблицу в этой сжатой базе данных.The following code sample shows how to use CompactDatabase with a password (encryption key) and then link to a table in that compacted database. Обратите внимание, что нужно указать пароль.Note that a password must be supplied.

VB Копировать

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


 
MyTetra Share v.0.52
Яндекс индекс цитирования