Referenciar módulos de clase de una base de datos desde otra base de datos y crear nuevos objetos


Volver
'*********************************************************
' Si alguna vez hemos intentado crear una instancia de un
' módulo de clase contenido en un fichero de Access (mdb,
' mde...), habremos podido comprobar que no se puede.
'
' Esto es así porque las clases contenidas en un fichero
' de Access tienen solamente las propiedades:
'
'       Private -> Access 97
' o
'       Private
'       PublicNotCreatable -> Access 2000 o superior
'
' La propiedad Private se refiere a que a esa clase sólo
' podrá accederse desde dentro de la aplicación que la
' contiene.
'
' La propiedad PublicNotCreatable se refiere a que SÍ se
' podrá referenciar desde fuera de la aplicación que la
' contiene, pero en cambio, no podremos crear ninguna
' instancia de ella, es decir, podremos hacer esto:
'
'   Dim x As ClaseExterna
'
' pero no podremos hacer esto otro
'
'   Set x = New ClaseExterna
'
' con lo cual, nuestro gozo en un pozo :-S
'
' ¿Qué hacer, entonces?... Pues bien, se me ha ocurrido
' un pequeño truco para lograrlo. Podemos empezar... mmm
' ... no... mejor pongamos un ejemplo, que yo me explico
' como un libro cerrado :-)
'
' :
'
' Creemos una base de datos nueva y dentro de ella
' creemos un módulo de clase llamado "Mensaje". Si
' trabajamos con Access 2000 o superior, activemos la
' ventana de Propiedades (F4 o Menú - Ver - Ventana
' propiedades) y en la propiedad llamada Instancing
' escojamos "PublicNotCreatable". Si trabajamos con
' Access 97 vemos que no tenemos esta posibilidad,
' pero no importa, este truco también servirá, eso sí,
' con una pequeña variación.
'
' En nuestro módulo de clase, copiemos y peguemos este
' código:
'
'*********************** CÓDIGO **************************
Public Nombre As String

Public Sub Bienvenida()
    If Me.Nombre = "" Then Me.Nombre = "Desconocido"
    MsgBox "Hola " & Nombre & ", ¿cómo estás?"
End Sub

Private Sub Despedida()
    If Me.Nombre = "" Then Me.Nombre = "Desconocido"
    MsgBox "Adiós " & Nombre & ", hasta la próxima"
End Sub

Private Sub Class_Terminate()
    Despedida
End Sub
'********************FIN CÓDIGO **************************
'
' Esta clase tiene una propiedad pública (Nombre), un
' método público (Bienvenida) y un método privado
' (Despedida) que se ejecutará en el momento de destruirse
' la clase. Como podéis ver, he intentado no complicarme
' mucho la vida...
'
' Luego creemos un módulo estandar (el nombre no importa).
' En este módulo estandar crearemos una función pública
' con el siguiente código
'
'*********************** CÓDIGO **************************
Public Function IMensaje() As Mensaje
    Set IMensaje = New Mensaje
End Function
'********************FIN CÓDIGO **************************
'
' Cerremos la base de datos y guardemos los cambios.
'
' Seguidamente escojamos una base de datos cualquiera,
' vayamos al editor de Visual Basic, Menú - Herramientas -
' Referencias..., pulsemos el botón Examinar, busquemos
' la base de datos que contiene el módulo de clase que
' hemos creado anteriormente y, una vez hallada, la
' seleccionaremos, aceptando los cambios.
'
' Ahora pasemos a la acción: Creemos una pequeña rutina de
' prueba:
'
'*********************** CÓDIGO **************************
' Access 2000 o superior
Sub ProbarReferencias()
Dim msg As Mensaje

    Set msg = IMensaje
    msg.Nombre = "Juan M Afan"
    msg.Bienvenida
    Set msg = Nothing
    
End Sub

' Access 97
Sub ProbarReferencias97()
Dim msg As Object

    Set msg = IMensaje
    msg.Nombre = "Juan M Afan"
    msg.Bienvenida
    Set msg = Nothing
    
End Sub
'********************FIN CÓDIGO **************************
'
' Si utilizamos Access 97 tendremos el inconveniente de no
' poder ver las propiedades y métodos al escribir el
' nombre del objeto seguido del punto (Intellisense), pero
' en fin... creo que es un mal menor ("Algo es algo, dijo
' un calvo encontrando un pelo en la sopa").
' ' Espero que os sirva de ayuda. '
'*********************************************************
Contactar Última actualización 2/06/2004     © Juan M. Afán deRibera