ms-access access-vba maintenance decompiler

ms access - ¿Cómo descompila y recompila una aplicación de base de datos?



ms-access access-vba (6)

Tengo una aplicación de base de datos de Access y me gustaría saber la forma adecuada de descompilarla y compilarla nuevamente.


Escribí un script VBS para automatizar el proceso de descompilación. Es una tontería que Microsoft no haya integrado esto en Access, considerando que es una necesidad al desarrollar aplicaciones pesadas de VBA.

El script localiza MSACCESS.exe y ejecuta Access con el indicador decompilar en una base de datos ubicada en el directorio principal del script, cuyo nombre figura en el código.

Option Explicit Dim MSAccPath Dim RegKey Dim WSHShell Dim currentDirectory '' Get MSACCESS.exe directory RegKey = "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/" _ & "CurrentVersion/App Paths/MSACCESS.EXE/Path" Set WSHShell = WScript.CreateObject("WScript.Shell") '' Get parent directory MSAccPath = WSHShell.RegRead(RegKey) currentDirectory = WSHShell.CurrentDirectory '' Decompile WSHShell.Run Chr(34) & MSAccPath & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & currentDirectory & "/../testdb.accdb" & Chr(34) & " /decompile" '' Clear shell var Set WSHShell = Nothing

Simplemente pegue este texto en un documento con la extensión .vbs y haga doble clic para ejecutarlo. Se iniciará el acceso, se descompilará el código P compilado (código "empaquetado") y se volverá a compilar automáticamente la fuente de VBA en el código P.


La respuesta aceptada es excelente, pero es un poco práctico crear un atajo para cada base de datos.

Puede guardar esto como un módulo de PowerShell.

#for use with MSAccess 2010 Function Decompile-AccessDB{ param ([string]$dbFileName) [string]$argument = ''"'' + $dbFileName + ''"'' + "/Decompile" Start-Process -FilePath ''C:/Program Files (x86)/Microsoft Office/Office14/MSACCESS.EXE'' -ArgumentList $argument }

Entonces llámalo así:

Decompile-AccessDB -Path "C:/Path/to/some.accdb"

Esto le permite descompilar rápida y fácilmente cualquier db de la línea de comandos de Power Shell.

Tenga en cuenta que aún necesita mantener presionada la tecla Mayús al ejecutar esto para eludir el inicio de la aplicación.


Las instrucciones prácticas de @Tim Lentine son buenas, pero deja fuera los pasos reales necesarios para que valga la pena hacer un decompilación:

  1. respalde su base de datos.

  2. compacta tu base de datos.

  3. utilizando el atajo creado con las instrucciones de Tim, abra su base de datos.

  4. cierra esa instancia de Access.

  5. abra una nueva instancia de Access y abra la base de datos que acaba de decompilar, pero ASEGÚRESE DE CANCELAR TODO EL CÓDIGO DE INICIO (es decir, mantenga presionada la tecla Mayús). Si no lo hace, entonces podría volver al paso 3 y volver a intentarlo, ya que si se ejecuta el código de inicio, su código se volverá a compilar antes de que esté listo para hacerlo.

  6. compacte la base de datos descompilada (y asegúrese de mantener presionada la tecla Mayús para evitar el código de inicio, vea el n. ° 5).

  7. abra el VBE y en el menú Depurar, elija COMPILAR [nombre del proyecto].

  8. en el menú de archivo, guarde el proyecto.

  9. compacto de nuevo.

¿Por qué son necesarios todos estos pasos?

Como no solo desea descompilar el VBA, debe asegurarse de que todas las páginas de datos donde se almacenó el código p compilado se descarten por completo antes de volver a compilar.

También recomiendo:

  1. en las opciones de VBE, apague COMPILE ON DEMAND

  2. en el VBE, agregue el botón COMPILAR a su barra de herramientas.

  3. compilar a menudo con ese botón en la barra de herramientas, después de cada dos o tres líneas de código.

Descompilar no es algo que deba usar todo el tiempo, pero durante la codificación de trabajo pesado, podría descompilar un par de veces al día. Y generalmente descompilo / recompilo como el último paso antes de lanzar una aplicación al uso de producción.

Por último, lea el artículo de Michael Kaplan sobre el tema para comprenderlo mejor.


Las otras respuestas aquí parecen un poco complejas para mi gusto.

Para descompilar una base de datos de Access:

Abra el diálogo Ejecutar desde el menú de inicio, o presione Win + R

Escriba: MSACCESS.EXE /decompile (una instalación adecuada debería abrir la aplicación Access, también podría proporcionar la ruta completa a MSACCESS.EXE) y presione OK.

El acceso ahora se abre. Abra su base de datos en la ventana de acceso que acaba de abrir. Eso lo descompilará


Para descompilar una base de datos de Access, deberá crear un acceso directo con los siguientes elementos:

  1. Ruta al MS Access Executable (MSACESS.exe)
  2. Ruta a la base de datos que desea descompilar
  3. La bandera / decompilar

En conjunto, entonces, el atajo sería algo como lo siguiente:

"C:/Program Files/Microsoft Office/Office/MSACCESS.EXE" "C:/users/tim/documents/Mydatabase.mdb" /decompile

Obviamente, las rutas serán diferentes en su sistema.

Recomiendo hacer una copia de seguridad de su base de datos antes de ejecutar este comando.

Si tiene un código de inicio en su base de datos, debe mantener presionada la tecla Mayús para omitir la ejecución del código de inicio.

Una vez que se abre la base de datos, puede compactar y reparar la base de datos para garantizar un rendimiento óptimo.

Después de la compactación y reparación, puede recompilar el código VBA abriendo cualquier módulo y utilizando el comando Debug Compile [DatabaseName] .

Si esto es algo que desea hacer con frecuencia, puede crear un acceso directo "Descompilar acceso" en su menú Enviar a. Una vez que tenga este acceso directo en el menú Enviar a, podrá hacer clic derecho en cualquier base de datos de Access y seleccionar "Enviar a -> Descompilación de acceso", que es mucho más fácil que tener que crear un acceso directo a la base de datos específica.

Siga estos pasos para personalizar el menú Enviar a con un acceso directo de Decompilación de acceso

  1. Crea un acceso directo al ejecutable de Access.
  2. Añada el distintivo / decompilar en el destino para el acceso directo. El atajo se verá así:

    "C:/Program Files/Microsoft Office/Office/MSACCESS.EXE" /decompile

  3. Abra el Explorador de Windows y pegue lo siguiente en la barra de direcciones:

    %APPDATA%/Microsoft/Windows/SendTo

  4. Copie el acceso directo que creó en la carpeta Enviar a.

  5. El Acceso directo de Descompilación de Acceso ahora estará disponible para su uso.

Para invocar el acceso directo de Decompile de Acceso, haga clic derecho en una Base de Datos de Acceso en el Explorador de Windows y seleccione "Enviar a -> Descompilación de Acceso". Asegúrese de mantener presionada la tecla Mayús para omitir cualquier código de inicio en la base de datos.


Solo quería agregar mis dos centavos. Trabajo diariamente con bases de datos SQL Server, SSIS y MS Access, y nuestra red nos permite usar diferentes escritorios Citrix; algunos son Win Serv 2003 SP2 y algunos están basados ​​en Win Serv 2008 R2. Cuando compactas y repara MS Access dbs en un escritorio, las bases de datos están bien. Pero, cuando descompilas, debes asegurarte de que quien más use los dbs pueda abrirlos. Compruebe todos los controles para ver si funcionan de la misma estación de trabajo a estación de trabajo. Se encontrará con problemas cuando la instalación de MS Access de otra persona no contenga las mismas bibliotecas. Esto nos lleva a no permitir todo desarrollo de front-ends con controles no convencionales, especialmente aquellos a los que tendría que agregar una referencia a la base de datos para usar. Sin embargo, es un gran recurso para reducir el tamaño y acelerar su código, la descompilación puede causar muchos problemas en un entorno multiusuario.