Cómo compactar una base de datos Access
Por Enrique Martínez Montejo
Última revisión: 22/06/2003
 

Mediante el método CompactDatabase del objeto JetEngine de la biblioteca JRO, podemos copiar y compactar una base de datos Access que esté previamente cerrada, teniendo la opción de poder cambiar su versión, la secuencia de ordenación, el cifrado entre otras opciones más.

En cuanto a la modificación de la versión de la base de datos, indicar que sólo está permitido si el número de versión de la base de datos resultante es igual o superior a la base de datos que deseamos compactar, nunca inferior, por lo que no podremos compactar una base de datos Access 2000 al formato Access 97, por ejemplo, ya que obtendremos el oportuno error interceptable en tiempo de ejecución.

El siguiente ejemplo compactaría una base de datos Access 97 al formato de Access 2000. El ejemplo tiene en cuenta si la base de datos tiene establecida una contraseña, teniendo la posibilidad de anular ésta o modificarla en la base de datos resultante.

Dim oJro As JRO.JetEngine
Dim cnn1 As String, cnn2 As String

' Creamos un nuevo objeto JetEngine
Set oJro = New JRO.JetEngine

' Cadena de conexión de origen
cnn1 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data source=c:\Mis documentos\base97.mdb;" & _
       "Jet OLEDB:Engine Type = 4;" & _
       "Jet OLEDB:Database Password = Contraseña"

' Cadena de conexión de destino
cnn2 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data source=c:\Mis documentos\base2000.mdb;" & _
           "Jet OLEDB:Engine Type = 5;" & _
           "Jet OLEDB:Database Password = Contraseña"

' Compactamos la base de datos
oJro.CompactDatabase cnn1, cnn2

La propiedad Provider indica el nombre del proveedor que se va a utilizar para conectarse al origen de datos. Si no se especifica esta propiedad, se supone que es el proveedor Microsoft.Jet.OLEDB.4.0.

Si una base de datos tiene contraseña, y queremos que la base de datos resultante tenga la misma u otra nueva, tendremos que establecerla en la cadena de conexión de destino, ya que de lo contrario, la base de datos resultante no tendrá ninguna contraseña.

Hay que tener especial cuidado en no separar con un espacio en blanco las palabras OLEDB: y Database Password, porque de hacerlo nos encontraremos con el error No se pudo encontrar el archivo ISAM instalable. Por tanto, la escritura correcta es OLEDB:Database Password, sin espacios en blanco, lo que también es válido para cualquier otro nombre de propiedad que comience por Jet OLEDB:.

La versión de la base de datos resultante de la compactación será la que corresponda con el motor de base de datos Microsoft Jet que tengamos instalado por defecto en nuestro sistema, por lo que no es necesario especificar la propiedad Jet OLEDB:Engine Type, salvo que deseemos modificar la versión de la base de datos resultante, en cuyo caso deberemos de especificar en la cadena de conexión el valor de dicha propiedad, la cual puede tomar uno de los siguientes valores, que corresponderá con los distintos tipos de motores OLEDB que puede utilizar:

Si el usuario tiene instalado en su sistema Microsoft Access 2002, el que la base de datos resultante de la compactación tenga el formato de Access 2000 o Access 2002 dependerá del formato de archivo predeterminado que tenga establecido como valor por defecto en el cuadro de diálogo Opciones de Microsoft Access, por tanto, si especificamos en la cadena de conexión el parámetro:

Jet OLEDB:Engine Type = 5

la base de datos creada tendrá formato Access 2000, si así lo tenemos especificado en nuestras Opciones; en caso contrario, la base de datos tendrá el formato de Access 2002.

Dicho valor se guarda en el parámetro Default File Format de la siguiente clave del registro de Windows, HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Access\Settings, el cual puede tomar uno de los siguientes valores DWORD:

Por último, si se indica una versión del motor OLE DB distinta de la versión de la base de datos que se desea compactar, se producirá el siguiente error: No se puede realizar esta operación; las características de esta versión no están disponibles para bases de datos con formatos más antiguos.

Otras propiedades que se pueden especificar, tanto en la cadena de conexión de origen como la de destino, son las siguientes:

Propiedad Origen Destino Descripión
User Id X   El nombre de un usuario incluido en un archivo de información de grupos de trabajo.
Password X La contraseña del usuario.
Locale Identifier   X Indica el identificador regional de la nueva base de datos. Si se omite, la base de datos de destino tendrá el mismo identificador regional que la de origen.
Jet OLEDB:Registry Path X   Información acerca de la clave del Registro de Windows que contiene los valores para el motor Microsoft Jet.
Jet OLEDB:System Database X   La ruta donde se encuentra el archivo de información de grupos de trabajo (archivo *mdw).
Jet OLEDB:Encrypt Database   X Indica si se va a cifrar la nueva base de datos. Si se omite este parámetro, la base de datos nueva tendrá el mismo cifrado que la de origen. El valor puede ser True/False.
Jet OLEDB:Don't Copy Locale on Compact   X Indica que se debe utilizar la secuencia de ordenación de la base de datos, lo que suplanta cualquier configuración regional para las columnas. El valor puede ser True/False.
Jet OLEDB:Compact Without Relationships   X Indica si se copiarán las relaciones en la nueva base de datos. El valor puede ser True/False.
Jet OLEDB:Compact Without Replica Repair   X Indica si se intentarán probar otras réplicas para reparar las bases de datos replicadas que estén dañadas. El valor puede ser True/False.

Los valores más comunes para el Identificador regional son los siguientes:

Descripción LCID  
General 0x00000409 Comprende los siguientes idiomas: africaans, albano, árabe, vasco, búlgaro, bielorruso, catalán, holandés, inglés, faroés, persa, alemán (estándar), griego, hebreo, hindú, indonesio, italiano, malayo, portugués, ruso, serbio, suajili, urdú.
Español tradicional 0x0000040a  
Español moderno 0x00000c0a  

Para especificar un identificador regional de Español moderno, deberemos de escribir en la cadena de conexión:

Locale Identifier = 0x00000c0a

 

Otros enlaces de interés:

Indice de Tips de ADOX

Cómo crear una base de datos Access

Cómo compactar una base de datos Access con JRO (ADO .NET)

Cómo compactar una base de datos Access 2007/2010 (ADO .NET)

Indice de Tips de JRO


Enrique Martínez Montejo - 2003

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.