Compartir a través de


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.

  • Si omite este argumento, la configuración regional de DstName es la misma que la de SrcName.

  • También puede crear una contraseña para DstName concatenando la cadena de contraseña (a partir de "; pwd=") con una constante en el argumento DstLocale, como esta: dbLangSpanish & "; pwd=NewPassword".

  • Si desea usar el mismo DstLocale que SrcName (el valor predeterminado), pero especifique una nueva contraseña, simplemente escriba una cadena de contraseña para DstLocale: "; pwd=NewPassword"

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