[AccessD] Where does WithEvents go?

Shamil Salakhetdinov shamil at smsconsulting.spb.ru
Fri Jun 6 13:27:40 CDT 2003


> 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



More information about the AccessD mailing list