![]() |
|
![]() |
|
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"). |
![]() |
Última actualización 2/06/2004 © Juan M. Afán deRibera |