Referencias faltantes

Dudas sobre Tablas, Consultas, Formularios, Informes...
mam222
Nivel 4
Mensajes: 95
Registrado: Jue Oct 05, 2017 7:18 pm

Referencias faltantes

Mensajepor mam222 » Mié Ene 03, 2018 12:16 am

Buenas tardes a todos. Recientemente recibimos un par de dlls que van a reemplazar a un par que ya estaban referenciadas en mi proyecto de Access. (Se identifican igual). Un proveedor externo les agregó nueva funcionalidad.

Entré al cuadro de diálogo "Referencias" y primero las eliminé, esperando que con sólo volverlas a copiar a su ubicación original y volviendo a agregarlas en las referencias del proyecto, podría usarlas sin ningún problema.

Después de borrarlas, salvé la BD, la reabrí, y al accesar otra vez el diálogo "referencias", noté que simplemente no estaban. Por supuesto que al compilar el proyecto me mandó errores al tratar de utilizarlas en el código.

Pero, no se supone que el cuadro de diálogo debería decirme "FALTA", por cada una de las referencias que quité ?. Después, aunque ya están agregadas las referencias al proyecto, cuando intento asignar un valor a uno de sus miembros, me manda un error "El componente Activex no puede crear el objeto".

Agradeceré alguna ayuda o comentario.


Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 936
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Referencias faltantes

Mensajepor Sveinbjorn » Mié Ene 03, 2018 8:38 am

mam222 escribió:Pero, no se supone que el cuadro de diálogo debería decirme "FALTA", por cada una de las referencias que quité ?


Pues no, si quitas las referencias, las "desregistras" de tu BD, y no pone FALTA, lo mismo que todo el listado de referencias disponibles no marcadas.

El FALTA te lo pone cuando tienes una referencia registrada, pero la librería (dll o ocx) no la localiza, por ejemplo:

1º/ Tienes registrada en tu BD original la referencia Microsoft Excel 14.0 y llevas la BD a un PC con Office 2007 (aunque a veces sí reconoce la biblioteca inferior...)

2º/ En tu BD original tienes registrada una librería, por ejemplo la MSCAL.OCX para tener el control calendario, y llevas la BD a otro PC en que no existe ese archivo MSCAL.OCX

Un saludo
Sveinbjorn El Rojo

mam222
Nivel 4
Mensajes: 95
Registrado: Jue Oct 05, 2017 7:18 pm

Re: Referencias faltantes

Mensajepor mam222 » Mié Ene 03, 2018 4:09 pm

Gracias Amigos; revisaré lo que me han enviado y comentado.

mam222
Nivel 4
Mensajes: 95
Registrado: Jue Oct 05, 2017 7:18 pm

Re: Referencias faltantes

Mensajepor mam222 » Dom Ene 07, 2018 5:49 pm

Hola, buenos fríos días a todos:

Después de leer todo lo que me han enviado y seguir investigando sobre el problema que traigo con las dlls del sistema, he llegado a la conclusión de que las nuevas dlls que nos enviaron para sustituir las anteriores referenciadas en el sistema, NO deben ser registradas en Windows. Tal vez sea por esto que el regsvr32 no me permite hacerlo; tal vez tenga algo que ver si son COM ó no, ó Dios sabe que razón sea. De hecho, registré un par de dlls y ocx que no tienen nada que ver con mi sistema de access tan sólo para ver si el sistema operativo las trabaja bien y efectivamente, así fué, las registró perfectamente.

Deduzco entonces que es en mi BD fuente de access en donde se "desregistraron" al momento de copiarlas y reemplazarlas.

- Hay alguna manera de "refrescar" las referencias del sistema para que reconozcan las nuevas ?, ó habrá que re-instalar desde el principio el sistema, pero ya incluyendo las librerias nuevas ?

Si hay alguna manera de hacer ésto ó algún sitio donde investigarlo, agradecería su amable ayuda otra vez. La única alternativa que me quedaría sería reprogramar toda la funcionalidad de las dlls a mano, desde cero, y no sé si la empresa vaya a autorizar ésto, aunque tal vez sea lo mejor.

pitxiku
VIP
Reto01
Mensajes: 153
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Referencias faltantes

Mensajepor pitxiku » Lun Ene 08, 2018 8:20 pm

Existen 2 tipos de DLL: las ActiveX que deben ser registradas, y las que no son ActiveX que no hace falta registrarlas. Para saber si tu DLL es ActiveX o no, lo más sencillo es preguntar a quien lo ha hecho ;)

- Si es ActiveX, y hay un cambio de versión y no hay instalador, lo normal es desregistrar primero la DLL vieja:

regsvr32 /u [nombre y ruta de la dll]

Para luego poder quitar el archivo viejo, colocar el nuevo y pasar a registrarla:

regsvr32 [nombre y ruta de la dll]

- Si no es ActiveX, prueba a agregarla a la lista de referencias. En el editor de VBA, abre las referencias y pulsa el botón Examinar. Ahí te sale una ventana para escoger el archivo deseado. Selecciona tu DLL y prueba a ver si así funciona.

Avatar de Usuario
javier.mil
Colaborador
Reto01
Mensajes: 28
Registrado: Jue Mar 16, 2017 5:21 pm

Re: Referencias faltantes

Mensajepor javier.mil » Lun Ene 08, 2018 10:26 pm

Buenas,

El tema de la Referencias o Librerías pueden dar problemas por diversas causas cuando se cambia de ordenador , cuando se cambia de versión de Access , cuando se cambia de versión de Windows , cuando se cambia de versión del propia DLL , en fin los motivos pueden ser muchos y variados y es difícil a priori dar una "receta" genérica que sirva para todos los casos. Perooooo

Respondiendo a tu pregunta la forma mas simple para evitar problemas seria que junto a tu aplicación adjuntes la Referencias o Librería necesarias para el buen funcionamiento de tu aplicación.

De todos modos te dejo un par de enlaces para que le pegues un vistazo

http://www.accessdemo.info/articulos/como-activar-referencias-access-1.html
http://www.accessdemo.info/articulos/como-activar-referencias-access-2.html

Suerte

mam222
Nivel 4
Mensajes: 95
Registrado: Jue Oct 05, 2017 7:18 pm

Re: Referencias faltantes

Mensajepor mam222 » Lun Ene 08, 2018 10:42 pm

Gracias por tus observaciones, amigo Pitziku. Te puedo asegurar lo siguiente:

- La dll con la que traigo el problema NO es un objeto activex; esto es un hecho. De hecho reside en la misma ruta que la aplicación, no en las carpetas del sistema.

- Ya la he dado de baja de la lista de referencias, copio la nueva a la dirección indicada (en donde residía la anterior; sustituyendola por la nueva), y vuelvo a agregarla a las referencias mediante su ubicación con la tecla "examinar"; con todo y eso, me sigue enviando el error 429
"El componente Activex no puede crear el objeto", cuando trato de asignar un valor a una de sus propiedades.

De hecho, antes de llegar al punto de quiebre estoy analizando toda la colección "References" de la aplicación con un "for each" y en efecto, ésa referencia si existe en la colección referencias del proyecto. Esto me tiene completamente desconcertado. Aparentemente estoy haciendo todo bien.

Ó el hecho de que la referencia esté en la lista no es suficiente para que trabaje bien ?. Hay manera de ver si está activa ó fuera de funcionamiento, ó algo así ?

Muchas Gracias amigo Javier.Mil. Voy a checar tus sugestiones.

Avatar de Usuario
javier.mil
Colaborador
Reto01
Mensajes: 28
Registrado: Jue Mar 16, 2017 5:21 pm

Re: Referencias faltantes

Mensajepor javier.mil » Mar Ene 09, 2018 12:37 am

Para saber si tienes una Referencia rota prueba con el siguiente codigo


Código: Seleccionar todo

 Public Function funReferenciaRota() As Boolean
'---------------------------------------------------------------------------------------
' Procedure : funReferenciaRota
' DateTime  : 27/12/2007  10:32
' Author     :  Javier Gomez
' email        :  javier.news@gmail.com
' WEB       :  http://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


Logicamente para que Access detecte si falta alguna Referencia antes tienes que haberla referenciado dentro de Access

mam222
Nivel 4
Mensajes: 95
Registrado: Jue Oct 05, 2017 7:18 pm

Re: Referencias faltantes

Mensajepor mam222 » Mar Ene 09, 2018 4:24 pm

Gracias Javier. Si, ya verifiqué con ese código toda la colección de referencias para ver si alguna estaba rota, y no fué asi.

No sé que demonios esté pasando. Estoy a punto de volverme loco. Ahora voy ver si hay algún problema con el registro de windows; a ver si por ahi, ó a ver si consigo que me compren una PC nueva. Con la que estoy trabajando suele apagarse ó tardar en prender en la mañana.

El sistema con el que estoy trabajando está desarrollado en Access 2010; ya conseguí autorización para pasarlo a Access 2016, a ver si no me salen más sorpresas. Mi falta de experiencia con Access me está pasando la factura. (Aunque éste NO es un problema de Access; al menos así lo supongo)


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado