REFERENCIAS LIBERIAS ACCESS

23- Referencias o Librerías  (Parte 2)

Autor: Javier Gomez (Javier.Mil

(Válido para cualquier versión de Access)

! Como evitar que falten referencias o librerias !

 

 
 
El siguiente código sirve para arreglar Referencias / Librerías rotas (Faltan o Missing).
(Se supone que el código de la aplicación esta DEPURADO y COMPACTADO)
 
 
 
 
En ocasiones, al trasladar una aplicación de un ordenador a otro (ordenador), incomprensiblemente la aplicación deja de funcionar. En la mayoría de los casos es debido a que la ruta de la referencias o librerías esta rota es decir ha cambiado su ruta absoluta, y por tanto hay que reubicar las referencias / librerías a la nueva ruta o rutas de forma manual.

Muchas Referencias o Librerías tienen su propia versión, por ejemplo: DAO x.x Object Libray. Es muy importante que el numero de versión x.x a la que te refieres sea la librería apropiada y que además este presente en el PC donde vaya ha funcionar la aplicación.  Si te refieres a la referencia incorrecta, recibirás errores del "Type Mismatch"   o  “No coinciden los tipos” .
Con la siguiente rutina se puede hacer de forma automática .
 
 
Para que el siguiente código funcione correctamente hay que crear un subDirectorio llamado Referencias donde se guardaran todas aquellas referencias / librerias que No suelen ser basicas , No son comunes o que den problemas. Normalmente las referencias suelen tener las siguientes extensiones de fichero: MDA , MDB, MDE , DLL , OCX , OLB, TLB
Lógicamente en el nuevo ordenador también, se deberían copiar dichas referencias en un subdirectorio llamado Referencias
 
 
Poner el siguiente código en el formulario de inicio en el evento al abrirse
 
Private Sub Form_Open(Cancel As Integer)
    On Error GoTo Err_Local

    Rem comprueba que esten las Referencias/Librerias necesarias
    If funReferenciaRota = True Then
        MsgBox "Las Referencias / Librerias de esta aplicacion estan mal" & vbNewLine & _
               "ahora se cerrara la aplicacion y vuelve ha intentarlo", vbExclamation, "Referencias / Librerias"
        Cancel = True
        Application.DoCmd.Quit
    Else
        '        MsgBox "Las Referencias/Librerias de esta aplicacion  estan bien", vbInformation

    End If

Exit_Local:
    Exit Sub
 
Err_Local:
    MsgBox Err.Description, vbCritical, "Error No.:  " & Err.Number
    Resume Exit_Local
End Sub
 
 
 
Poner el siguiente codigo en un MODULO general
Public Function funReferenciaRota() As Boolean
'---------------------------------------------------------------------------------------
' Procedure : funReferenciaRota
' DateTime  : 27/12/2007  10:32
' Author     :  Javier Gomez
' email        : 
javier.news@gmail.com
' WEB       :  https://www.accessdemo.info
' Purpose   : Comprueba Referencias / Librerias rotas
'---------------------------------------------------------------------------------------
Const cSubRuta As String = "Referencias" '<< Nombre del subdirectorio
Const cRef_1 As String = "MiReferencia.mda" '<< Nombre de la referencia & libreria MDA , MDB, MDE , DLL , OCX , OLB, TLB etc  ,...
Dim accRef As Access.Reference
Dim strTemp As String
Dim strGUID As String
Dim lngMajor As Long
Dim lngMinor As Long
Dim intLoop As Integer

    On Error GoTo Err_Local

    For intLoop = Application.References.Count To 1 Step -1
        Set accRef = References(intLoop)
       
       
        If accRef.IsBroken = True Then
            Rem referencia rota
            funReferenciaRota = True
            MsgBox "Nombre:  " & vbTab & accRef.Name & vbNewLine & _
                   "Version: " & vbTab & accRef.Major & "." & accRef.Minor & vbNewLine & _
                   "Ruta:  " & vbTab & accRef.FullPath & vbNewLine & _
                   "GUID:  " & vbTab & accRef.Guid, vbCritical, "Error"

            Rem preparacion en caso de utilizar fichero (Extraigo el nombre de la referencia)
            strTemp = accRef.FullPath
            strTemp = Mid(strTemp, InStrRev(strTemp, "\") + 1)
            Rem preparacion encaso de utilizar GUID
            strGUID = accRef.Guid
            lngMajor = accRef.Major
            lngMinor = accRef.Minor

            If MsgBox("¿ Quieres que el programa arregle automaticamente" & vbNewLine & _
                      "la libreria / referencia que falta ?" & vbNewLine & vbNewLine & _
                      "(En caso de No aceptar deberas arreglarlo manualmente)", vbYesNo + vbQuestion + vbDefaultButton2, "Referencia / Libreria") = vbYes Then
 
                Rem quito la referencia rota
                On Error Resume Next
                References.Remove accRef
                On Error GoTo 0
 
                Select Case strTemp
                    Case "vbe6.dll"
                        Rem (VBA) anado la referencia que falta sabiendo el GUID
                        References.AddFromGuid strGUID, lngMajor, lngMinor
                        funReferenciaRota = False

                    Case "msacc.olb"
                        Rem  (ACCESS) anado la referencia que falta sabiendo el GUID
                        References.AddFromGuid strGUID, lngMajor, lngMinor
                        funReferenciaRota = False

                    Case "dao360.dll"
                        Rem DAO anado la referencia que falta sabiendo el GUID
                        References.AddFromGuid strGUID, lngMajor, lngMinor
                        funReferenciaRota = False

                    Case cRef_1
                        If Len(Dir(Application.CurrentProject.Path & "\" & cSubRuta & "\" & cRef_1, vbArchive)) > 0 Then
                            Rem anado la refencia que falta desde un fichero
                            References.AddFromFile (Application.CurrentProject.Path & "\" & cSubRuta & "\" & cRef_1)
                            funReferenciaRota = False
                        Else
                            MsgBox "No se ha encontrado la libreria necesaria", vbExclamation, "Falta Libreria / referencia"
                            funReferenciaRota = True
                        End If

                    Case Else
                        Rem referencia No prevista
                        funReferenciaRota = True
                        MsgBox "Referencia / libreria No prevista", vbExclamation, "Falta Libreria / referencia"
                End Select
            End If
        End If
    Next intLoop
 
Exit_Local:
    Exit Function
 
Err_Local:
    funReferenciaRota = True
    MsgBox Err.Description, vbCritical, Err.Number
    Resume Exit_Local
End Function
 
 
 


Utilidad para saber cuales son las referencias / librerias que uso
Ponlo en un MODULO general
La misma versión algo mejorada:

Private Sub XecSaberQueReferenciasUso()

'---------------------------------------------------------------------------------------

' Procedure : XecSaberQueReferenciasUso

' DateTime : 19/02/2009 12:01

' Author : Javier Gomez

' email : javier.news@gmail.com

' WEB : https://www.accessdemo.info

' Purpose : Utilidad para saber cuales son la referencias / librerías de uso

'---------------------------------------------------------------------------------------

    Dim intX As Integer

    Dim strReferencia As String

    On Error GoTo Err_Local

    For intX = 1 To Application.References.Count

        Debug.Print Application.References(intX).Name

        strReferencia = Application.References(intX).FullPath

        strReferencia = Mid$(strReferencia, InStrRev(strReferencia, "\") + 1)

        Debug.Print strReferencia

        Debug.Print Application.References(intX).FullPath

        If Application.References(intX).Guid = "" Then

            Debug.Print "No hay GUID"

        Else

            Debug.Print Application.References(intX).Guid

        End If

        Debug.Print ""

    Next intX

    MsgBox "Fin, ahora se abrira la ventana de inmediato", vbInformation, "Ventana inmediato"

 

    Application.DoCmd.RunCommand acCmdDebugWindow

Exit_Local:

    Exit Sub

 

Err_Local:

    Debug.Print "Falta referencia= " & Application.References(intX).Name

    Resume Next

End Sub



Listado de referencias según la versión de Access

En esta tabla se incluyen las referencias correspondientes a su versión de Access, junto con el nombre del archivo si la referencia esta "Falta" o esta "Missing":

 

Nombre Referencia Access Ver. File type Ubicacion por defecto (version Access inglesa)
VBA
(Visual Basic For Applications)
2007   C:\Program Files\Common Files\Microsoft Shared\vba\vba6\vbe6.dll
2003
2002
2000
97 C:\Program Files\Common Files\Microsoft Shared\vba\vba332.dll
Access
(Microsoft Access .x Object Library)
2007 12.0   C:\Program Files\Microsoft Office\Office12\msacc.olb
2003 11.0 C:\Program Files\Microsoft Office\Office11\msacc.olb
2002 10.0 C:\Program Files\Microsoft Office\Office10\msacc.olb
2000 9.0 C:\Program Files\Microsoft Office\Office\msacc9.olb
97 8.0 C:\Program Files\Microsoft Office\Office\msacc8.olb
DAO
(Microsoft DAO 3.x Object Library
or
Microsoft Office 12.0 Access database engine)
2007 12.0 ACCDB C:\Program Files\Microsoft Office\Office12\acedao.dll
MDB C:\program files\common files\microsoft shared\dao\dao360.dll
2003 3.6  
2002
2000
97 3.51   c:\program files\common files\microsoft shared\dao\dao350.dll
ADODB
(Microsoft ActiveX Data Objects 2.x Library)
all versions   C:\Program Files\Common Files\System\ADO\msado25.tlb


 
 

Lamp Para leer mas: Como activar referencias / librerías (parte I)

 

 

[Atrás]