2010-03-11 27 views
8

Tengo un MDB de MSAccess que necesita abrir otros MDB y ejecutar un montón de código que comparará dos MDB de acceso para encontrar diferencias de código, diferencias de consulta, etc. El objetivo es verificar que cualquier MDB de producción no haya sido alterado desde la implementación original.Cómo omitir la macro Autoexec al abrir MSAccess desde MSAccess?

Mi problema es que muchas de estas aplicaciones de Access tienen macros Autoexec y no hay una forma sencilla de llamar a .OpenCurrentDatabase sin ejecutar la macro autoexec.

¿Cómo puedo omitir la macro con CODE?

Sé que puedo mantener presionada la tecla Mayús. Sé que puedo activar y desactivar esa opción también.

Respuesta

4

Es una solución furtiva pero funciona para mí.

Realizo un DoCmd.DatabaseTransfer acImport de la macro Autoexec. Luego se sustituye la Autoexec por una en blanco, utilizando DoCmd.DatabaseTransfer acExport

El truco es que una exportación será sobrescribir

DoCmd.TransferDatabase acImport, "Microsoft Access", sSourcePath , acMacro, "AutoExec", "autoexecSource"

DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecblank", "AutoExec"

lo hago de nuevo por el segundo MDB

DoCmd.TransferDatabase acImport, "Microsoft Access", sDestPath, acMacro, "AutoExec", " autoexecDest"

DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPath, acMacro, "autoexecblank", "AutoExec"

entonces yo puedo hacer todas las comparaciones para encontrar Diffs entre los dos BMD sin activar las macros AutoExec desde que los importados y los reemplazó

Luego comparo las dos macros Importé y luego exportarlos de vuelta a las bases de datos.

DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecSource", "AutoExec"

DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPath, acMacro " autoexecDest "," autoexec "

Obviamente, esta solución solo funciona usando VBA en Access, pero funciona.

Espero que esto ayude a alguien.

+0

very sneaky :) +1 – Praesagus

5

ejecutar código en el arranque puede no estar en una macro AutoExec, puede ser en un formulario de inicio, por lo tanto, es posible que desee considerar 'La presión programación el cambio de clave' a través de las API:

http://www.mvps.org/access/api/api0068.htm

+0

Esta debería ser la respuesta aceptada. – transistor1

2

Otra opción si tiene acceso para editar las macros AutoExec de las bases de datos que está abriendo: establezca una condición en cada paso de la macro que especifica [Application].[UserControl]. Al especificar esto, el macropaso solo se ejecutará si un usuario abre la base de datos, no a través de la automatización. Si el macropaso ya tiene una condición configurada, puede poner paréntesis alrededor de él: (old condition) AND [Application].[UserControl].

Sin embargo, si no tiene la capacidad de cambiar esas macros, es mejor que siga la solución de @ ChuckB.

0

Esta es una pregunta anterior, pero otra forma de hacerlo sería utilizar el argumento de línea/cmd y usar una instrucción COMMAND en el inicio de la aplicación para ejecutar rutinas de inicio de manera condicional dependiendo de si se proporcionó un argumento/cmd . Sin embargo, esto solo funcionaría con un inicio de línea de comandos, no a través de la automatización.

2

Otra opción: hacer un cambio de nombre de la macro autoexec en su código VB.

OpenCurrentDatabase ("Su base de datos")

DoCmd.Rename "Autoexec", acMacro, "tmp_Autoexec"

CloseCurrentDatabase

Después de haber hecho su acción Hacer un cambio de nombre de nuevo a AUTOEXEC nuevo ... et voila ....

+1

¿No se ejecutará 'OpenCurrentDatabase' porque se ejecuta la macro Autoexec (* antes * de que se alcance la línea' DoCmd.Rename')? – Heinzi

Cuestiones relacionadas