[AccessD] Where does WithEvents go?

Bob Bedell bobbedell15 at msn.com
Sat Jun 7 18:17:43 CDT 2003


Hi Shamil,

Didn't mean to delay letting you know how this worked for me, but I was out 
of town yesterday and most of today. Just pulled in. I'm looking forward to 
catching up. (Seems like you and John have been batting this around a bit).

Interestingly, ADH demonstrates (while neither endorsing nor disapproving) 
the work-around you argue against (relying on features available in VB6 that 
aren't supported by VBA) for a purpose other than exposing classes. It shows 
how to edit a class's source file on disk in a way that emulates setting 
procedure attributes with the Procedure Attributes dialog available in the 
VB IDE. Same work-around, different use (though thery're both concerned with 
setting attributes of one sort or another that the VBA IDE can't access).

I'll let you know how I make out with your class factory suggestion. Thanks 
for the help.

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 22:27:40 +0400
>
> > 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

_________________________________________________________________
STOP MORE SPAM with the new MSN 8 and get 2 months FREE*  
http://join.msn.com/?page=features/junkmail



More information about the AccessD mailing list