¿Cuál es la versión de una librería?

Dominando las Librerías y Referencias en Access

25/01/2023

Valoración: 4.16 (2092 votos)

Cuando una aplicación de Microsoft Access, que con tanto esmero has desarrollado o utilizado, de repente deja de funcionar al ser trasladada a un nuevo ordenador, la frustración puede ser inmensa. Este escenario, sorprendentemente común, a menudo se debe a un problema con las "referencias" o "librerías" que la aplicación necesita para operar correctamente. Pero, ¿qué son exactamente y cómo podemos evitar que se conviertan en un dolor de cabeza constante? Este artículo desentraña el misterio detrás de las referencias rotas en Access, ofreciendo soluciones prácticas, tanto manuales como automatizadas, para asegurar que tus aplicaciones funcionen sin interrupciones, sin importar dónde se ejecuten.

¿Cómo obtener una referencia a la librería asoftlib.accd*?
ATENCION: si no estamos seguros si necesitamos la referencia hay que consultar al técnico que lo ha desarrollado. Siempre debe existir una referencia a la librería ASOFTLIB.accd* Lo que pasa que en algunos casos se usa la ACCDE y otros la ACCDA Hay que mirar en la carpeta donde está el programa y ver cual existe.
Índice de Contenido

¿Qué son las Librerías y Referencias en Microsoft Access?

En el contexto de Microsoft Access y la programación con VBA (Visual Basic for Applications), las "librerías" o "referencias" son archivos externos que contienen colecciones de objetos, funciones y procedimientos predefinidos que tu aplicación puede utilizar. Piensa en ellas como cajas de herramientas especializadas. Por ejemplo, si tu aplicación necesita interactuar con bases de datos, probablemente usará la librería de Objetos de Acceso a Datos (DAO) o ActiveX Data Objects (ADODB). Si necesitas funcionalidades de Microsoft Outlook para enviar correos, tu aplicación hará referencia a la librería de objetos de Outlook. Estas referencias son cruciales porque proporcionan el "vocabulario" y las "reglas" que tu código VBA necesita para comunicarse con otros programas o componentes del sistema operativo.

Las librerías más comunes y esenciales para casi cualquier aplicación de Access incluyen:

  • Visual Basic for Applications (VBA): El entorno de programación principal.
  • Microsoft Access .x Object Library: Permite a tu código interactuar con los objetos propios de Access (formularios, informes, consultas, etc.).
  • Microsoft DAO 3.x Object Library: Fundamental para la manipulación de datos en bases de datos Access.
  • Microsoft ActiveX Data Objects (ADODB): Otra opción potente para el acceso a datos, especialmente útil para interactuar con bases de datos externas o servidores.

Cada una de estas librerías tiene su propia versión (por ejemplo, DAO 3.51, DAO 3.6, o Access 12.0 Object Library). La compatibilidad entre estas versiones es un factor crítico para el correcto funcionamiento de tu aplicación.

El Problema de las Referencias Rotas o "Faltantes"

El escenario clásico: una aplicación de Access funciona perfectamente en tu máquina de desarrollo, pero al moverla a otro ordenador, comienzan a aparecer mensajes de error crípticos como "Compile Error: Can't Find Project or Library" o "Type Mismatch". Esto ocurre porque las referencias de la aplicación están "rotas" o "faltan".

¿Por qué se rompen las referencias?

La razón principal es que la ruta absoluta a la que se refiere una librería ha cambiado. Cuando desarrollas una aplicación, Access registra la ubicación exacta (ruta) de cada librería. Si esa aplicación se traslada a un nuevo ordenador donde las librerías están instaladas en una ruta diferente, o si una versión específica de una librería simplemente no existe, Access no puede encontrarlas. Otros motivos incluyen:

  • Diferentes versiones de Office/Access: Un equipo puede tener Access 2010 y otro Access 2016, lo que implica diferentes versiones de las librerías internas de Access.
  • Componentes no instalados: Algunas librerías, especialmente las de terceros (OCX, DLL), pueden no estar presentes en el nuevo sistema.
  • Actualizaciones del sistema operativo o software: A veces, las actualizaciones pueden alterar las rutas o versiones de las librerías.
  • Problemas de registro: Las librerías deben estar correctamente registradas en el sistema operativo para ser encontradas.

Cuando una referencia está rota, el código que depende de ella no puede compilarse ni ejecutarse, lo que lleva a errores en tiempo de ejecución o incluso impide que la aplicación se abra.

Diagnóstico y Solución Manual de Referencias Rotas

Aunque puede parecer intimidante, solucionar manualmente las referencias rotas es un proceso directo que todo desarrollador de Access debería conocer. Es un paso clave en la depuración de aplicaciones.

Pasos para activar o reubicar una referencia manualmente:

  1. Abrir Access en modo seguro: Para evitar que la aplicación intente arrancar con las referencias rotas, mantén presionada la tecla SHIFT mientras haces doble clic en el archivo .accdb o .mdb de tu aplicación. No sueltes SHIFT hasta que la ventana de Access se abra, mostrando solo la lista de objetos (tablas, consultas, formularios, etc.), sin ejecutar ningún código de inicio.
  2. Acceder al Editor de VBA: Una vez en Access, en el panel de navegación de objetos, busca cualquier módulo (si no tienes uno, puedes crear uno temporalmente). Haz clic derecho sobre él y selecciona "Modo Diseño" o "Abrir". Esto te llevará al Editor de Visual Basic for Applications.
  3. Revisar las Referencias: Dentro del Editor de VBA, ve al menú "Herramientas" y selecciona "Referencias...".
  4. Identificar y corregir: En la ventana "Referencias", verás una lista de todas las librerías a las que tu aplicación hace referencia. Las referencias rotas estarán marcadas con la palabra "FALTA:" o "MISSING:" al principio de su nombre.
    • Si no necesitas la referencia: Si estás seguro de que tu aplicación no utiliza esa funcionalidad (por ejemplo, una referencia a Outlook si la aplicación ya no envía correos), simplemente desmarca la casilla junto a la referencia "FALTA:".
    • Si necesitas la referencia: Si la referencia es esencial, deberás encontrar la versión correcta en el nuevo ordenador. Desmarca la referencia "FALTA:". Luego, busca en la lista una entrada idéntica pero sin la etiqueta "FALTA:", o navega hasta la ubicación donde se encuentra la versión correcta del archivo (usando el botón "Examinar..." si es necesario) y márcala. Por ejemplo, si falta "Microsoft Outlook 16.0 Object Library", desmárcala y busca "Microsoft Outlook 15.0 Object Library" o la versión que esté instalada en el equipo.
  5. Casos especiales:
    • Librerías de aplicación específicas (e.g., asoftlib.accd*): Algunas aplicaciones usan sus propias librerías (como asoftlib.accde o asoftlib.accdb). Asegúrate de que estos archivos estén copiados en la misma carpeta que tu aplicación principal en el nuevo ordenador y que la referencia apunte a la versión correcta (ACCDE si existe, si no ACCDB).
    • Referencias a Outlook: Si la aplicación se desarrolló con una versión más reciente de Outlook y se traslada a un equipo con una versión anterior, la referencia se romperá. Desmarca la referencia "FALTA:" y busca la versión de Outlook instalada en el equipo actual para marcarla.
  6. Guardar y Probar: Cierra el Editor de VBA y luego cierra y vuelve a abrir tu aplicación de Access (esta vez sin la tecla SHIFT). Debería funcionar correctamente.

Solución Automática: El Código de Javier Gómez para la Gestión de Referencias

Para aquellos que gestionan múltiples aplicaciones o necesitan una solución más robusta y menos propensa a errores manuales, Javier Gómez propone una rutina VBA que automatiza la reparación de referencias rotas. Esta aproximación mejora la estabilidad y la portabilidad de tus aplicaciones.

Concepto y Funcionamiento:

La idea central es que, al iniciar la aplicación, un código se encarga de verificar la integridad de todas las referencias. Si encuentra alguna rota, intenta repararla automáticamente. Para que esto funcione, es recomendable crear un subdirectorio llamado Referencias dentro de la carpeta de tu aplicación, donde copies las librerías que no son básicas o que suelen dar problemas (archivos con extensiones como MDA, MDB, MDE, DLL, OCX, OLB, TLB).

Implementación del Código (Descripción):

El código consta de dos partes principales:

  1. En el evento Al Abrir (Form_Open) del formulario de inicio:

    Aquí se realiza una llamada a una función que comprueba las referencias. Si la función detecta referencias rotas, muestra un mensaje al usuario y cierra la aplicación, indicando que debe intentarlo de nuevo (presumiblemente después de que el código intente la reparación).

    Private Sub Form_Open(Cancel As Integer)
    On Error GoTo Err_Local
    If funReferenciaRota = True Then
    MsgBox "Las Referencias / Librerias de esta aplicacion estan mal...", vbExclamation, "Referencias / Librerias"
    Cancel = True
    Application.DoCmd.Quit
    End If
    Exit Sub
    Err_Local:
    MsgBox Err.Description, vbCritical, "Error No.: " & Err.Number
    Resume Exit_Local
    End Sub

  2. En un Módulo General (Función funReferenciaRota):

    Esta es la "inteligencia" del sistema. La función itera a través de todas las referencias de la aplicación (Application.References). Por cada referencia, verifica si está rota (accRef.IsBroken = True). Si lo está, realiza los siguientes pasos:

    • Informa al usuario sobre la referencia rota (nombre, versión, ruta, GUID).
    • Pregunta si desea que el programa intente arreglarla automáticamente.
    • Si el usuario acepta, la función primero intenta remover la referencia rota (References.Remove accRef).
    • Luego, según el tipo de referencia (identificado por su nombre de archivo o GUID), intenta añadirla de nuevo:
      • Para librerías comunes como vbe6.dll (VBA), msacc.olb (Access Object Library) o dao360.dll (DAO), intenta añadirla usando su GUID y versión (References.AddFromGuid strGUID, lngMajor, lngMinor). Esto es efectivo porque estas librerías suelen tener GUIDs estables y el sistema las encuentra por sí mismo si están instaladas.
      • Para librerías personalizadas o menos comunes (como MiReferencia.mda definida en la constante cRef_1), busca el archivo en el subdirectorio Referencias. Si lo encuentra, lo añade desde esa ruta (References.AddFromFile (Application.CurrentProject.Path & "\" & cSubRuta & "\" & cRef_1)). Si no lo encuentra, informa al usuario.
    • La función devuelve True si se encontraron referencias rotas que no pudieron ser reparadas, o False si todo está en orden o se reparó con éxito.

Este sistema de automatización es invaluable para la distribución de aplicaciones, ya que reduce drásticamente la necesidad de intervención manual por parte del usuario final.

Identificando sus Referencias: La Utilidad XecSaberQueReferenciasUso

Antes de intentar solucionar un problema o para simplemente documentar las dependencias de su aplicación, es útil saber exactamente qué referencias está utilizando. Javier Gómez también proporciona una utilidad sencilla para esto:

Private Sub XecSaberQueReferenciasUso()
Dim intX As Integer
For intX = 1 To Application.References.Count
Debug.Print "Nombre: " & Application.References(intX).Name
Debug.Print "Ruta Completa: " & Application.References(intX).FullPath
Debug.Print "GUID: " & IIf(Application.References(intX).Guid = "", "No hay GUID", Application.References(intX).Guid)
Debug.Print ""
Next intX
MsgBox "Fin, ahora se abrira la ventana de inmediato", vbInformation, "Ventana inmediato"
Application.DoCmd.RunCommand acCmdDebugWindow
End Sub

Al ejecutar este procedimiento desde el Editor de VBA, la ventana "Inmediato" (accesible con Ctrl + G) mostrará una lista detallada de cada referencia activa en su proyecto, incluyendo su nombre, la ruta completa del archivo y su GUID (identificador único global). Esta herramienta de diagnóstico es excelente para entender las dependencias de su aplicación.

Listado de Referencias Comunes y sus Versiones en Access

Comprender las versiones y ubicaciones predeterminadas de las librerías más comunes es fundamental para la resolución de problemas. La siguiente tabla resume las referencias clave y su comportamiento en diferentes versiones de Access:

Nombre de la ReferenciaVersión de AccessVersión de la LibreríaTipo de ArchivoUbicación por Defecto (Versión Inglesa)
VBA
(Visual Basic For Applications)
2007N/ADLLC:\Program Files\Common Files\Microsoft Shared\vba\vba6\vbe6.dll
2003, 2002, 2000, 97N/ADLLC:\Program Files\Common Files\Microsoft Shared\vba\vba332.dll
Access
(Microsoft Access .x Object Library)
200712.0OLBC:\Program Files\Microsoft Office\Office12\msacc.olb
200311.0OLBC:\Program Files\Microsoft Office\Office11\msacc.olb
200210.0OLBC:\Program Files\Microsoft Office\Office10\msacc.olb
20009.0OLBC:\Program Files\Microsoft Office\Office\msacc9.olb
978.0OLBC:\Program Files\Microsoft Office\Office\msacc8.olb
DAO
(Microsoft DAO 3.x Object Library o Microsoft Office 12.0 Access database engine)
200712.0 (ACCDB)DLLC:\Program Files\Microsoft Office\Office12\acedao.dll
2007 (MDB), 2003, 2002, 20003.6DLLC:\program files\common files\microsoft shared\dao\dao360.dll
973.51DLLc:\program files\common files\microsoft shared\dao\dao350.dll
ADODB
(Microsoft ActiveX Data Objects 2.x Library)
Todas las versiones2.5 (ejemplo)TLBC:\Program Files\Common Files\System\ADO\msado25.tlb

Preguntas Frecuentes sobre Librerías y Referencias en Access

¿Por qué mi aplicación de Access funciona en un ordenador pero no en otro?

La razón más común es que las rutas o versiones de las librerías (referencias) que tu aplicación utiliza no coinciden entre los dos ordenadores. Cada aplicación de Access depende de archivos externos para su funcionalidad, y si estos no se encuentran o no son la versión correcta, la aplicación fallará.

¿Es posible usar una versión anterior de una librería si la más reciente no está disponible?

Generalmente, no es recomendable. Las referencias deben ser de la misma versión o una versión superior a la que se utilizó durante el desarrollo. Utilizar una versión inferior puede llevar a errores de "Type Mismatch" o "Method/Property not found" debido a cambios en la interfaz de la librería o la falta de funcionalidades.

¿Cuáles son las librerías esenciales que toda aplicación de Access necesita?

Las dos librerías mínimas e imprescindibles son "Visual Basic for Applications" y "Microsoft Access .x Object Library". Adicionalmente, la mayoría de las aplicaciones necesitarán "Microsoft DAO 3.x Object Library" o "Microsoft ActiveX Data Objects 2.x Library" para la gestión de datos.

¿Qué significa el error "Type Mismatch" en el contexto de las librerías?

Este error ("No coinciden los tipos" en español) a menudo indica que tu aplicación está intentando usar una librería que tiene una versión incorrecta. El código espera un tipo de dato o un objeto específico de una versión de la librería, pero la versión presente en el sistema proporciona algo diferente o incompatible.

¿Cómo puedo evitar problemas de referencias en el futuro?

La mejor práctica es desarrollar en un entorno que simule lo más posible el entorno de producción. Si distribuyes tu aplicación, considera:

  • Utilizar la solución automática de Javier Gómez para la reparación de referencias.
  • Distribuir las librerías no estándar junto con tu aplicación en un subdirectorio dedicado.
  • Asegurarte de que los usuarios finales tengan las versiones de Access y Outlook (si aplica) compatibles con tu desarrollo.
  • Compactar y reparar la base de datos regularmente.

¿Qué es un GUID y por qué es importante para las librerías?

GUID significa "Global Unique Identifier" (Identificador Único Global). Es un número de 128 bits que se utiliza para identificar de forma única un componente de software o una librería. Las librerías de Microsoft a menudo se registran con un GUID. En el contexto de Access, usar el GUID para añadir una referencia (References.AddFromGuid) es más robusto que usar la ruta del archivo, ya que el sistema operativo puede encontrar la librería por su GUID si está correctamente registrada, incluso si su ruta física ha cambiado.

Conclusión

La gestión de librerías y referencias en Microsoft Access es un aspecto fundamental para la robustez y portabilidad de tus aplicaciones. Comprender qué son, por qué se rompen y cómo diagnosticarlas y repararlas, ya sea manual o automáticamente, te ahorrará incontables horas de frustración. Al adoptar buenas prácticas y, si es posible, integrar soluciones como la propuesta por Javier Gómez, puedes asegurar que tus aplicaciones de Access funcionen de manera fiable en cualquier entorno, garantizando una una experiencia de usuario fluida y sin sobresaltos. La clave reside en la prevención y un buen diagnóstico.

Si quieres conocer otros artículos parecidos a Dominando las Librerías y Referencias en Access puedes visitar la categoría Librerías.

Subir