[AccessD] Where does WithEvents go?

Shamil Salakhetdinov shamil at smsconsulting.spb.ru
Fri Jun 6 17:49:35 CDT 2003


<<<
> If MyClass is in a lib, then this dim statement doesn't work since MyClass
> isn't exposed.
>>>
John,

But you can dimension the class specifically as that class type if this
custom class's Instancing property is set to PublicNotCreatable. Then you
create instance of this class using wrapper/helper function. And you can
sink an event of this class declared as public.

Instancng is a standard property for custom class modules in MS Access 2000
and XP.

Are we talking about different things?

Shamil

P.S. Unfortunately I don't see Instancing property for Forms' and Reports'
modules (am I missing it?) - so maybe ClassExposer Add-In for MS
Access2000/XP to expose forms' and reports' modules isn't a totally crazy
idea....

----- Original Message -----
From: "John Colby" <jcolby at colbyconsulting.com>
To: <accessd at databaseadvisors.com>
Sent: Saturday, June 07, 2003 12:10 AM
Subject: RE: [AccessD] Where does WithEvents go?


> Shamil,
>
> I don't understand how to sink an sourced from a class in a library
without
> being able to dimension the class specifically as that class type
>
> dim withevents SomeCls as MyClass
>
> If MyClass is in a lib, then this dim statement doesn't work since MyClass
> isn't exposed.
>
> John W. Colby
> www.colbyconsulting.com
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Shamil
> Salakhetdinov
> Sent: Friday, June 06, 2003 2:28 PM
> To: accessd at databaseadvisors.com
> Subject: Re: [AccessD] Where does WithEvents go?
>
>
> > I think the Access  Developer's Handbook
> > has a sentence or several on this too.
> Bob,
>
> I've never read ADH for Acc97 and up so I can only guess what it states
but
> I can publicly bet (:)) a box of famous here now after Gustav Brock's
> promotion Nevskoye beer vs. a bottle of Tequila(it's expensive in Russia)
> that you can do what you need using Public Not Creatable classes - I mean
> EXACTLY the same you can do if you write an ActiveX dll EXCEPT only one
> thing you'll have to create AT LEAST one (class factory) class instance
> using wrapper/helper function/sub from standard module - ALL THE REST can
be
> in your custom classes including public events, which can be raised from
> them and captured(/sunk) in the the form from your frontend...
>
> e.g. you can create in your lib database a custom class Class1 with
> PublicNotCreatable instancing:
>
> Public Event abc()
>
> Public Function FireAbc()
>     RaiseEvent abc
> End Function
>
> and a standard module with a wrapper function:
>
> Public Function getABC() As Class1
>     Set getABC = New Class1
> End Function
>
> and then in your front-end form you can write:
>
> Private WithEvents a As Class1
>
> Private Sub Form_Load()
>     Set a = getAbc
> End Sub
>
>
> Private Sub a_abc()
>     MsgBox "ABC fired"
> End Sub
>
> Private Sub Command0_Click()
>     a.FireAbc
> End Sub
>
> If this isn't what you're looking for then the please clarify in more
> details what is the task, which you'd like to solve and why
> PublicNonCreatble instancing isn't enough to solve it.
>
> Shamil
>
> ----- Original Message -----
> From: "Bob Bedell" <bobbedell15 at msn.com>
> To: <accessd at databaseadvisors.com>
> Sent: Friday, June 06, 2003 5:13 PM
> Subject: Re: [AccessD] Where does WithEvents go?
>
>
> > Hi Shamil,
> >
> > Thanks for the thought. My Instancing property is, unfortunately,
already
> > set to PublicNotCreatable. My
> > calling database can see and call an instance of GetclsInventory fine.
The
> > wrapper function returns an
> > object with ten fingers and toes. All properties and methods, except the
> > custom event, work fine.
> > Here's the wrapper again (just for the sake of pointing out one thing):
> >
> > Public Function GetclsInventory()
> >     Dim objInventory As clsInventory
> >     Set GetclsInventory = New clsInventory
> > End Function
> >
> > It seems that in order for GetclsInventory to be able to raise a custom
> > event, the Dim line here would
> > have to read:
> >
> > Dim WithEvents objInventory As clsInventory
> >
> > That, I assume, is where WithEvents would need to go: with the object
> > declaration. But I can't do that
> > here because I have the wrapper in a standard code module, and with
events
> > can only be used in form
> > and class modules. So my options seem to be (none of which I have been
> able
> > to make work) to
> > declare objInventory in either my calling form class somehow (can't come
> up
> > with a visible global
> > variable), or in another class module in the library or calling
database,
> or
> > in the clsInventory class itself. I
> > was just hoping someone would say, "Oh sure, wrapper function, goes in
> class
> > w in component x. Call it
> > with y in component z.", or "Sorry, can't raise custom events from an
> Access
> > library database.", etc.
> > >From what little I've been able to read on the subject (I found a whole
> > paragraph in one of Wrox's
> > Access books), the wrapper should go in a standard module in the library
> > database. That, however, rules
> > out the use of custom events with WithEvents). I think the Access
> > Developer's Handbook has a
> > sentence or several on this too. Compiling an ActiveX dll is always
> another
> > option. But I wanted to give
> > the Access library a test drive.
> >
> > Thanks again for the reply.
> >
> > Bob
> >
> >
> > >From: "Shamil Salakhetdinov" <shamil at smsconsulting.spb.ru>
> > >Reply-To: accessd at databaseadvisors.com
> > >To: accessd at databaseadvisors.com
> > >Subject: Re: [AccessD] Where does WithEvents go?
> > >Date: Fri, 6 Jun 2003 12:55:25 +0400
> > >
> > >Bob,
> > >
> > >You can set your class module's Instancing property to
> > >'2-PublicNotCreatable' then you can continue to use it the way you used
> it
> > >without library - you will just need to get its instance by your
> > >wrapped/helper function GetclsInventory...
> > >
> > >HTH,
> > >Shamil
> > >
> > >----- Original Message -----
> > >   From: Bob Bedell
> > >   To: accessD at databaseadvisors.com
> > >   Sent: Friday, June 06, 2003 10:21 AM
> > >   Subject: [AccessD] Where does WithEvents go?
> > >
> > >
> > >   I hope I can make this intelligible. Info on this issue seems a bit
> > >sparse. I have a custom class and a form that work fine together. The
> class
> > >declares a custom event using Public Event syntax in the general
> > >declaration and Raise syntax in a method. The calling class (the form)
> > >declares a private instance of the class using WithEvents and
> instantiates
> > >it. No problems.
> > >
> > >
> > >
> > >   Now I'm trying to import the class into a library (mda.) and set a
> > >reference to it in the database that contains the calling form. It's my
> > >understanding that my calling application can't instantiate the class
> > >directly, and needs to use a wrapper function. So I added a standard
> module
> > >to the calling application that calls a function in the library
database
> > >which returns a copy of the object. The calling database then has a
> public,
> > >shared copy of the object to work with. The standard module in the
> calling
> > >database is:
> > >
> > >
> > >
> > >   Public g_oInventory As clsInventory
> > >
> > >
> > >
> > >   Public Sub Startup()
> > >
> > >       ' Get handles to shared objects
> > >
> > >       Set g_objInventory = GetclsInventory
> > >
> > >
> > >
> > >       DoCmd.OpenForm "frmInventory"
> > >
> > >   End Sub
> > >
> > >
> > >
> > >   The standard module in the library database (where the class is
> located)
> > >is:
> > >
> > >
> > >
> > >   Public Function GetclsInventory()
> > >
> > >       Dim objInventory As clsInventory
> > >
> > >       Set GetclsInventory = New clsInventory
> > >
> > >   End Function
> > >
> > >
> > >
> > >   Here's my problem. Using the library scenario, I can't find any
place
> to
> > >put my WithEvents statement. The old declaration (before seperating the
> > >class and the form) was in the forms general declaration:
> > >
> > >
> > >
> > >   Private WithEvents m_objProduct As clsInventory
> > >
> > >
> > >
> > >    But now (library scenario) the declaration needs to be global,
needs
> to
> > >include WithEvents, and needs to be in a class or form module
(WithEvents
> > >won't work in a standard module).
> > >
> > >
> > >
> > >   Should I do a VB ActiveX component instead? I'm kinda' at a loss
here.
> > >Real limited experience with classes/libraries stuff. Thanks to anyone
> who
> > >can make heads or tails of that.
> > >
> > >
> > >
> > >   Bob
> > >
> > >
> > >
> > >
> > >
> >
>
>---------------------------------------------------------------------------
> ---
> > >
> > >
> > >   _______________________________________________
> > >   AccessD mailing list
> > >   AccessD at databaseadvisors.com
> > >   http://databaseadvisors.com/mailman/listinfo/accessd
> > >   Website: http://www.databaseadvisors.com
> > >
> > >_______________________________________________
> > >AccessD mailing list
> > >AccessD at databaseadvisors.com
> > >http://databaseadvisors.com/mailman/listinfo/accessd
> > >Website: http://www.databaseadvisors.com
> >
> > _________________________________________________________________
> > MSN 8 with e-mail virus protection service: 2 months FREE*
> > http://join.msn.com/?page=features/virus
> >
> > _______________________________________________
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
>
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
>
>
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com




More information about the AccessD mailing list