[AccessD] Off the wall Events question...

Patricio Galleguillos pgalleguillos at plus.cl
Thu Feb 13 05:29:22 CST 2003


Hi Shamil and group

You can know at runtime your access version with

    VersionDelAccess = SysCmd(acSysCmdAccessVer)

(Don't know if syscmd works in access97)

Saludos cordiales,
Patricio Galleguillos


-----Mensaje original-----
De: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] En nombre de Shamil
Salakhetdinov
Enviado el: jueves, 13 de febrero de 2003 7:40
Para: accessd at databaseadvisors.com
Asunto: Re: [AccessD] Off the wall Events question...

> So, does anyone know how to accomplish the same thing in Access 97.
Drew,

It looks a little bit ugly but it can be done in Acc97 and ported to
A2K/AXP/A11 with just a few edits of the source code - here is one of
the
ways to do it:

'================  cut here ==================
'+ CMyClassWithEvents (custom class module)
#Const Acc97 = 1 ' change to 0 in A2K/AXP/A11
#If Acc97 Then
Private mobjCallBackClient As Object

Public Sub Init(ByRef robjCallBackClient As Object)
    Set mobjCallBackClient = robjCallBackClient
End Sub
Public Sub Terminate()
    Set mobjCallBackClient = Nothing
End Sub
#Else
'Event MyEvent() ' uncomment in A2K/AXP/A11
#End If

Public Sub CallBackTest()
#If Acc97 Then
    mobjCallBackClient.MyEvent
#Else
    'RaiseEvent MyEvent  ' uncomment in A2K/AXP/A11
#End If
End Sub
'- CMyClassWithEvents

'================  cut here ==================
'+ CMyCustomsEventsClient (custom class module)
#Const Acc97 = 1 ' change to 0 in A2K/AXP/A11

#If Acc97 Then
Private mobjMyClassWithEvents As CMyClassWithEvents
#Else
Private WithEvents mobjMyClassWithEvents As CMyClassWithEvents
#End If

Public Sub Test()
   Set mobjMyClassWithEvents = New CMyClassWithEvents
   With mobjMyClassWithEvents
     #If Acc97 Then
      .Init Me
      .CallBackTest
      .Terminate
     #Else
      .CallBackTest
     #End If
   End With
End Sub

Private Sub mobjMyClassWithEvents_MyEvent()
    MsgBox "MyEvent fired!", vbOKOnly + vbInformation
End Sub

#If Acc97 Then
Public Sub MyEvent()
    mobjMyClassWithEvents_MyEvent
End Sub
#Else
#End If
'- CMyCustomsEventsClient

'================  cut here ==================
'+ basTest (standard module)
Public Sub a_test()
    Dim o As CMyCustomsEventsClient
    Set o = New CMyCustomsEventsClient
    o.Test
End Sub
'- basTest
'================  cut here ==================

- Of course you can set project level conditional compilation constant
Acc97
to have less work during your port to A2k/Axp/A11;
- Unfortunately Event and RaiseEvent are reserved words in Acc97 and
even
conditional compilation doesn't allow to use them without comments - so
during port to A2k/Axp/A11 additional work of uncommenting code lines
with
RaiseEvent and Event will be needed...;
- I did use very simple custom event without any arguments to show the
principle - in the case of the usage of event arguments callback methods
can
be specific for every custom event or this technique can use more
general
callback method with EventName as the first paramater and ParamArray
following it and Select Case inside it to call specific private custom
event
sinks ...;
- Init method is what MS Access does "behind the curtains" when you use
WithEvents;
- Terminate method is a MUST HAVE for this custom events Acc97
simulation -
without it object instances will not be released because of cross-refs
and
you'll get memory leak....

HTH,
Shamil


----- Original Message -----
From: "Drew Wutka" <DWUTKA at marlow.com>
To: <AccessD at databaseadvisors.com>
Sent: Thursday, February 13, 2003 7:49 AM
Subject: [AccessD] Off the wall Events question...


> With all of the posts about events recently, something just dawned on
me.
> Actually, it came crashing down on me.
>
> I have been rewriting my MiniCalendar form lately.  My original works,
but
> is far from elegant, or even slick.  I had visualized a lot of changes
I
> wanted to incorporate, and just starting wacking at them all.
>
> So far I have gotten some neat 'features', such as a rounded form,
extended
> dropdown capability, etc.  However, one of the new features that I had
> planned on, I now know I can't do directly.  The old form accepted a
form
> name and control name, and would return a date to that control.  What
I
> wanted to use in this version was raiseevent, to fire an event on the
> calling form.  Thinking in VB 6 mode, I didn't even realize this would
be
a
> problem with Access 97, since I can do this easily in VB 6.  But with
all
of
> the recent posts, I realized that event and raiseevent are reserved
keywords
> in Access 97 (VBA 5.0), but do nothing.
>
> ARG!!!!
>
> So, does anyone know how to accomplish the same thing in Access 97.  I
will
> be making a 2000 version of my calendar, so obviously I can use event
and
> raiseevent there, but I am developing the new version in 97 first, so
I
need
> a work around.  I am thinking about using one of the form's current
events,
> and triggering it.  (Probably AfterUpdate).  I wanted my own event,
but
that
> doesn't look possible.  I even tried hunting through the VBA .dll's,
to
see
> if I could fudge an API or two, but no luck there.
>
> Any thoughts?
>
> Drew
> _______________________________________________
> 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