Firmas invitadas
 

Asistente generador de instalaciones de complementos de Access

 
Publicado el 02/Nov/2006
Actualizado el 02/Nov/2006
Autor: Buho
 

Otra forma de instalar un complemento de Access al margen del propio instalador de complementos.


Introducción

 

Alguien (O muchos) se preguntarán… ¿Qué hace este «Accessero» escribiendo algo en un sitio como éste?
Pues sí, eso tambien me lo pregunto yo…pero con tal de aportar un pequeño granito de arena, en la celebración del décimo aniversario del sitio de el «Guille» soy capaz hasta de traducirlo al Chino.
En serio: Ahora que muchos ya os movéis, en los que yo llamo, lenguajes y plataformas de última generación, aquí va un pequeño aporte desde el mundo de Access y solo para el mundo de Access.
Al fin y al cabo, no me seáis mentirosillos ;) todos alguna vez le habéis utilizado (Otra cosa es que no hayáis visto sus bondades, que tenerlas, las tiene).

 

 

Bueno, empecemos. Vamos  a ver un poco qué es «eso» de un complemento en Access.

 

1) QUE ES UN COMPLEMENTO DE ACCESS, COMO SE INSTALA...ES DECIR...TODAS AQUELLAS CUESTIONES QUE VD. DESEABA SABER SOBRE LOS COMPLEMENTOS Y NUNCA SE HABIA ATREVIDO A PREGUNTARLAS

 

 

1.1 ¿Qué es un complemento de Access?

   Buena pregunta y a ver si lo explico bien. Un complemento de Access no es otra cosa que un fichero creado por el propio Access, bien en formato MDB, formato MDE o formato MDA.

   Siendo escrupulosos con la definición, el formato o extensión del fichero debe ser MDA, pero insisto, eso da exactamente igual.

   Es decir... ¿Sabes programar en Access formato MDB? ¿Si, verdad?...pues tambien sabes programar complementos para Access.

 

 

1.2 ¿Para qué sirven los complementos de Access?

    Tambien buena pregunta. Pues una vez registrado UN complemento (Te lo explico mas abajo) en el sistema Access, si tu vas al menú superior de la ventana bases de de datos,  Herramientas -> Complementos verás los nombres de complementos que tengas instalados. Con solo picar con el ratón en cualquiera de los nombres, se te lanzará lo que se haya escrito dentro de ese complemento. De esta forma y siendo escrupulosamente exactos, estarás llamando a una función, formulario etc. del complemento (Recuerda que es un fichero de Access) desde cualquier MDB.

    Es decir, abres otra MDB desde tu actual MDB y ejecutas un código de la primera.

 

    Ejemplo. Imagínate que tienes un formulario muy bonito, en cuyo código recoges, por ejemplo, como visualizar las impresoras que hay en tu red. (Mero ejemplo). Y eso lo quieres usar de forma continua en todas las bases de datos con las que trabajas. ¿Que hacer?...¿Importar dicho formulario a todas las MDB de tu equipo y de esta forma poderle usar en todas tus MDB? No...no hagas eso...create un complemento con ese formulario.

    Es decir, te creas una MDB nueva, con solo ese formulario (Visualizar Impresoras), create un simple modulo con una función Pública, que lo único que haga sea abrir dicho formulario.

    Ya has creado tu propio complemento. Ese formulario, una vez registrado el complemento en el sistema de Access, será accesible desde cualquier MDB de tu PC.

 

 

1.3 Formas de instalar un complemento.

   

    FORMA TRADICIONAL

    =================

    Bien. Tambien buena pregunta. Hasta ahora, los casos que yo he visto, registran los complementos de Access a través del asistente de complementos, que se encuentra en Herramientas-> Complementos del menú superior de access.

   

    

    FORMA BUHO

    ==========

 

    A mí que me gusta llevar la contraria en casi todo, me puse a investigar si había alguna forma más fácil y personal de registrar un complemento de Access, dejando al margen el propio asistente de Complementos del paquete Access.

 

    Y claro que existe y bien sencilla. Si has leído alguna vez la forma clásica que tiene el sistema Access para registrar estos complementos, sabrás que es necesario crear dentro del propio complemento, una tabla muy especial, con el nombre de USysRegInfo, donde en unos campos de dicha tabla hay que meter la información necesaria para que Access instale dicho complemento.

    A continuación pego, lo que dije en las News de Microsoft Access sobre este tema (Total ya lo tengo escrito, para que voy a gastar dedos)

   

     (A) que el hecho de depositar el complemento en una ruta concreta, por ejemplo en Access 2003, en la ruta:

         C:\Documents and Setting\Nombreusuario\Datos de programa\Microsoft\Addins

         Es completamente innecesario.

         Se puede depositar en cualquier carpeta o lugar del disco duro.

         Lo que ocurre que el Administrador de complementos de Access (2002,2003), por defecto, busca siempre en dicha carpeta.

     (B) La tabla USysRegInfo tambien es innecesaria. Esta tabla solo es utilizada a nivel interno por el administrador de complementos de access, simplemente. (Lo explico mas abajo)

 

     (C) No hace falta que el complemento esté en formato MDA. Puede ser cualquier formato valido de Access (MDB, MDE etc.)

 

   ¿Y entonces donde está el secreto de todo esto?

 

   Pues mi simple.

   En access 2002/ 2003...existe una Key en el registro de Windows que hace que un complemento (En general cualquier fichero de Access que quiero que aparezca en el menú Herramienta-> Complementos)se auto ejecute cuando se le invoque. Solo hay que escribir unas ramas (Claves) en el registro de Windows.

 

   Por ejemplo, con este simple código, he conseguido yo instalar un complemento, llamado: «Mensajes Access» sin necesidad de asistentes, sin necesidad de saber la ruta de los complementos, sin la necesidad de poner esa tabla de sistema USysRegInfo, en definitiva «pasando olímpicamente» de dicho asistente:

 

Dim Sh As Object
Dim rutaREGISTRO As String
Set Sh = CreateObject("Wscript.Shell")
rutaREGISTRO = _
    "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Access\Menu Add-Ins\"
Sh.RegWrite rutaREGISTRO & "\Mensajes Access\Expression", _
    "=Buho_Comienza()", "REG_SZ"
Sh.RegWrite rutaREGISTRO & "\Mensajes Access\Library", _
    "C:\Documents and Settings\P@Ko\Escritorio\Complementos\mensajesNT.mda","REG_SZ"
Set Sh = Nothing

 

Es decir, solo hace falta crear una nueva clave (Como quieras que se llame el complemento) y dos subclaves:

 

    «Expression» que tendrá como valor una función definida en un modulo publico del complemento y que será la que se lance nada mas abrir el complemento. (Normalmente siempre abrirá un formulario). En el caso de mi ejemplo dicha función se llama «Buho_Comienza» y es una función publica escrita en un modulo BAS del complemento y cuyo código solo es llamar al formulario que quiero que se muestre.

 

    «Library» que contendrá simplemente la ruta donde está depositada la MDB/MDE/MDA que actúa como complemento.

 

Antes de seguir leyendo, por favor bájate el siguiente ejemplo que he preparado:
firmas_buho_complementosbuho.zip

 

¿Te lo has bajado ya? Vale, seguimos entonces:

 

2) QUE ES ESTO QUE ME HE BAJADO DE LA WEB, QUE NO HAY CRISTIANO QUE LO ENTIENDA

 

 

  Te lo explico, pero sé paciente y generoso con mi nefasta forma de explicarme.

 

  El fichero «asistentecomplementos.mdb» es una simple MDB que lo que hace es generar otra MDB con el nombre «InstalaComplementoxxxx.mdb» y esta última en sí es «el instalador de complementos personalizado».

 

  Es decir, cuando ejecutes «asistentecomplementos.mdb» verás que te voy a ir preguntando una serie de datos sobre qué complemento quieres instalar, donde está, etc. etc. Una vez que hayas respondido a esas preguntas  el propio «asistentecomplementos.mdb» te creará / instalará en disco duro la MDB «InstalaComplementoxxxx.mdb» que no es otra cosa que el programa para registrar/instalar el complemento que hayas elegido.

 

  ¿Que quieres instalar otro complemento?, vuelve a correr «asistentecomplementos.mdb», rellena los datos que se te pide y tendrás otro «InstalaComplementoxxxx.mdb» personalizado en exclusiva para el complemento que hayas elegido.

 

  Lo novedoso de mi método, es que el propio complemento que se quiere instalar en el ordenador cliente va dentro de una campo OLE del instalador de complementos «InstalaComplementoBuho.mdb», que a su vez, creo en tiempo de ejecución.

 

  ¿Que nos has entendido nada?.....te pongo un ejemplo real.

 

  En el paquete ZIP que te has bajado de mi Web, va la «asistentecomplementos.mdb» y un sencillo complemento «micomplemento.mde» (En realidad es un fichero MDB renombrado, para que puedas ver el código) que lo único que hace es listar los recursos de un ordenador en la función «DatosTecnicos» escrita en un módulo BAS de dicho complemento «micomplemento.mde».

 

 

  Si ves el código de «micomplemento.mde»  verás que tiene un modulo BAS estándar una función «DatosTecnicos()» que es la que voy a utilizar para instalar este complemento. No te olvides de su nombre y apuntalo en un papel.

 

  Bien...

 

  PASO UNO

  --------

  Lanza el programa «asistentecomplementos.mdb».

  En la primera pantalla se te piden unos datos. Escoge primero el complemento que deseas instalar. Por supuesto, escoge el que acompaña a este ejemplo, el ya mencionado «micomplemento.mde» ya que simplemente vamos a probar mi ejemplo.

 

  Veras que al escoger este fichero, en un cuadro de lista se te muestra el/los módulos que tenga el complemento.

 

  PASO DOS

  --------

  Ahora se te pide que introduzcas el procedimiento inicial con el que quieres que se lance este complemento.

  En este caso concreto, mete literalmente: DatosTecnicos ya que es la función publica que yo he elegido dentro del complemento, para lanzar dicho complemento. Verás que al escribir la función inicial, mi asistente comprueba si es un nombre de función válida. Para ello, simplemente la ejecuto en ese momento y veo si los resultados son   correctos o no. En caso de que dicha función no sea valida (No exista) el asistente, o sea yo, te digo que escojas otra y que no seas mentiroso. :-D

  ...sigue rellenado datos que te vaya solicitando el asistente...y ya en la ultima etapa, pulsa el botón FINALIZAR.

 

  PASO TRES

  ---------

  En estos momentos (Podrás ver el código asociado al evento) lo que hago es generar el fichero: «InstalaComplementoxxxx.mdb» que en realidad es el instalador PERSONALIZADO para el complemento   «micomplemento.mde».

 

  Eso de las «xxxx» en «InstalaComplementoxxxx.mdb»  es que en disco duro se crea el fichero MDB, donde en su última parte de nombre de fichero (xxxx), pongo el nombre del complemento que se va instalar. En este caso del ejemplo: «InstalaComplementoMicomplmento.mdb»

 

  PASO CUATRO

  -----------

  Ahora, solo hace falta que envíes dicho fichero «InstalaComplementoxxxx.mdb» a tu cliente y decirle que le ejecute. Este fichero generará el complemento, le instalará y quedará registrado en el ordenador cliente. Por supuesto...en este caso, lo que te estoy pidiendo, es que una vez generado el

  «InstalaComplementoxxxx.mdb», ejecutes dicho fichero, para que veas los resultados.

 

  ¿Y donde «viaja» en si mismo el complemento «micomplemento.mde» si he dicho que al cliente solo le envío el InstalaComplementoBuho.mdb»??

  Pues, sí, lo has adivinado, viaja dentro de un campo OLE de una tabla que acompaña a «InstalaComplementoBuho.mdb»

 

  Haz la prueba...

 

  Y así podrás generar tantos «InstalaComplementoBuho.mdb» como desees, personalizados al complemento que desees distribuir.

 

 

NOTA FINAL

 

  El ejemplo tiene una utilidad que te lista todos los complementos que tengas instalado en tu equipo, e incluso te da la posibilidad de eliminarles, muestra información sobre los complementos...un poco lo que hace en realidad el «Administrador de Complementos de Access», pero está hecho «a pedal» por el Búho, en un formulario de Access. Al fin y al cabo, los asistentes del paquete de Access, no son otra cosas que formularios del propio access.

 

¡Ah ¡…y mi más sincera enhorabuena al maestro Guille por su web, por lo mucho que hemos aprendido todos de ella y por lo excelente persona que es.

 

Eso es todo... ¡amigo!  :-D

 

Francisco Javier García Aguado (Buho)



Código de ejemplo (ZIP):
 

Fichero con el código de ejemplo: firmas_buho_complementosbuho.zip - 309.0 KB

(MD5 checksum: 03106C5D56FB53B33B9BDF3D21711FC6)

 


Ir al índice principal de el Guille