Método DBEngine.CompactDatabase (DAO)
Se aplica a: Access 2013 | Access 2016
Copia y compacta una base de datos cerrada, y permite cambiar su versión, el orden de intercalación y el cifrado. (Solo áreas de trabajo de Microsoft Access).
Nota:
Al usar tablas vinculadas cifradas para consultas de acción, actualización y SQL [como una instrucción SQL UPDATE (CurrentDb.Execute "UPDATE...")], debe proporcionar la clave de cifrado. Además, las tablas vinculadas tienen un límite de 19 caracteres para la clave de cifrado. Consulte la sección Tablas vinculadas cifradas al final de este tema.
Sintaxis
expresión . CompactDatabase(SrcName, DstName, DstLocale, Options, password)
expression Expresión que devuelve un objeto DBEngine.
Parameters
Nombre |
Obligatorio/opcional |
Tipo de datos |
Descripción |
---|---|---|---|
SrcName |
Necesario |
String |
Identifica una base de datos existente y cerrada. Puede ser una ruta de acceso completa y el nombre del archivo, como "C:\db1.mdb". Si el nombre de archivo tiene una extensión, debe especificarla. Si la red lo admite, puede especificar también una ruta de red, como "\\servidor1\recurso_compartido1\dir1\db1.mdb" |
DstName |
Necesario |
String |
Nombre de archivo (y la ruta) de la base de datos compactada que va a crear. Puede especificar también una ruta de red. No puede utilizar este argumento para especificar el mismo archivo de base de datos que SrcName. |
DstLocale |
Opcional |
Variant |
Expresión de cadena que especifica un orden de intercalación para crear DstName, como se especifica en Comentarios.
|
Opciones |
Opcional |
Variant |
Opcional. Constante o combinación de constantes que indican una o varias opciones, tal como se ha especificado en los comentarios. Puede combinar opciones sumando las constantes correspondientes. |
password |
Opcional |
Variant |
Expresión de cadena que contiene una clave de cifrado, si la base de datos está cifrada. La cadena "; pwd=" debe preceder a la contraseña real. Si incluye una opción de contraseña en DstLocale, se omite esta configuración. NOTA: este es un parámetro en desuso y no es compatible con el formato .ACCDB. Para cifrar un archivo .ACCDB, use la cadena de opción "pwd =". Use contraseñas seguras que combinen letras mayúsculas y minúsculas, números y símbolos. En las contraseñas no seguras estos elementos no se combinan. Contraseña segura: Y6dh!et5. Contraseña no segura: Casa27. Use una contraseña segura que pueda recordar para no tener que anotarla. |
Comentarios
Puede usar una de las siguientes constantes para el argumento DstLocale para especificar la propiedad CollatingOrder para comparaciones de cadenas de texto.
Constante |
Orden de intercalación |
---|---|
dbLangGeneral |
Inglés, alemán, francés, portugués, italiano y español (alfab. internacional) |
dbLangArabic |
Árabe |
dbLangChineseSimplified |
chino simplificado |
dbLangChineseTraditional |
chino tradicional |
dbLangCyrillic |
Ruso |
dbLangCzech |
Checo |
dbLangDutch |
Neerlandés |
dbLangGreek |
Griego |
dbLangHebrew |
Hebreo |
dbLangHungarian |
Húngaro |
dbLangIcelandic |
Islandés |
dbLangJapanese |
Japonés |
dbLangKorean |
Coreano |
dbLangNordic |
Idiomas nórdicos (sólo en la versión 1.0 del motor de base de datos de Microsoft Jet) |
dbLangNorwDan |
Noruego y danés |
dbLangPolish |
Polaco |
dbLangSlovenian |
Esloveno |
dbLangSpanish |
Español (alfab. tradicional) |
dbLangSwedFin |
Sueco y finlandés |
dbLangThai |
Tailandés |
dbLangTurkish |
Turco |
Puede utilizar alguna de las constantes siguientes en el argumento options para especificar si va a cifrar o descifrar la base de datos mientras se compacta.
Nota:
La constantes dbEncrypt y dbDecrypt están en desuso y no se admiten en formatos de archivo .ACCDB.
Constante |
Descripción |
---|---|
dbEncrypt |
Cifra la base de datos mientras se compacta. |
dbDecrypt |
Descifrar la base de datos mientras se compacta. |
Si omite una constante de cifrado o si incluye dbDecrypt y dbEncrypt, DstName tendrá el mismo cifrado que SrcName.
Puede utilizar alguna de las constantes siguientes en el argumento options para especificar la versión del formato de datos de la base de datos compactada. Esta constante afecta únicamente a la versión del formato de datos de DstName y no a la versión de los objetos definidos por Microsoft Access, como formularios o informes.
Constante |
Descripción |
---|---|
dbVersion10 |
Crea una base de datos que utiliza el formato de archivo del motor de base de datos de Microsoft Jet versión 1.0 mientras compacta la base de datos. |
dbVersion11 |
Crea una base de datos que utiliza el formato de archivo del motor de base de datos de Microsoft Jet versión 1.1 mientras compacta la base de datos. |
dbVersion20 |
Crea una base de datos que utiliza el formato de archivo del motor de base de datos de Microsoft Jet versión 2.0 mientras compacta la base de datos. |
dbVersion30 |
Crea una base de datos que utiliza el formato de archivo del motor de base de datos de Microsoft Jet versión 3.0 (compatible con la versión 3.5) mientras compacta la base de datos. |
dbVersion40 |
Crea una base de datos que utiliza el formato de archivo del motor de base de datos de Microsoft Jet versión 4.0 mientras compacta la base de datos. |
dbVersion120 |
Crea una base de datos que usa el formato de archivo de motor de base de datos Microsoft Access versión 12.0 mientras se compacta. |
Solo puede especificar una constante de versión. Si se omite, DstName tendrá la misma versión que SrcName. Sólo puede compactar DstName en una versión que sea la misma o superior a la de SrcName.
Cuando cambie los datos en una base de datos, el archivo de base de datos puede fragmentarse y utilizar más espacio en disco si es necesario. Puede utilizar el método CompactDatabase regularmente para compactar la base de datos y desfragmentar el archivo de base de datos. Las bases de datos compactadas suelen ser más pequeñas y ejecutarse más rápidamente. Puede cambiar también el orden de intercalación, el cifrado o la versión del formato de datos mientras copia y compacta la base de datos.
Debe cerrar SrcName antes de compactarla. En un entorno multiusuario, otros usuarios no pueden tener abierto SrcName mientras realiza la compactación. Si SrcName no está cerrado o no está disponible para uso exclusivo, se produce un error.
Como CompactDatabase crea una copia de la base de datos, debe disponer de espacio en disco suficiente para la base de datos original y duplicada. La operación de compactación producirá un error si no hay espacio en disco suficiente. La base de datos DstName duplicada no tiene que estar en el mismo disco que SrcName. Una vez compactada correctamente la base de datos, puede eliminar el archivo SrcName y cambiar el nombre del archivo DstName compactado por el nombre de archivo original.
El método CompactDatabase copia todos los datos y la configuración de permisos de seguridad de la base de datos especificada por SrcName en la base de datos especificada por DstName.
Nota:
Como el método CompactDatabase no convierte los objetos de Microsoft Access, no debería usar CompactDatabase para convertir una base de datos que contiene esos objetos.
Tablas vinculadas cifradas
Las contraseñas con cifrado dependen del formato de archivo de la base de datos que está usando. Si usa una base de datos de Access 2003 (.mdb) o anterior, tendrá una contraseña para proteger la base de datos y una contraseña independiente para cifrar la base de datos. En las bases de datos de Access 2007 (.accdb) y posteriores (.mdb), la única opción es cifrar y proteger la base de datos con una contraseña, ya que se ha quitado la opción de las dos contraseñas independientes.
Nota:
En bases de datos de Access 2007 (.accdb), la contraseña es la clave de cifrado.
Puede usar el siguiente ejemplo de código VBA para un botón 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
El ejemplo siguiente muestra cómo usar CompactDatabase con una contraseña (clave de cifrado) y, después, vincularla a una tabla de esa base de datos compactada. Tenga en cuenta que debe proporcionar una contraseña.
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